*/*: Clean PYTHON_COMPAT of obsolete impls
[gentoo.git] / sys-cluster / neutron / neutron-15.0.0.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=7
5 PYTHON_COMPAT=( python2_7 python3_{6,7} )
6 # still no 34 :( https://bugs.launchpad.net/neutron/+bug/1630439
7
8 inherit distutils-r1 linux-info user
9
10 DESCRIPTION="A virtual network service for Openstack"
11 HOMEPAGE="https://launchpad.net/neutron"
12 if [[ ${PV} == *9999 ]];then
13         inherit git-r3
14         SRC_URI="https://dev.gentoo.org/~prometheanfire/dist/openstack/neutron/train/configs.tar.gz -> neutron-configs-${PV}.tar.gz
15         https://dev.gentoo.org/~prometheanfire/dist/openstack/neutron/train/ml2_plugins.tar.gz -> neutron-ml2-plugins-${PV}.tar.gz"
16         EGIT_REPO_URI="https://github.com/openstack/neutron.git"
17         EGIT_BRANCH="stable/train"
18 else
19         SRC_URI="https://dev.gentoo.org/~prometheanfire/dist/openstack/neutron/train/configs.tar.gz -> neutron-configs-${PV}.tar.gz
20         https://dev.gentoo.org/~prometheanfire/dist/openstack/neutron/train/ml2_plugins.tar.gz -> neutron-ml2-plugins-${PV}.tar.gz
21         https://tarballs.openstack.org/${PN}/${P}.tar.gz"
22         KEYWORDS="amd64 ~arm64 x86"
23 fi
24
25 LICENSE="Apache-2.0"
26 SLOT="0"
27 IUSE="compute-only dhcp haproxy ipv6 l3 metadata openvswitch linuxbridge server sqlite +mysql postgres"
28 REQUIRED_USE="!compute-only? ( || ( mysql postgres sqlite ) )
29                                                 compute-only? ( !mysql !postgres !sqlite !dhcp !l3 !metadata !server
30                                                 || ( openvswitch linuxbridge ) )"
31
32 CDEPEND=">=dev-python/pbr-4.0.0[${PYTHON_USEDEP}]"
33 DEPEND="
34         dev-python/setuptools[${PYTHON_USEDEP}]
35         ${CDEPEND}
36         app-admin/sudo"
37
38 RDEPEND="
39         ${CDEPEND}
40         >=dev-python/paste-2.0.2[${PYTHON_USEDEP}]
41         >=dev-python/pastedeploy-1.5.0-r1[${PYTHON_USEDEP}]
42         >=dev-python/routes-2.3.1[${PYTHON_USEDEP}]
43         >=dev-python/debtcollector-1.2.0[${PYTHON_USEDEP}]
44         >=dev-python/decorator-3.4.0[${PYTHON_USEDEP}]
45         >=dev-python/eventlet-0.18.4[${PYTHON_USEDEP}]
46         !~dev-python/eventlet-0.20.1[${PYTHON_USEDEP}]
47         >=dev-python/pecan-1.3.2[${PYTHON_USEDEP}]
48         >=dev-python/httplib2-0.9.1[${PYTHON_USEDEP}]
49         >=dev-python/requests-2.14.2[${PYTHON_USEDEP}]
50         >=dev-python/jinja-2.10[${PYTHON_USEDEP}]
51         >=dev-python/netaddr-0.7.18[${PYTHON_USEDEP}]
52         >=dev-python/netifaces-0.10.4[${PYTHON_USEDEP}]
53         >=dev-python/neutron-lib-1.29.1[${PYTHON_USEDEP}]
54         >=dev-python/python-neutronclient-6.3.0[${PYTHON_USEDEP}]
55         >=dev-python/tenacity-3.2.1[${PYTHON_USEDEP}]
56         compute-only? (
57                 >=dev-python/sqlalchemy-1.2.0[${PYTHON_USEDEP}]
58         )
59         sqlite? (
60                 >=dev-python/sqlalchemy-1.2.0[sqlite,${PYTHON_USEDEP}]
61         )
62         mysql? (
63                 >=dev-python/pymysql-0.7.6[${PYTHON_USEDEP}]
64                 !~dev-python/pymysql-0.7.7[${PYTHON_USEDEP}]
65                 >=dev-python/sqlalchemy-1.2.0[${PYTHON_USEDEP}]
66         )
67         postgres? (
68                 >=dev-python/psycopg-2.5.0[${PYTHON_USEDEP}]
69                 >=dev-python/sqlalchemy-1.2.0[${PYTHON_USEDEP}]
70         )
71         >=dev-python/webob-1.8.2[${PYTHON_USEDEP}]
72         >=dev-python/keystoneauth-3.4.0[${PYTHON_USEDEP}]
73         >=dev-python/alembic-0.8.10[${PYTHON_USEDEP}]
74         >=dev-python/six-1.10.0[${PYTHON_USEDEP}]
75         >=dev-python/stevedore-1.20.1[${PYTHON_USEDEP}]
76         >=dev-python/oslo-cache-1.26.0[${PYTHON_USEDEP}]
77         >=dev-python/oslo-concurrency-3.26.0[${PYTHON_USEDEP}]
78         >=dev-python/oslo-config-5.2.0[${PYTHON_USEDEP}]
79         >=dev-python/oslo-context-2.19.2[${PYTHON_USEDEP}]
80         >=dev-python/oslo-db-4.37.0[${PYTHON_USEDEP}]
81         >=dev-python/oslo-i18n-3.15.3[${PYTHON_USEDEP}]
82         >=dev-python/oslo-log-3.36.0[${PYTHON_USEDEP}]
83         >=dev-python/oslo-messaging-5.29.0[${PYTHON_USEDEP}]
84         >=dev-python/oslo-middleware-3.31.0[${PYTHON_USEDEP}]
85         >=dev-python/oslo-policy-1.30.0[${PYTHON_USEDEP}]
86         >=dev-python/oslo-privsep-1.32.0[${PYTHON_USEDEP}]
87         >=dev-python/oslo-reports-1.18.0[${PYTHON_USEDEP}]
88         >=dev-python/oslo-rootwrap-5.8.0[${PYTHON_USEDEP}]
89         >=dev-python/oslo-serialization-1.18.0[${PYTHON_USEDEP}]
90         !~dev-python/oslo-serialization-2.19.1[${PYTHON_USEDEP}]
91         >=dev-python/oslo-service-1.24.0[${PYTHON_USEDEP}]
92         !~dev-python/oslo-service-1.28.1[${PYTHON_USEDEP}]
93         >=dev-python/oslo-upgradecheck-0.1.0[${PYTHON_USEDEP}]
94         >=dev-python/oslo-utils-3.33.0[${PYTHON_USEDEP}]
95         >=dev-python/oslo-versionedobjects-1.35.1[${PYTHON_USEDEP}]
96         >=dev-python/osprofiler-2.3.0[${PYTHON_USEDEP}]
97         >=dev-python/os-ken-0.3.0[${PYTHON_USEDEP}]
98         >=dev-python/ovs-2.8.0[${PYTHON_USEDEP}]
99         >=dev-python/ovsdbapp-0.9.1[${PYTHON_USEDEP}]
100         >=dev-python/psutil-3.2.2[${PYTHON_USEDEP}]
101         >=dev-python/pyroute2-0.5.3[${PYTHON_USEDEP}]
102         $(python_gen_cond_dep '>=dev-python/weakrefmethod-1.0.2[${PYTHON_USEDEP}]' 'python2_7')
103         >=dev-python/python-novaclient-9.1.0[${PYTHON_USEDEP}]
104         >=dev-python/openstacksdk-0.31.2[${PYTHON_USEDEP}]
105         >=dev-python/python-designateclient-2.7.0[${PYTHON_USEDEP}]
106         >=dev-python/os-xenapi-0.3.1[${PYTHON_USEDEP}]
107         >=dev-python/os-vif-1.15.1[${PYTHON_USEDEP}]
108         dev-python/pyudev[${PYTHON_USEDEP}]
109         sys-apps/iproute2
110         net-misc/iputils[arping]
111         net-misc/bridge-utils
112         net-firewall/ipset
113         net-firewall/iptables
114         net-firewall/ebtables
115         net-firewall/conntrack-tools
116         haproxy? ( net-proxy/haproxy )
117         openvswitch? ( net-misc/openvswitch )
118         ipv6? (
119                 net-misc/radvd
120                 >=net-misc/dibbler-1.0.1
121         )
122         dhcp? ( net-dns/dnsmasq[dhcp-tools] )"
123
124 #PATCHES=(
125 #)
126
127 pkg_pretend() {
128         linux-info_pkg_setup
129         CONFIG_CHECK_MODULES="VLAN_8021Q IP6_NF_FILTER IP6_NF_IPTABLES IP_NF_TARGET_REJECT \
130         IP_NF_MANGLE IP_NF_TARGET_MASQUERADE NF_NAT_IPV4 NF_CONNTRACK_IPV4 NF_DEFRAG_IPV4 \
131         NF_NAT_IPV4 NF_NAT NF_CONNTRACK IP_NF_FILTER IP_NF_IPTABLES NETFILTER_XTABLES"
132         if linux_config_exists; then
133                 for module in ${CONFIG_CHECK_MODULES}; do
134                         linux_chkconfig_present ${module} || ewarn "${module} needs to be enabled in kernel"
135                 done
136         fi
137 }
138
139 pkg_setup() {
140         enewgroup neutron
141         enewuser neutron -1 -1 /var/lib/neutron neutron
142 }
143
144 pkg_config() {
145         fperms 0700 /var/log/neutron
146         fowners neutron:neutron /var/log neutron
147 }
148
149 src_prepare() {
150         sed -i '/^hacking/d' test-requirements.txt || die
151         # it's /bin/ip not /sbin/ip
152         sed -i 's/sbin\/ip\,/bin\/ip\,/g' etc/neutron/rootwrap.d/* || die
153         distutils-r1_python_prepare_all
154 }
155
156 python_install_all() {
157         distutils-r1_python_install_all
158         if use server; then
159                 newinitd "${FILESDIR}/neutron.initd" "neutron-server"
160                 newconfd "${FILESDIR}/neutron-server.confd" "neutron-server"
161                 dosym /etc/neutron/plugin.ini /etc/neutron/plugins/ml2/ml2_conf.ini
162         fi
163         if use dhcp; then
164                 newinitd "${FILESDIR}/neutron.initd" "neutron-dhcp-agent"
165                 newconfd "${FILESDIR}/neutron-dhcp-agent.confd" "neutron-dhcp-agent"
166         fi
167         if use l3; then
168                 newinitd "${FILESDIR}/neutron.initd" "neutron-l3-agent"
169                 newconfd "${FILESDIR}/neutron-l3-agent.confd" "neutron-l3-agent"
170         fi
171         if use metadata; then
172                 newinitd "${FILESDIR}/neutron.initd" "neutron-metadata-agent"
173                 newconfd "${FILESDIR}/neutron-metadata-agent.confd" "neutron-metadata-agent"
174         fi
175         if use openvswitch; then
176                 newinitd "${FILESDIR}/neutron.initd" "neutron-openvswitch-agent"
177                 newconfd "${FILESDIR}/neutron-openvswitch-agent.confd" "neutron-openvswitch-agent"
178                 newinitd "${FILESDIR}/neutron.initd" "neutron-ovs-cleanup"
179                 newconfd "${FILESDIR}/neutron-openvswitch-agent.confd" "neutron-ovs-cleanup"
180         fi
181         if use linuxbridge; then
182                 newinitd "${FILESDIR}/neutron.initd" "neutron-linuxbridge-agent"
183                 newconfd "${FILESDIR}/neutron-linuxbridge-agent.confd" "neutron-linuxbridge-agent"
184         fi
185         diropts -m 755 -o neutron -g neutron
186         dodir /var/log/neutron /var/lib/neutron
187         keepdir /etc/neutron
188         insinto /etc/neutron
189         insopts -m 0640 -o neutron -g neutron
190
191         doins etc/*
192         # stupid renames
193         insinto /etc/neutron
194         doins -r "etc/neutron/plugins"
195         insopts -m 0640 -o root -g root
196         doins "etc/rootwrap.conf"
197         doins -r "etc/neutron/rootwrap.d"
198
199         #add sudoers definitions for user neutron
200         insinto /etc/sudoers.d/
201         insopts -m 0440 -o root -g root
202         newins "${FILESDIR}/neutron.sudoersd" neutron
203
204         # add generated configs
205         cd "${D}/etc/neutron" || die
206         unpack "neutron-configs-${PV}.tar.gz"
207         cd "${D}/etc/neutron/plugins/ml2" || die
208         unpack "neutron-ml2-plugins-${PV}.tar.gz"
209
210         # correcting perms
211         fowners neutron:neutron -R "/etc/neutron"
212         fperms o-rwx -R "/etc/neutron/"
213
214         #remove superfluous stuff
215         rm -R "${D}/usr/etc/"
216 }
217
218 python_install() {
219         distutils-r1_python_install
220         # copy migration conf file (not coppied on install via setup.py script)
221         python_moduleinto neutron/db/migration/alembic_migrations
222         python_domodule "neutron/db/migration/alembic_migrations/versions"
223 }
224
225 pkg_postinst() {
226         elog
227         elog "neutron-server's conf.d file may need updating to include additional ini files"
228         elog "We currently assume the ml2 plugin will be used but do not make assumptions"
229         elog "on if you will use openvswitch or linuxbridge (or something else)"
230         elog
231         elog "Other conf.d files may need updating too, but should be good for the default use case"
232         elog
233 }