1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
5 PYTHON_COMPAT=( python2_7 python3_{6,7} )
6 # still no 34 :( https://bugs.launchpad.net/neutron/+bug/1630439
8 inherit distutils-r1 linux-info user
10 DESCRIPTION="A virtual network service for Openstack"
11 HOMEPAGE="https://launchpad.net/neutron"
12 if [[ ${PV} == *9999 ]];then
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"
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"
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 ) )"
32 CDEPEND=">=dev-python/pbr-4.0.0[${PYTHON_USEDEP}]"
34 dev-python/setuptools[${PYTHON_USEDEP}]
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}]
57 >=dev-python/sqlalchemy-1.2.0[${PYTHON_USEDEP}]
60 >=dev-python/sqlalchemy-1.2.0[sqlite,${PYTHON_USEDEP}]
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}]
68 >=dev-python/psycopg-2.5.0[${PYTHON_USEDEP}]
69 >=dev-python/sqlalchemy-1.2.0[${PYTHON_USEDEP}]
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}]
110 net-misc/iputils[arping]
111 net-misc/bridge-utils
113 net-firewall/iptables
114 net-firewall/ebtables
115 net-firewall/conntrack-tools
116 haproxy? ( net-proxy/haproxy )
117 openvswitch? ( net-misc/openvswitch )
120 >=net-misc/dibbler-1.0.1
122 dhcp? ( net-dns/dnsmasq[dhcp-tools] )"
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"
141 enewuser neutron -1 -1 /var/lib/neutron neutron
145 fperms 0700 /var/log/neutron
146 fowners neutron:neutron /var/log neutron
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
156 python_install_all() {
157 distutils-r1_python_install_all
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
164 newinitd "${FILESDIR}/neutron.initd" "neutron-dhcp-agent"
165 newconfd "${FILESDIR}/neutron-dhcp-agent.confd" "neutron-dhcp-agent"
168 newinitd "${FILESDIR}/neutron.initd" "neutron-l3-agent"
169 newconfd "${FILESDIR}/neutron-l3-agent.confd" "neutron-l3-agent"
171 if use metadata; then
172 newinitd "${FILESDIR}/neutron.initd" "neutron-metadata-agent"
173 newconfd "${FILESDIR}/neutron-metadata-agent.confd" "neutron-metadata-agent"
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"
181 if use linuxbridge; then
182 newinitd "${FILESDIR}/neutron.initd" "neutron-linuxbridge-agent"
183 newconfd "${FILESDIR}/neutron-linuxbridge-agent.confd" "neutron-linuxbridge-agent"
185 diropts -m 755 -o neutron -g neutron
186 dodir /var/log/neutron /var/lib/neutron
189 insopts -m 0640 -o neutron -g 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"
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
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"
211 fowners neutron:neutron -R "/etc/neutron"
212 fperms o-rwx -R "/etc/neutron/"
214 #remove superfluous stuff
215 rm -R "${D}/usr/etc/"
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"
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)"
231 elog "Other conf.d files may need updating too, but should be good for the default use case"