name: microstack version: rocky base: core18 summary: OpenStack on your laptop. description: | Microstack gives you an easy way to develop and test OpenStack workloads on your laptop. grade: stable confinement: classic environment: LD_LIBRARY_PATH: $SNAP/lib:$SNAP/lib/$SNAPCRAFT_ARCH_TRIPLET:$SNAP/usr/lib:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET PATH: $SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH LC_ALL: C OS_PLACEMENT_CONFIG_DIR: $SNAP/etc/nova/ # admin rc (TODO: put this someplace more sensible) OS_PROJECT_DOMAIN_NAME: default OS_USER_DOMAIN_NAME: default OS_PROJECT_NAME: admin OS_USERNAME: admin OS_PASSWORD: keystone OS_AUTH_URL: http://10.20.20.1:5000 OS_IDENTITY_API_VERSION: 3 OS_IMAGE_API_VERSION: 2 apps: # Openstack openstack: command: openstack # plugs: # - network # OpenStack Service Configuration configure: command: configure-openstack # plugs: # - network # Keystone keystone-uwsgi: command: snap-openstack keystone-uwsgi daemon: simple # plugs: # - network-bind keystone-manage: command: snap-openstack keystone-manage # plugs: # - network # Nova nova-uwsgi: command: snap-openstack nova-uwsgi daemon: simple # plugs: # - network-bind nova-api: command: snap-openstack nova-api-os-compute daemon: simple # plugs: # - network-bind nova-conductor: command: snap-openstack nova-conductor daemon: simple # plugs: # - network nova-scheduler: command: snap-openstack nova-scheduler daemon: simple # plugs: # - network nova-compute: command: snap-openstack nova-compute daemon: simple # plugs: # - network-bind # - network-control # - firewall-control # - hardware-observe # - libvirt # - openvswitch nova-api-metadata: command: snap-openstack nova-api-metadata daemon: simple # plugs: # - network-bind # - firewall-control nova-manage: command: snap-openstack nova-manage # plugs: # - network # Neutron neutron-api: command: snap-openstack neutron-server daemon: simple # plugs: # - network-bind neutron-openvswitch-agent: command: snap-openstack neutron-openvswitch-agent daemon: simple # plugs: # - network-bind # - network-control # - network-observe # - firewall-control # - process-control # - system-observe # - openvswitch neutron-l3-agent: command: snap-openstack neutron-l3-agent daemon: simple # plugs: # - network-bind # - network-control # - network-observe # - firewall-control # - process-control # - system-observe # - openvswitch neutron-dhcp-agent: command: snap-openstack neutron-dhcp-agent daemon: simple # plugs: # - network # - network-bind # - network-control # - network-observe # - process-control # - system-observe # - openvswitch neutron-metadata-agent: command: snap-openstack neutron-metadata-agent daemon: simple # plugs: # - network # - network-bind # - network-control neutron-ovs-cleanup: command: snap-openstack neutron-ovs-cleanup # plugs: # - network # - network-control # - openvswitch neutron-netns-cleanup: command: snap-openstack neutron-netns-cleanup # plugs: # - network # - network-control neutron-db-manage: command: snap-openstack neutron-db-manage # plugs: # - network # Glance glance-api: command: snap-openstack glance-api daemon: simple # plugs: # - network-bind registry: command: snap-openstack glance-registry daemon: simple # plugs: # - network # - network-bind glance-manage: command: snap-openstack glance-manage # plugs: # - network # Openstack Shared Services nginx: command: snap-openstack nginx daemon: forking # plugs: # - network-bind # Openvswitch ovs-vswitchd: command: ovs-wrapper $SNAP/share/openvswitch/scripts/ovs-ctl --no-ovsdb-server --no-monitor --system-id=random start stop-command: ovs-wrapper $SNAP/share/openvswitch/scripts/ovs-ctl --no-ovsdb-server stop passthrough: after: [ovsdb-server] daemon: forking # plugs: # - network # - network-bind # - network-control # - openvswitch-support # - process-control # - system-trace ovsdb-server: command: ovs-wrapper $SNAP/share/openvswitch/scripts/ovs-ctl --no-ovs-vswitchd --no-monitor --system-id=random start stop-command: ovs-wrapper $SNAP/share/openvswitch/scripts/ovs-ctl --no-ovs-vswitchd stop daemon: forking # plugs: # - network # - network-bind # - network-control # - openvswitch-support # - process-control # - system-trace ovs-vsctl: command: ovs-wrapper $SNAP/bin/ovs-vsctl # plugs: # - network ovs-appctl: command: ovs-wrapper $SNAP/bin/ovs-appctl # plugs: # - network ovs-ofctl: command: ovs-wrapper $SNAP/bin/ovs-ofctl # plugs: # - network ovs-dpctl: command: ovs-wrapper $SNAP/bin/ovs-dpctl # plugs: # - network external-bridge: command: bin/setup-br-ex daemon: oneshot passthrough: after: [ovs-vswitchd] # plugs: # - network # Libvirt/Qemu libvirtd: command: libvirtd daemon: simple environment: LD_LIBRARY_PATH: $SNAP/lib:$SNAP/lib/$SNAPCRAFT_ARCH_TRIPLET:$SNAP/usr/lib:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/pulseaudio virtlogd: command: virtlogd daemon: simple virsh: command: virsh # MySQL mysqld: command: mysql-start-server daemon: simple # plugs: # - process-control # - network # - network-bind mysql: command: mysql-start-client # plugs: # - process-control # - network # RabbitMQ rabbitmq-server: command: rabbitmq-server daemon: simple # plugs: # - network-bind environment: HOME: $SNAP_COMMON/lib/rabbitmq rabbitmqctl: command: rabbitmqctl # plugs: # - network environment: HOME: $SNAP_COMMON/lib/rabbitmq rabbitmq-plugins: command: rabbitmq-plugins environment: HOME: $SNAP_COMMON/lib/rabbitmq # Memcached memcached: command: memcached -u root -v daemon: simple # plugs: # - network-bind # Cinder cinder-uwsgi: command: snap-openstack cinder-uwsgi # daemon: simple # plugs: # - network-bind cinder-backup: command: snap-openstack cinder-backup # daemon: simple # plugs: # - network cinder-manage: command: snap-openstack cinder-manage # plugs: # - network cinder-scheduler: command: snap-openstack cinder-scheduler # daemon: simple # plugs: # - network cinder-volume: command: snap-openstack cinder-volume # daemon: simple # plugs: # - network # Horizon horizon-uwsgi: command: snap-openstack horizon-uwsgi daemon: simple # plugs: # - network-bind # Utility to launch a vm. Creates security groups, floating ips, # and other necessities as well. launch: command: bin/launch.sh # plugs: # - network parts: # OpenStack Python Projects, keyed off Keystone openstack-projects: plugin: python python-version: python2 constraints: - https://raw.githubusercontent.com/openstack/requirements/stable/rocky/upper-constraints.txt source: http://tarballs.openstack.org/keystone/keystone-stable-rocky.tar.gz python-packages: - libvirt-python - oslo.cache[dogpile] - pymysql - uwsgi - git+https://github.com/openstack/snap.openstack#egg=snap.openstack - http://tarballs.openstack.org/nova/nova-stable-rocky.tar.gz - http://tarballs.openstack.org/neutron/neutron-stable-rocky.tar.gz - http://tarballs.openstack.org/glance/glance-stable-rocky.tar.gz - http://tarballs.openstack.org/cinder/cinder-stable-rocky.tar.gz - http://tarballs.openstack.org/horizon/horizon-stable-rocky.tar.gz - python-cinderclient - python-openstackclient - python-swiftclient build-packages: - gcc - git - libffi-dev - libssl-dev - libvirt-dev - libxml2-dev - libxslt1-dev stage-packages: - conntrack - coreutils - haproxy - libpython2.7 override-prime: | snapcraftctl prime # Uncomment the below line for better python-libvirt debugging output. # patch --batch --forward --strip 1 --input ../project/patches/nova/nova_log_error.patch # Now that everything is built, let's disable user site-packages # as stated in PEP-0370 sed -i usr/lib/python2.7/site.py -e 's/^ENABLE_USER_SITE = None$/ENABLE_USER_SITE = False/' # This is the last step, let's now compile all our pyc files. # Ignore errors due to syntax issues in foobar python 2. ./usr/bin/python2.7 -m compileall . || true keystone-config: after: [openstack-projects] plugin: dump source: http://tarballs.openstack.org/keystone/keystone-stable-rocky.tar.gz organize: etc/*.conf: etc/keystone/ etc/*.ini: etc/keystone/ etc/*.json: etc/keystone/ etc/*.templates: etc/keystone/ filesets: etc: - etc/keystone/* stage: [$etc] prime: [$etc] nova-config: after: [openstack-projects] plugin: dump source: http://tarballs.openstack.org/nova/nova-stable-rocky.tar.gz filesets: etc: - etc/nova/* stage: [$etc] prime: [$etc] neutron-config: after: [openstack-projects] plugin: dump source: http://tarballs.openstack.org/neutron/neutron-stable-rocky.tar.gz organize: etc/*.conf: etc/neutron/ etc/*.ini: etc/neutron/ etc/*.json: etc/neutron/ etc/rootwrap.d/*: etc/neutron/rootwrap.d/ filesets: etc: - etc/neutron/* stage: [$etc] prime: [$etc] glance-config: after: [openstack-projects] plugin: dump source: http://tarballs.openstack.org/glance/glance-stable-rocky.tar.gz organize: etc/*.conf: etc/glance/ etc/*.ini: etc/glance/ etc/*.json: etc/glance/ filesets: etc: - etc/glance/* stage: [$etc] prime: [$etc] cinder-config: after: [openstack-projects] plugin: dump source: http://tarballs.openstack.org/cinder/cinder-stable-rocky.tar.gz organize: etc/*.conf: etc/cinder/ etc/*.ini: etc/cinder/ etc/*.json: etc/cinder/ etc/*.templates: etc/cinder/ filesets: etc: - etc/cinder/* stage: [$etc] prime: [$etc] horizon-config: after: [openstack-projects] plugin: dump source: http://tarballs.openstack.org/horizon/horizon-stable-rocky.tar.gz organize: etc/*.conf: etc/horizon/ filesets: etc: - etc/horizon/* stage: [$etc] prime: [$etc] # Snap patches patches: source: patches/ plugin: dump organize: '*' : patches/ prime: - -* openvswitch: # TODO: figure out a better way to fetch the version source: http://openvswitch.org/releases/openvswitch-2.10.2.tar.gz plugin: autotools build-packages: - libssl-dev - try: [libnuma-dev] - libcap-ng-dev - libpcap-dev - libunbound-dev - python-all - python-six - python-setuptools stage-packages: - uuid-runtime - libunbound2 configflags: - "--localstatedir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common" - "--sysconfdir=/var/snap/$SNAPCRAFT_PROJECT_NAME/etc" after: - patches override-build: | # Apply patches for patch in ${SNAPCRAFT_STAGE}/patches/openvswitch/*.patch; do echo "Applying $(basename "$patch") ..." patch \ --batch \ --forward \ --strip 1 \ --input "$patch" echo done snapcraftctl build ovs-wrapper: source: ./snap-wrappers/ovs plugin: dump after: - openvswitch organize: ovs-wrapper: bin/ovs-wrapper nginx: source: http://www.nginx.org/download/nginx-1.13.0.tar.gz plugin: autotools after: - patches configflags: - --prefix=/usr - "--http-log-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/log/nginx-access.log" - "--error-log-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/log/nginx-error.log" - "--lock-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/lock/nginx.lock" - "--pid-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/run/nginx.pid" - "--http-client-body-temp-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/lib/nginx_client_body" - "--http-proxy-temp-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/lib/nginx_proxy" - "--http-fastcgi-temp-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/lib/nginx_fastcgi" - "--http-uwsgi-temp-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/lib/nginx_uwsgi" - "--http-scgi-temp-path=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/lib/nginx_scgi" - --with-http_ssl_module build-packages: - libpcre3-dev - libssl-dev - python-six override-build: | # Apply patches for patch in ${SNAPCRAFT_STAGE}/patches/nginx/*.patch; do echo "Applying $(basename "$patch") ..." patch \ --batch \ --forward \ --strip 1 \ --input "$patch" echo done snapcraftctl build # libvirt/qemu qemu: source: . source-subdir: qemu-2.11+dfsg plugin: autotools after: - openstack-projects stage-packages: - seabios - ipxe-qemu - try: - libnuma1 - libspice-server1 - libasound2 - libasyncns0 - libbluetooth3 - libboost-iostreams1.62.0 - libboost-random1.62.0 - libboost-system1.62.0 - libboost-thread1.62.0 - libcaca0 - libfdt1 - libflac8 - libiscsi7 - libjpeg-turbo8 - libnspr4 - libnss3 - libogg0 - libopus0 - libpixman-1-0 - libpulse0 - librados2 - librbd1 - libsdl1.2debian - libsndfile1 - libusb-1.0-0 - libusbredirparser1 - libvorbis0a - libvorbisenc2 - libx11-6 - libxau6 - libxcb1 - libxdmcp6 - libxen-dev - libxext6 build-packages: - acpica-tools - libaio-dev - libasound2-dev - libattr1-dev - libbluetooth-dev - libcap-dev - libcap-ng-dev - libcurl4-gnutls-dev - libfdt-dev - gnutls-dev - libiscsi-dev - libncurses5-dev - try: [libnuma-dev] - libpixman-1-dev - libpulse-dev - librados-dev - librbd-dev - libsasl2-dev - libsdl1.2-dev - try: [libspice-server-dev, libspice-protocol-dev] - libusb-1.0-0-dev - libusbredirparser-dev - linux-libc-dev - uuid-dev - xfslibs-dev - libjpeg-dev - zlib1g-dev - libpng-dev - wget - dpkg-dev - gcc configflags: - --disable-blobs - --prefix=/snap/$SNAPCRAFT_PROJECT_NAME/current - --localstatedir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common - --sysconfdir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common - --extra-cflags=-DCONFIG_QEMU_DATAPATH='"/snap/$SNAPCRAFT_PROJECT_NAME/current/share/qemu:/snap/$SNAPCRAFT_PROJECT_NAME/current/usr/share/seabios:/snap/$SNAPCRAFT_PROJECT_NAME/current/usr/lib/ipxe/qemu"' - --disable-user - --disable-linux-user - --enable-system - --target-list=x86_64-softmmu override-build: | # Clean up old install rm -R qemu-2.* || true # Download sources and patch wget http://archive.ubuntu.com/ubuntu/pool/main/q/qemu/qemu_2.11+dfsg.orig.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/q/qemu/qemu_2.11+dfsg-1ubuntu7.14.debian.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/q/qemu/qemu_2.11+dfsg-1ubuntu7.14.dsc dpkg-source -x qemu_*.dsc snapcraftctl build organize: # Hack to shift installed qemu back to root of snap # required to ensure that pathing to files etc works at # runtime # * is not used to avoid directory merge conflicts snap/microstack/current/: ./ kvm-support: plugin: nil stage-packages: - try: [msr-tools] libvirt: source: . source-subdir: libvirt-4.0.0 after: [openstack-projects, qemu] plugin: autotools build-packages: - libxml2-dev - libxml-libxml-perl - libcurl4-gnutls-dev - libncurses5-dev - libreadline-dev - zlib1g-dev - libgcrypt20-dev - libgnutls28-dev - libyajl-dev - libpcap0.8-dev - libaudit-dev - libdevmapper-dev - libpciaccess-dev - libnl-3-dev - libnl-route-3-dev - libxml2-utils - uuid-dev - try: [libnuma-dev] - python-all - python-six - wget - dpkg-dev - xsltproc stage-packages: - dmidecode - dnsmasq - libxml2 - libyajl2 - try: [libnuma1] - libcurl3-gnutls - libpcap0.8 - libpciaccess0 configflags: - --with-qemu - --without-bhyve - --without-xen - --without-openvz - --without-vmware - --without-xenapi - --without-esx - --without-hyperv - --without-lxc - --without-vz - --without-vbox - --without-uml - --without-sasl - --without-storage-iscsi - --without-storage-sheepdog - --without-storage-rbd - --without-storage-lvm - --without-selinux - --prefix=/snap/$SNAPCRAFT_PROJECT_NAME/current - --localstatedir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common - --sysconfdir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common - DNSMASQ=/snap/$SNAPCRAFT_PROJECT_NAME/current/usr/sbin/dnsmasq - DMIDECODE=/snap/$SNAPCRAFT_PROJECT_NAME/current/usr/sbin/dmidecode - OVSVSCTL=/snap/$SNAPCRAFT_PROJECT_NAME/current/bin/ovs-vsctl - IPTABLES_PATH=/snap/$SNAPCRAFT_PROJECT_NAME/current/sbin/iptables - IP6TABLES_PATH=/snap/$SNAPCRAFT_PROJECT_NAME/current/sbin/ip6tables override-build: | # Clean up old install rm -R libvirt-4.0.* || true # Download sources and patch wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvirt/libvirt_4.0.0.orig.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvirt/libvirt_4.0.0-1ubuntu8.10.debian.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvirt/libvirt_4.0.0-1ubuntu8.10.dsc dpkg-source -x libvirt*.dsc snapcraftctl build organize: # Hack to shift installed libvirt back to root of snap # required to ensure that pathing to files etc works at # runtime # * is not used to avoid directory merge conflicts snap/microstack/current/: ./ # MySQL mysql-server: plugin: dump source: ./snap-wrappers/mysql stage-packages: - mysql-server - mysql-client organize: mysql-start-server: bin/mysql-start-server mysql-start-client: bin/mysql-start-client # RabbitMQ rabbitmq-server: source: ./snap-wrappers/rabbitmq plugin: dump stage-packages: - rabbitmq-server override-build: | rm -f $SNAPCRAFT_PART_INSTALL/usr/bin/erl rm -f $SNAPCRAFT_PART_INSTALL/usr/lib/rabbitmq/bin/rabbitmq-script-wrapper # NOTE(jamespage): The versioned path below is brittle. rm -f $SNAPCRAFT_PART_INSTALL/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.7/sbin/rabbitmq-defaults snapcraftctl build organize: rabbitmq-script-wrapper: usr/lib/rabbitmq/bin/rabbitmq-script-wrapper rabbitmq-defaults: usr/lib/rabbitmq/lib/rabbitmq_server-3.5.7/sbin/rabbitmq-defaults erl: usr/bin/erl # Memcached Token Caching memcached: plugin: nil stage-packages: - memcached # Cinder LVM backend lvm2: source: http://www.sourceware.org/pub/lvm2/releases/LVM2.2.02.172.tgz plugin: autotools configflags: - --with-confdir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/etc/ - --with-default-system-dir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common/etc/ build-attributes: [no-patchelf] # Networking tools iptables: source: http://iptables.netfilter.org/projects/iptables/files/iptables-1.6.0.tar.bz2 plugin: autotools build-packages: - libnftnl-dev stage-packages: - libatm1 # Additional utilties for hypervisor networking - iproute2 - bridge-utils - ipset configflags: - --disable-nftables - --prefix=/snap/$SNAPCRAFT_PROJECT_NAME/current override-build: | snapcraftctl build cp --remove-destination $SNAPCRAFT_PART_INSTALL/snap/$SNAPCRAFT_PROJECT_NAME/current/sbin/xtables-multi \ $SNAPCRAFT_PART_INSTALL/snap/$SNAPCRAFT_PROJECT_NAME/current/bin/iptables-xml organize: # Hack to shift installed iptables back to root of snap # required to ensure that pathing to files etc works at # runtime # * is not used to avoid directory merge conflicts snap/microstack/current/: ./ # Templates and other files to be overlaid over the snap. overlay: plugin: dump source: snap-overlay