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. TODO drop in basic usage instructions here. grade: devel confinement: classic environment: LD_LIBRARY_PATH: $SNAP/lib:$SNAP/usr/lib:$SNAP/usr/lib/x86_64-linux-gnu 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 configure-the-things: command: bin/configure-the-things.sh plugs: - network - process-control # 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 libvirt-bin: command: bin/launch-libvirtd daemon: simple virsh: command: bin/virsh environment: PATH: $SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH LC_ALL: C # MySQL # 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 - qemu-utils - haproxy 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] # Openvswitch ovs-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 - libnuma-dev - libcap-ng-dev - libpcap-dev - libunbound-dev - python-all - python-six - python-setuptools stage-packages: - uuid-runtime configflags: - "--localstatedir=/var/snap/$SNAPCRAFT_PROJECT_NAME/common" - "--sysconfdir=/var/snap/$SNAPCRAFT_PROJECT_NAME/etc" after: - ovs-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: conf plugin: dump after: - openvswitch nginx: source: http://www.nginx.org/download/nginx-1.13.0.tar.gz plugin: autotools configflags: - --prefix=/usr - --http-log-path=/var/snap/microstack/common/log/nginx-access.log - --error-log-path=/var/snap/microstack/common/log/nginx-error.log - --lock-path=/var/snap/microstack/common/lock/nginx.lock - --pid-path=/var/snap/microstack/common/run/nginx.pid - --http-client-body-temp-path=/var/snap/microstack/common/lib/nginx_client_body - --http-proxy-temp-path=/var/snap/microstack/common/lib/nginx_proxy - --http-fastcgi-temp-path=/var/snap/microstack/common/lib/nginx_fastcgi - --http-uwsgi-temp-path=/var/snap/microstack/common/lib/nginx_uwsgi - --http-scgi-temp-path=/var/snap/microstack/common/lib/nginx_scgi - --with-http_ssl_module build-packages: - libpcre3-dev - libssl-dev - python-six override-build: | export SNAP_ROOT="../../.." export SNAP_SOURCE="$SNAP_ROOT/parts/nginx/build" patch -d $SNAP_SOURCE -p1 < $SNAP_ROOT/patches/drop-nginx-setgroups.patch snapcraftctl build libxml2: source: http://xmlsoft.org/sources/libxml2-2.9.4.tar.gz plugin: autotools # libvirt/qemu qemu: plugin: nil stage-packages: - on amd64: [qemu-system-x86] - on i386: [qemu-system-x86] - on armhf: [qemu-system-arm] - on arm64: [qemu-system-arm] - qemu-utils - libslang2 organize: usr/lib/*/pulseaudio/libpulsecommon-8.0.so: usr/lib/libpulsecommon-8.0.so usr/share/seabios/bios-256k.bin: qemu/bios-256k.bin usr/share/seabios/vgabios-stdvga.bin: qemu/vgabios-stdvga.bin usr/share/seabios/kvmvapic.bin: qemu/kvmvapic.bin usr/lib/ipxe/qemu/efi-virtio.rom: qemu/efi-virtio.rom 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: - dmidecode - dnsmasq - 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 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: ./scripts/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: ./scripts/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 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/common/etc/ - --with-default-system-dir=/var/snap/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 templates: after: - keystone-config - nova-config - neutron-config - glance-config - cinder-config - horizon-config - openvswitch - qemu - kvm-support - libvirt - mysql-server - rabbitmq-server - memcached plugin: dump source: snap configure-the-things: plugin: dump source: src/experiments