From 6806482a7ba6f020b0cff44b2b797eede2b702af Mon Sep 17 00:00:00 2001 From: Bruce Ashfield Date: Fri, 4 Oct 2013 00:26:04 -0400 Subject: python-nova: unify controller and compute recipes The split of compute and controller is no longer necesary, since configuration inheritance is done with overriding layers, not split recipes. This simplifies the build, and packaging of the recipe. Good riddance. Signed-off-by: Bruce Ashfield --- .../python/python-nova_2013.1.3.bb | 187 +++++++++++++++++---- 1 file changed, 158 insertions(+), 29 deletions(-) (limited to 'meta-openstack/recipes-devtools/python/python-nova_2013.1.3.bb') diff --git a/meta-openstack/recipes-devtools/python/python-nova_2013.1.3.bb b/meta-openstack/recipes-devtools/python/python-nova_2013.1.3.bb index e7f844a..c2dd1f3 100644 --- a/meta-openstack/recipes-devtools/python/python-nova_2013.1.3.bb +++ b/meta-openstack/recipes-devtools/python/python-nova_2013.1.3.bb @@ -1,49 +1,162 @@ -include python-nova.inc +DESCRIPTION = "Nova is a cloud computing fabric controller" +HOMEPAGE = "https://launchpad.net/nova" +SECTION = "devel/python" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=1dece7821bf3fd70fe1309eaa37d52a2" -inherit useradd +DEPENDS = "sudo" -pkg_postinst_${SRCNAME}-common () { - if [ "x$D" != "x" ]; then - exit 1 +PR = "r0" +SRCNAME = "nova" + +FILESEXTRAPATHS := "${THISDIR}/${PN}" + +SRC_URI = "https://launchpad.net/${SRCNAME}/grizzly/${PV}/+download/${SRCNAME}-${PV}.tar.gz \ + file://0001-nova-api-paste.ini-make-controller-IP-configurable.patch \ + " + +SRC_URI += "file://nova-all \ + file://nova-consoleauth \ + file://nova-novncproxy \ + file://nova.conf \ + file://openrc \ + " + +SRC_URI[md5sum] = "6215982b9ed08b9042e088470d60a0a6" +SRC_URI[sha256sum] = "f7c25186920daccb16867c5fd272318beb8cc076e5a55f79b5906618ef2724f4" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit update-rc.d setuptools identity hosts + +do_install_append() { + if [ ! -f "${WORKDIR}/nova.conf" ]; then + return fi - if [ -d $D/home/root/ ]; then - echo "source /etc/nova/openrc" >> $D/home/root/.bashrc - elif [ -d $D/root/ ]; then - echo "source /etc/nova/openrc" >> $D/root/.bashrc + TEMPLATE_CONF_DIR=${S}${sysconfdir}/${SRCNAME} + NOVA_CONF_DIR=${D}/${sysconfdir}/nova + + install -d ${NOVA_CONF_DIR} + install -m 600 ${S}/etc/nova/policy.json ${NOVA_CONF_DIR}/ + + # Deploy filters to /etc/nova/rootwrap.d + install -m 755 -d ${NOVA_CONF_DIR}/rootwrap.d + install -m 600 ${S}/etc/nova/rootwrap.d/*.filters ${NOVA_CONF_DIR}/rootwrap.d + chown -R root:root ${NOVA_CONF_DIR}/rootwrap.d + chmod 644 ${NOVA_CONF_DIR}/rootwrap.d + + # Set up rootwrap.conf, pointing to /etc/nova/rootwrap.d + install -m 644 ${S}/etc/nova/rootwrap.conf ${NOVA_CONF_DIR}/ + sed -e "s:^filters_path=.*$:filters_path=${sysconfdir}/nova/rootwrap.d:" \ + -i ${NOVA_CONF_DIR}/rootwrap.conf + chown root:root $NOVA_CONF_DIR/rootwrap.conf + + # Set up the rootwrap sudoers for nova + install -d ${D}${sysconfdir}/sudoers.d + touch ${D}${sysconfdir}/sudoers.d/nova-rootwrap + chmod 0440 ${D}${sysconfdir}/sudoers.d/nova-rootwrap + chown root:root ${D}${sysconfdir}/sudoers.d/nova-rootwrap + echo "root ALL=(root) NOPASSWD: ${bindir}/nova-rootwrap" > \ + ${D}${sysconfdir}/sudoers.d/nova-rootwrap + + # Configuration options + sed -e "s:%SERVICE_TENANT_NAME%:${SERVICE_TENANT_NAME}:g" \ + ${TEMPLATE_CONF_DIR}/api-paste.ini > ${WORKDIR}/api-paste.ini + sed -e "s:%SERVICE_USER%:${SRCNAME}:g" -i ${WORKDIR}/api-paste.ini + sed -e "s:%SERVICE_PASSWORD%:${SERVICE_PASSWORD}:g" \ + -i ${WORKDIR}/api-paste.ini + sed -e "s:%CONTROLLER_IP%:${CONTROLLER_IP}:g" -i ${WORKDIR}/api-paste.ini + + sed -e "s:%DB_USER%:${DB_USER}:g" -i ${WORKDIR}/nova.conf + sed -e "s:%DB_PASSWORD%:${DB_PASSWORD}:g" -i ${WORKDIR}/nova.conf + + sed -e "s:%CONTROLLER_IP%:${CONTROLLER_IP}:g" -i ${WORKDIR}/nova.conf + sed -e "s:%CONTROLLER_HOST%:${CONTROLLER_HOST}:g" -i ${WORKDIR}/nova.conf + + sed -e "s:%COMPUTE_IP%:${COMPUTE_IP}:g" -i ${WORKDIR}/nova.conf + sed -e "s:%COMPUTE_HOST%:${COMPUTE_HOST}:g" -i ${WORKDIR}/nova.conf + + sed -e "s:%OS_PASSWORD%:${ADMIN_PASSWORD}:g" -i ${WORKDIR}/openrc + sed -e "s:%SERVICE_TOKEN%:${SERVICE_TOKEN}:g" -i ${WORKDIR}/openrc + + sed -e "s:%CONTROLLER_IP%:${CONTROLLER_IP}:g" -i ${WORKDIR}/openrc + sed -e "s:%CONTROLLER_HOST%:${CONTROLLER_HOST}:g" -i ${WORKDIR}/openrc + + # Copy the configuration file + install -m 664 ${WORKDIR}/nova.conf ${NOVA_CONF_DIR}/nova.conf + install -m 664 ${WORKDIR}/api-paste.ini ${NOVA_CONF_DIR} + install -m 664 ${WORKDIR}/openrc ${NOVA_CONF_DIR} + + install -d ${NOVA_CONF_DIR}/instances + + if ${@base_contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/nova-all ${D}${sysconfdir}/init.d/nova-all + install -m 0755 ${WORKDIR}/nova-consoleauth ${D}${sysconfdir}/init.d/nova-consoleauth + install -m 0755 ${WORKDIR}/nova-novncproxy ${D}${sysconfdir}/init.d/nova-novncproxy fi } -PACKAGES += "${SRCNAME}-common ${SRCNAME}-common-misc" - -#FILES_${PN} = "${files_${PN}}" -# -#FILES_${SRCNAME}-common = "${files_${SRCNAME}-common}" -# -#FILES_${SRCNAME}-common-misc = "${files_${SRCNAME}-compute} ${files_${SRCNAME}-controller}" +pkg_postinst_${SRCNAME}-controller () { + if [ "x$D" != "x" ]; then + exit 1 + fi -FILES_${PN} = "${libdir}/python*" + # This is to make sure postgres is configured and running + if ! pidof postmaster > /dev/null; then + /etc/init.d/postgresql-init + /etc/init.d/postgresql start + sleep 5 + fi -FILES_${SRCNAME}-common = " \ - ${bindir}/nova-manage \ - ${bindir}/nova-rootwrap \ - ${sysconfdir}/sudoers.d" + sudo -u postgres createdb nova + sleep 2 + nova-manage db sync +} -FILES_${SRCNAME}-common-misc = " \ - ${bindir}/nova-compute \ - ${sysconfdir}/${SRCNAME}/* \ - ${sysconfdir}/init.d/nova-compute \ - ${bindir} \ - ${sysconfdir}/init.d/nova-all" +pkg_postinst_${SRCNAME}-common () { + if [ "x$D" != "x" ]; then + exit 1 + fi -RDEPENDS_${SRCNAME}-common = "${PN} openssl openssl-misc libxml2 libxslt \ - iptables curl dnsmasq sudo procps" + if [ -d /home/root ]; then + echo "source /etc/nova/openrc" > /home/root/.bashrc + else + echo "source /etc/nova/openrc" > /root/.bashrc + fi +} USERADD_PACKAGES = "${PN}" GROUPADD_PARAM_${PN} = "--system nova" USERADD_PARAM_${PN} = "--system --home /var/lib/nova -g nova \ --no-create-home --shell /bin/false nova" +PACKAGES += " ${SRCNAME}-common ${SRCNAME}-compute ${SRCNAME}-controller" +PACKAGES += " ${SRCNAME}-consoleauth" +PACKAGES += " ${SRCNAME}-novncproxy" + + +FILES_${PN} = "${libdir}/*" + +FILES_${SRCNAME}-common = "${bindir}/nova-manage \ + ${bindir}/nova-rootwrap \ + ${sysconfdir}/${SRCNAME}/* \ + ${sysconfdir}/sudoers.d" + +FILES_${SRCNAME}-compute = "${bindir}/nova-compute \ + ${sysconfdir}/init.d/nova-compute" + +FILES_${SRCNAME}-controller = "${bindir}/* \ + ${sysconfdir}/init.d/nova-all " + +FILES_${SRCNAME}-consoleauth = " \ + ${sysconfdir}/init.d/nova-consoleauth \ +" +FILES_${SRCNAME}-novncproxy = " \ + ${sysconfdir}/init.d/nova-novncproxy \ +" + RDEPENDS_${PN} = " python-modules \ python-misc \ python-argparse \ @@ -79,3 +192,19 @@ RDEPENDS_${PN} = " python-modules \ python-webob \ python-websockify \ " + +RDEPENDS_${SRCNAME}-common = "${PN} openssl openssl-misc libxml2 libxslt \ + iptables curl dnsmasq sudo procps" + +RDEPENDS_${SRCNAME}-controller = "${PN} ${SRCNAME}-common \ + ${SRCNAME}-consoleauth \ + ${SRCNAME}-novncproxy \ + postgresql postgresql-client python-psycopg2" + +RDEPENDS_${SRCNAME}-compute = "${PN} ${SRCNAME}-common \ + qemu libvirt libvirt-libvirtd libvirt-python libvirt-virsh" + +INITSCRIPT_PACKAGES = "${SRCNAME}-controller ${SRCNAME}-consoleauth ${SRCNAME}-novncproxy" +INITSCRIPT_NAME_${SRCNAME}-controller = "nova-all" +INITSCRIPT_NAME_${SRCNAME}-consoleauth = "nova-consoleauth" +INITSCRIPT_NAME_${SRCNAME}-novncproxy = "nova-novncproxy" -- cgit v1.2.3-54-g00ecf