name: microstack version: rocky summary: OpenStack on your laptop. description: | Microstack gives you an easy way to develop and test OpenStack workloads on your laptop. grade: devel 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://localhost: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 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 # 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 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 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 - libffi-dev - libssl-dev - libxml2-dev - libxslt1-dev - libvirt-dev stage-packages: - conntrack - coreutils - haproxy override-build: | # Ensure libvirt is discovered from previous built part export PKG_CONFIG_PATH=$SNAPCRAFT_STAGE/lib/pkgconfig snapcraftctl build override-prime: | snapcraftctl prime # 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.1.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 libxml2: source: http://xmlsoft.org/sources/libxml2-2.9.4.tar.gz plugin: autotools # libvirt/qemu qemu: source: . source-subdir: qemu-2.5+dfsg plugin: autotools stage-packages: - seabios - ipxe-qemu - try: - libnuma1 - libasound2 - libasyncns0 - libbluetooth3 - libboost-iostreams1.58.0 - libboost-random1.58.0 - libboost-system1.58.0 - libboost-thread1.58.0 - libcaca0 - libfdt1 - libflac8 - libiscsi2 - libjpeg-turbo8 - libnspr4 - libnss3 - libogg0 - libopus0 - libpixman-1-0 - libpulse0 - librados2 - librbd1 - libsdl1.2debian - libsndfile1 - libspice-server1 - libusb-1.0-0 - libusbredirparser1 - libvorbis0a - libvorbisenc2 - libx11-6 - libxau6 - libxcb1 - libxdmcp6 - 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: | wget http://archive.ubuntu.com/ubuntu/pool/main/q/qemu/qemu_2.5+dfsg.orig.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/q/qemu/qemu_2.5+dfsg-5ubuntu10.32.debian.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/q/qemu/qemu_2.5+dfsg-5ubuntu10.32.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-1.3.1 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 - uuid-dev - try: [libnuma-dev] - wget - dpkg-dev stage-packages: - try: [dmidecode] - dnsmasq - dnsmasq-utils - ebtables - libxml2 - libyajl2 - try: [libnuma1] - libcurl3-gnutls - 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 - EBTABLES_PATH=/snap/$SNAPCRAFT_PROJECT_NAME/current/sbin/ebtables override-build: | wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvirt/libvirt_1.3.1.orig.tar.gz wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvirt/libvirt_1.3.1-1ubuntu10.24.debian.tar.xz wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvirt/libvirt_1.3.1-1ubuntu10.24.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: autotools source: https://memcached.org/files/memcached-1.5.10.tar.gz build-packages: - libevent-dev - gcc - make stage-packages: - libevent-2.0-5 override-build: | ./configure --prefix=$SNAPCRAFT_PART_INSTALL make make install # 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] # Misc utils for hypervisor networking bridge-utils: source: https://www.kernel.org/pub/linux/utils/net/bridge-utils/bridge-utils-1.6.tar.gz plugin: autotools iproute2: source: https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.9.0.tar.gz plugin: autotools build-packages: - bison - flex - libdb5.3-dev iptables: source: http://iptables.netfilter.org/projects/iptables/files/iptables-1.6.0.tar.bz2 plugin: autotools build-packages: - libnftnl-dev configflags: - --disable-nftables install: | cp --remove-destination $SNAPCRAFT_PART_INSTALL/sbin/xtables-multi $SNAPCRAFT_PART_INSTALL/bin/iptables-xml ipset: source: http://ipset.netfilter.org/ipset-6.30.tar.bz2 plugin: autotools build-packages: - libltdl-dev - libmnl-dev configflags: - "--with-kmod=no" # Openstack Shared Parts overlay: plugin: dump source: snap-overlay configure-the-things: plugin: dump source: src/experiments