Refactor and simplify image build

This merges all of the images roles that are used
for building the undercloud.qcow2 into a single
images/build role. This role is then subdivided via
seperate tasks files for each stage of the build.

This (hopefully) makes the structure more clear and
understandable for others to use this image building
process on other base images.

This also allows consolidating all of the default
variables into a single role.

Another major simplification included in this patch is
to no longer rely on python-tripleoclient for image
building. Building images using python-tripleoclient adds
a totally unneeded and overcomplicated abstraction of
diskimage-builder. Instead, we just run diskimage-builder
directly. This will also make it easier to transition to
not using diskimage-builder at all, but instead using
virt-builder.

As part of that transition, I audited all of the elements
which python-tripleoclient included. Many were removed
all together since they only installed packages, and we
are installing packages in a pre-build step. There were
a few elements that had a single line of bash, and those
lines of bash are run using the dib-workaround-default
template in a pre-build step instead. This is just a
first step to make these more visible. All of these should
either be fixed in packaging or dropped.

We also stop building the bash deploy ramdisk in this
patch. It was flaky at best, and nearly impossible to
troubleshoot. The drawback with this, is needing some
hack to make the ironic-python-agent ramdisk work on
liberty. There are two choices:
1. install tgt from EPEL
2. install ironic-python-agent from mitaka delorean
   (this gets us LIO support)

I really don't like 1 because LIO > tgt, but also because
nobody is testing the tgt code path on RHEL based distros.
Further, the stable branch is not gated anywhere in Ironic.

Change-Id: Iefb1589decb9f0e62416409bb912b0a752dfe851
This commit is contained in:
John Trowbridge
2016-02-16 09:59:07 -05:00
parent d38fca9f3a
commit 4e030b0afb
33 changed files with 447 additions and 419 deletions

View File

@@ -1,6 +1,7 @@
default_disk: 50
undercloud_memory: 16384
undercloud_vcpu: 4
control_memory: 8192
compute_memory: 8192

View File

@@ -1,12 +0,0 @@
working_dir: /home/stack
ansible_user: stack
base_image_url: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
base_working_image: minimal-base.qcow2
base_working_image_dest: "{{ working_dir }}/{{ base_working_image }}"
base_overwrite_existing: no
base_run_script: base-run
base_virt_customize_command: "virt-customize -m 16042 --smp 4 -a {{ base_working_image_dest }} --run {{ working_dir }}/{{ base_run_script }}"
repo_type: repos/centos7-mitaka-delorean
delorean_hash: current-passed-ci

View File

@@ -1,15 +0,0 @@
- name: "get base image for {{ base_working_image_dest }}"
get_url:
url: '{{ base_image_url }}'
dest: '{{ base_working_image_dest }}'
force: '{{ base_overwrite_existing }}'
- name: "Create virt-customize run script ({{ base_run_script }})"
template:
src: "{{ base_run_script }}"
dest: "{{ working_dir }}"
- name: Run the virt-customize run script
shell: "{{ base_virt_customize_command }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -1,8 +0,0 @@
#!/bin/bash
# Minimal base script for virt-customize --run
set -eux
{% include repo_type %}
yum update -y

View File

@@ -1 +0,0 @@
yum install -y http://www.rdoproject.org/repos/openstack-liberty/rdo-release-liberty.rpm || true

View File

@@ -1,9 +1,47 @@
build_script: build-images
working_dir: /home/stack
images:
- base: minimal-base.qcow2
type: agent-ramdisk
- base: minimal-base.qcow2
type: deploy-ramdisk
- base: overcloud-base.qcow2
type: overcloud-full
---
# global build vars
working_dir: /tmp/oooq-images
# repo_setup vars
minimal_base_image_url: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
minimal_overwrite_existing: no
base_os: centos7
release: mitaka
build_system: delorean
repo_script: "repo-{{ base_os }}-{{ release }}-{{ build_system }}"
# package_install vars
overcloud_base_image_url: "file:///{{ working_dir }}/minimal-base.qcow2"
overcloud_overwrite_existing: no
package_install_script: package-install-default
overcloud_package_list: default_package_list.yml
# convert_undercloud vars
undercloud_base_image_url: "file:///{{ working_dir }}/overcloud-base.qcow2"
undercloud_overwrite_existing: no
undercloud_convert_script: undercloud-convert-default
undercloud_disk_size: 40
virt_customize_ram: 28000
virt_customize_cpu: 4
undercloud_remove_packages:
- cloud-init
- mariadb-galera-server
- python-manila
undercloud_install_packages:
- mariadb-server
- openstack-tempest
undercloud_selinux_permissive: true
# dib_build vars
remove_epel: true
dib_workarounds: true
dib_workaround_script: dib-workaround-default
dib_elements_path: /usr/share/tripleo-image-elements:/usr/share/tripleo-puppet-elements:/usr/share/instack-undercloud/:/usr/share/openstack-heat-templates/software-config/elements/
# undercloud_inject vars
overcloud_images:
- ironic-python-agent.initramfs
- ironic-python-agent.kernel
- overcloud-full.initrd
- overcloud-full.qcow2
- overcloud-full.vmlinuz

View File

@@ -0,0 +1,49 @@
---
- name: Get the undercloud base image
get_url:
url: '{{ undercloud_base_image_url }}'
dest: '{{ working_dir }}/undercloud-base.qcow2'
force: '{{ undercloud_overwrite_existing }}'
- name: Define volume_pool if needed
virt_pool:
command: status
name: default
register: volume_pool_status
ignore_errors: true
- name: Create volume_pool if needed
virt_pool:
command: define
name: default
xml: '{{ lookup("template", "volume_pool.xml.j2") }}'
when: volume_pool_status.failed is defined
- name: Create volume_pool if it does not exists
virt_pool:
command: create
name: default
when: volume_pool_status.failed is defined
- name: Expand undercloud.qcow2 filesystem
shell: |
virsh vol-create-as default undercloud-base.qcow2 \
{{ undercloud_disk_size }}G --format qcow2
virt-resize --expand /dev/sda1 \
{{ working_dir }}/undercloud-base.qcow2 \
/var/lib/libvirt/images/undercloud-base.qcow2
cp -f /var/lib/libvirt/images/undercloud-base.qcow2 \
{{ working_dir }}/undercloud-base.qcow2
environment:
LIBGUESTFS_BACKEND: direct
- name: Template script to convert overcloud image to undercloud
template:
src: "{{ undercloud_convert_script }}"
dest: "{{ working_dir }}"
- name: Convert the overcloud image to an undercloud image
shell:
"virt-customize -m {{ virt_customize_ram }} --smp {{ virt_customize_cpu }} -a {{ working_dir }}/undercloud-base.qcow2 --run {{ working_dir }}/{{ undercloud_convert_script }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -0,0 +1,85 @@
---
# workarounds to not include a bunch of DIB elements with a single line of bash
- name: Template script with workarounds for overcloud-full image
template:
src: "{{ dib_workaround_script }}"
dest: "{{ working_dir }}"
- name: DIB workarounds
shell:
"virt-customize -m {{ virt_customize_ram }} --smp {{ virt_customize_cpu }} -a {{ working_dir }}/overcloud-base.qcow2 --run {{ working_dir }}/{{ dib_workaround_script }}"
environment:
LIBGUESTFS_BACKEND: direct
when: dib_workarounds
# install packages for image building
- name: ensure DIB and element deps are installed
package:
name: "{{ item }}"
state: present
with_items:
#FIXME(trown) we need a newer diskimage-builder package than what is in the
#RDO release repo, in the meantime install it from delorean.
- http://trunk.rdoproject.org/centos7-liberty/ce/30/ce30250c9e9858aeddb0f65583ceaa8a49fe62b4_a2b13371/diskimage-builder-1.11.1-0.20160217012327.352e58c.el7.centos.noarch.rpm
- instack-undercloud
- openstack-heat-templates
- openstack-tripleo-image-elements
- openstack-tripleo-puppet-elements
#FIXME(trown) one of the above packages should have a requires
#on python-six
- python-six
# workaround to remove EPEL from images
- name: Remove EPEL from centos DIB element
shell: |
sed -i '/epel/d' \
/usr/share/diskimage-builder/elements/centos7/element-deps;
rm -f /usr/share/diskimage-builder/elements/base/install.d/99-dkms
when: remove_epel
- name: Build overcloud-full image
shell: |
disk-image-create \
-a amd64 \
-o {{ working_dir }}/overcloud-full.qcow2 \
centos7 \
baremetal \
dhcp-all-interfaces \
stable-interface-names \
grub2 \
dynamic-login \
selinux-permissive \
element-manifest \
heat-config-puppet \
heat-config-script \
hosts \
network-gateway \
os-net-config \
sysctl \
hiera \
pip-and-virtualenv-override \
--min-tmpfs 5 2>&1 | tee {{ working_dir }}/dib-overcloud-full.log
environment:
DIB_LOCAL_IMAGE: "{{ working_dir }}/overcloud-base.qcow2"
DIB_DEFAULT_INSTALLTYPE: package
ELEMENTS_PATH: "{{ dib_elements_path }}"
# Needed for corosync to be able to use hostnames
# https://bugs.launchpad.net/tripleo/+bug/1447497
DIB_CLOUD_INIT_ETC_HOSTS: ''
- name: Build the ironic-python-agent ramdisk
shell: |
disk-image-create \
-a amd64 \
-o {{ working_dir }}/ironic-python-agent \
centos7 \
dhcp-all-interfaces \
dynamic-login \
selinux-permissive \
pip-and-virtualenv-override \
ironic-agent \
--min-tmpfs 5 2>&1 | tee {{ working_dir }}/dib-agent-ramdisk.log
environment:
DIB_LOCAL_IMAGE: "{{ working_dir }}/minimal-base.qcow2"
DIB_DEFAULT_INSTALLTYPE: package
ELEMENTS_PATH: "{{ dib_elements_path }}"

View File

@@ -1,14 +1,20 @@
# python-tripleoclient/DIB misbehave when run as root, so run
# as stack user instead.
- name: Create image build script
template:
src: "{{ build_script }}"
dest: "{{ working_dir }}"
mode: 0744
become: true
become_user: stack
- name: Create the working directory if it doesn't exist
file:
path: "{{ working_dir }}"
state: directory
mode: 0755
- name: Run the image build script
shell: "{{ working_dir }}/{{ build_script }}"
become: true
become_user: stack
# Get the base image and setup repos
- include: repo_setup.yml
# Install packages for overcloud base image
- include: package_install.yml
# Use overcloud base image to create undercloud base image
- include: convert_undercloud.yml
# Use DIB to build the overlcloud-full and IPA images
- include: dib_build.yml
# Inject overcloud-full and IPA images into the undercloud image
- include: undercloud_inject.yml

View File

@@ -0,0 +1,19 @@
---
- name: Get the overcloud base image
get_url:
url: '{{ overcloud_base_image_url }}'
dest: '{{ working_dir }}/overcloud-base.qcow2'
force: '{{ overcloud_overwrite_existing }}'
- include_vars: "{{ overcloud_package_list }}"
- name: Template script to install packages in the overcloud image
template:
src: "{{ package_install_script }}"
dest: "{{ working_dir }}"
- name: Install the packages in the overcloud image using virt-customize
shell:
"virt-customize -m {{ virt_customize_ram }} --smp {{ virt_customize_cpu }} -a {{ working_dir }}/overcloud-base.qcow2 --run {{ working_dir }}/{{ package_install_script }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -0,0 +1,17 @@
---
- name: Get the minimal base image
get_url:
url: '{{ minimal_base_image_url }}'
dest: '{{ working_dir }}/minimal-base.qcow2'
force: '{{ minimal_overwrite_existing }}'
- name: Template script to setup repos in the base image
template:
src: "{{ repo_script }}"
dest: "{{ working_dir }}"
- name: Setup repos in the base image using virt-customize
shell:
"virt-customize -m {{ virt_customize_ram }} --smp {{ virt_customize_cpu }} -a {{ working_dir }}/minimal-base.qcow2 --run {{ working_dir }}/{{ repo_script }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -0,0 +1,14 @@
---
- name: Inject overcloud images into undercloud image
shell:
"virt-customize -m {{ virt_customize_ram }} --smp {{ virt_customize_cpu }} -a {{ working_dir }}/undercloud-base.qcow2 --upload {{ working_dir }}/{{ item }}:/home/stack"
environment:
LIBGUESTFS_BACKEND: direct
with_items: "{{ overcloud_images }}"
- name: Compress undercloud image
shell: |
virt-sparsify --tmp {{ working_dir }} --check-tmpdir fail --compress {{ working_dir }}/undercloud-base.qcow2 {{ working_dir }}/undercloud.qcow2;
md5sum {{ working_dir }}/undercloud.qcow2 > {{ working_dir }}/undercloud.qcow2.md5
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -1,19 +0,0 @@
#!/bin/bash
# Sets up the image building environment
set -eux
pushd {{ working_dir }}
# WORKAROUND(trown) set correct permissions on /etc/sudoers.d/sahara-rootwrap
# so that overcloud-full building does not fail
sudo LIBGUESTFS_BACKEND=direct virt-customize -m 16042 --smp 4 -a {{ working_dir }}/overcloud-base.qcow2 \
--run-command "chmod 0440 /etc/sudoers.d/sahara-rootwrap"
# This keeps us from getting the buggy rdo-release repo element
export RHOS=1
{% for image in images %}
DIB_LOCAL_IMAGE={{ image.base }} openstack overcloud image build --type {{ image.type }}
{% endfor %}
popd

View File

@@ -0,0 +1,21 @@
# This should get fixed in sahara packaging
chmod 0440 /etc/sudoers.d/sahara-rootwrap
# overcloud-full
# instack-undercloud/elements/overcloud-full
## post-install.d/50-remove-libvirt-default-net
rm -f /etc/libvirt/qemu/networks/autostart/default.xml
## install.d/50-persistent-journal
### Enable persistent logging for the systemd journal
mkdir -p /var/log/journal
# os-collect-config
# tripleo-image-elements/elements/os-collect-config/
## seems like this should just be fixed in os-collect-config packaging though
systemctl enable os-collect-config.service
# puppet-modules
# tripleo-puppet-elements/elements/puppet-modules
## This is only needed if using puppet-modules from source,
## and there is probably a better way to do that.
ln -f -s /usr/share/openstack-puppet/modules/* /etc/puppet/modules/

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Overcloud script for virt-customize --run
# virt-customize script to install packages in the overcloud base image
set -eux

View File

@@ -1,8 +1,9 @@
curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7-liberty/{{ delorean_hash }}/delorean.repo
#!/bin/bash
# Repo script to install centos7 liberty cbs
curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo
set -eux
yum install -y yum-plugin-priorities
yum install -y http://www.rdoproject.org/repos/openstack-liberty/rdo-release-liberty.rpm || true
# We need EPEL for the ceph packages currently, so make EPEL
# available only for those packages.
@@ -15,3 +16,5 @@ enabled=1
gpgcheck=0
includepkgs=ceph,leveldb,libcephfs1,python-cephfs
EOF
yum update -y

View File

@@ -0,0 +1,31 @@
#!/bin/bash
# Repo script to setup centos7 liberty delorean
set -eux
curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7-liberty/{{ delorean_hash | default('current-passed-ci')}}/delorean.repo
curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo
yum install -y yum-plugin-priorities
# We need EPEL for the ceph packages currently, so make EPEL
# available only for those packages.
cat <<-EOF>>/etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages from EPEL
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=x86_64
failovermethod=priority
enabled=1
gpgcheck=0
includepkgs=ceph,leveldb,libcephfs1,python-cephfs
EOF
# (trown) Install ironic-python-agent from mitaka delorean for LIO support.
# We either need to do that or include tgt from EPEL, and upstream
# ironic-python-agent project does not actually even gate the stable branch.
# I am working on getting them to remove the stable branch, which will give us
# LIO support in liberty delorean.
yum install -y http://trunk.rdoproject.org/centos7/55/17/5517b8e9aea3ded1052209384b4194d2caa97541_673a78a2/openstack-ironic-python-agent-1.1.1-dev6.el7.centos.noarch.rpm http://trunk.rdoproject.org/centos7/55/17/5517b8e9aea3ded1052209384b4194d2caa97541_673a78a2/python2-ironic-python-agent-1.1.1-dev6.el7.centos.noarch.rpm
yum update -y

View File

@@ -1,4 +1,9 @@
curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7/{{ delorean_hash }}/delorean.repo
#!/bin/bash
# Repo script to setup centos7 mitaka delorean
set -eux
curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7/{{ delorean_hash | default('current-passed-ci')}}/delorean.repo
curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7/delorean-deps.repo
@@ -15,3 +20,6 @@ enabled=1
gpgcheck=0
includepkgs=ceph,leveldb,libcephfs1,python-cephfs
EOF
yum update -y

View File

@@ -0,0 +1,27 @@
#!/bin/bash
# Script to convert overcloud image to an undercloud image
set -eux
xfs_growfs -d /dev/sda1
yum remove -y {% for package in undercloud_remove_packages %} {{ package }} {% endfor %}
yum install -y {% for package in undercloud_install_packages %} {{ package }} {% endfor %}
useradd stack
echo "stack ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stack
mkdir /home/stack/.ssh
echo "127.0.0.1 localhost undercloud" > /etc/hosts
echo "HOSTNAME=undercloud" >> /etc/sysconfig/network
echo "undercloud" > /etc/hostname
cp /usr/share/instack-undercloud/undercloud.conf.sample /home/stack/undercloud.conf
chown -R stack:stack /home/stack/
{% if undercloud_selinux_permissive %}
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
{% endif %}

View File

@@ -0,0 +1,100 @@
overcloud_packages:
- automake
- boost-filesystem
- boost-program-options
- ceph
- corosync
- docker-registry
- fence-agents-all
- gcc-c++
- git
- haproxy
- httpd
- iptables-services
- ipxe-bootimgs
- iscsi-initiator-utils
- keepalived
- kernel-devel
- libguestfs-tools
- libvirt
- libwsman1
- libxslt-devel
- mariadb
- mariadb-devel
- mariadb-galera-server
- memcached
- mongodb
- mongodb-server
- ntp
- openstack-ceilometer-alarm
- openstack-ceilometer-api
- openstack-ceilometer-central
- openstack-ceilometer-collector
- openstack-ceilometer-compute
- openstack-ceilometer-notification
- openstack-ceilometer-polling
- openstack-cinder
- openstack-dashboard
- openstack-glance
- openstack-heat-api
- openstack-heat-api-cfn
- openstack-heat-api-cloudwatch
- openstack-heat-engine
- openstack-ironic-api
- openstack-ironic-conductor
- openstack-ironic-inspector
- openstack-keystone
- openstack-manila
- openstack-manila-share
- openstack-neutron
- openstack-neutron-lbaas
- openstack-neutron-metering-agent
- openstack-neutron-ml2
- openstack-neutron-openvswitch
- openstack-nova-api
- openstack-nova-cert
- openstack-nova-compute
- openstack-nova-conductor
- openstack-nova-console
- openstack-nova-novncproxy
- openstack-nova-scheduler
- openstack-puppet-modules
- openstack-sahara
- openstack-selinux
- openstack-swift-account
- openstack-swift-object
- openstack-swift-proxy
- openstack-tempest
- openvswitch
- openwsman-python
- os-apply-config
- os-cloud-config
- os-collect-config
- os-refresh-config
- os-net-config
- pacemaker
- pacemaker-remote
- pcs
- pystache
- python-gnocchiclient
- python-libguestfs
- python-openvswitch
- python-pip
- python-pbr
- python-tripleoclient
- python-troveclient
- python-virtualenv
- python-zaqarclient
- puppet
- rabbitmq-server
- redis
- screen
- syslinux
- targetcli
- tcpdump
- tftp
- tftp-server
- traceroute
- vim
- wget
- xinetd

View File

@@ -1,3 +0,0 @@
env_setup_script: build-env-setup
working_dir: /root
ansible_user: root

View File

@@ -1,25 +0,0 @@
- name: Create env-setup script
template:
src: "{{ env_setup_script }}"
dest: "{{ working_dir }}"
mode: 0744
- name: create libvirtd group
group:
name: libvirtd
state: present
- name: Run the env-setup script
shell: "{{ working_dir }}/{{ env_setup_script }}"
- name: start libvirtd
service:
name: libvirtd
state: running
- name: ensure correct permissions on /dev/kvm
file:
path: /dev/kvm
owner: root
group: kvm
mode: 0664

View File

@@ -1,33 +0,0 @@
#!/bin/bash
# Sets up the image building environment
set -eux
yum install -y http://www.rdoproject.org/repos/openstack-liberty/rdo-release-liberty.rpm || true
yum install -y python-tripleoclient
yum install -y libguestfs-tools
yum install -y qemu-kvm libvirt libvirt-python python-lxml
useradd stack
echo "stack ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stack
usermod -aG libvirtd -G kvm stack
mkdir /home/stack/.ssh
cp /root/.ssh/authorized_keys /home/stack/.ssh
chown -R stack:stack /home/stack/.ssh
## workarounds
### install python-passlib (Should be a req for tripleoclient)
yum install -y python-passlib
### remove EPEL element from image building
sed -i '/epel/d' /usr/share/diskimage-builder/elements/centos7/element-deps
### remove outdated CentOS cloud repo element
sed -i '/centos-cloud-repo/d' /usr/lib/python2.7/site-packages/tripleoclient/v1/overcloud_image.py
### remove dkms install from base element
rm -f /usr/share/diskimage-builder/elements/base/install.d/99-dkms

View File

@@ -1,109 +0,0 @@
working_dir: /home/stack
ansible_user: stack
overcloud_image_url: "file:///{{ working_dir }}/minimal-base.qcow2"
overcloud_working_image: overcloud-base.qcow2
overcloud_working_image_dest: "{{ working_dir }}/{{ overcloud_working_image }}"
overcloud_overwrite_existing: no
overcloud_run_script: overcloud-run
overcloud_virt_customize_command: "virt-customize -m 16042 --smp 4 -a {{ overcloud_working_image_dest }} --run {{ working_dir }}/{{ overcloud_run_script }}"
overcloud_packages:
- automake
- boost-filesystem
- boost-program-options
- ceph
- corosync
- docker-registry
- fence-agents-all
- gcc-c++
- git
- haproxy
- httpd
- iptables-services
- ipxe-bootimgs
- iscsi-initiator-utils
- keepalived
- kernel-devel
- libguestfs-tools
- libvirt
- libwsman1
- libxslt-devel
- mariadb
- mariadb-devel
- mariadb-galera-server
- memcached
- mongodb
- mongodb-server
- ntp
- openstack-ceilometer-alarm
- openstack-ceilometer-api
- openstack-ceilometer-central
- openstack-ceilometer-collector
- openstack-ceilometer-compute
- openstack-ceilometer-notification
- openstack-ceilometer-polling
- openstack-cinder
- openstack-dashboard
- openstack-glance
- openstack-heat-api
- openstack-heat-api-cfn
- openstack-heat-api-cloudwatch
- openstack-heat-engine
- openstack-ironic-api
- openstack-ironic-conductor
- openstack-ironic-inspector
- openstack-keystone
- openstack-manila
- openstack-manila-share
- openstack-neutron
- openstack-neutron-lbaas
- openstack-neutron-metering-agent
- openstack-neutron-ml2
- openstack-neutron-openvswitch
- openstack-nova-api
- openstack-nova-cert
- openstack-nova-compute
- openstack-nova-conductor
- openstack-nova-console
- openstack-nova-novncproxy
- openstack-nova-scheduler
- openstack-puppet-modules
- openstack-sahara
- openstack-selinux
- openstack-swift-account
- openstack-swift-object
- openstack-swift-proxy
- openstack-tempest
- openvswitch
- openwsman-python
- os-apply-config
- os-cloud-config
- os-collect-config
- os-refresh-config
- os-net-config
- pacemaker
- pacemaker-remote
- pcs
- pystache
- python-gnocchiclient
- python-libguestfs
- python-openvswitch
- python-pip
- python-pbr
- python-tripleoclient
- python-troveclient
- python-virtualenv
- python-zaqarclient
- puppet
- rabbitmq-server
- redis
- screen
- syslinux
- targetcli
- tcpdump
- tftp
- tftp-server
- traceroute
- vim
- wget
- xinetd

View File

@@ -1,15 +0,0 @@
- name: "get base image for {{ overcloud_working_image_dest }}"
get_url:
url: '{{ overcloud_image_url }}'
dest: '{{ overcloud_working_image_dest }}'
force: '{{ overcloud_overwrite_existing }}'
- name: "Create virt-customize run script ({{ overcloud_run_script }})"
template:
src: "{{ overcloud_run_script }}"
dest: "{{ working_dir }}"
- name: Run the virt-customize run script
shell: "{{ overcloud_virt_customize_command }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -1,16 +0,0 @@
packaging_script: package-images
working_dir: /home/stack
undercloud_base: undercloud-base.qcow2
virt_customize_base_command: "virt-customize -m 16042 --smp 4 -a {{ working_dir }}/{{ undercloud_base }} --upload"
image_types:
- ironic-python-agent
- deploy-ramdisk-ironic
- overcloud-full
overcloud_images:
- deploy-ramdisk-ironic.initramfs
- deploy-ramdisk-ironic.kernel
- ironic-python-agent.initramfs
- ironic-python-agent.kernel
- overcloud-full.initrd
- overcloud-full.qcow2
- overcloud-full.vmlinuz

View File

@@ -1,10 +0,0 @@
- name: Create packaging script
template:
src: "{{ packaging_script }}"
dest: "{{ working_dir }}"
mode: 0744
- name: Run the packaging script
shell: "{{ working_dir }}/{{ packaging_script }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -1,31 +0,0 @@
#!/bin/bash
# Package images for uploading
set -eux
pushd {{ working_dir }}
## Inject Overcloud Images into Undercloud Image
{% for image in overcloud_images %}
md5sum {{ image }} > {{ image }}.md5
{{ virt_customize_base_command }} {{ image }}:/home/stack
{{ virt_customize_base_command }} {{ image }}.md5:/home/stack
{% endfor %}
## Tar overcloud images
{% for image_type in image_types %}
rm -rf {{ image_type }}.d
tar -cf {{ image_type }}.tar {{ image_type }}.*
md5sum {{ image_type }}.tar > {{ image_type }}.tar.md5
{% endfor %}
## Compress undercloud image
virt-sparsify --compress {{ working_dir }}/{{ undercloud_base }} undercloud.qcow2
## Create md5 for all images
md5sum undercloud.qcow2 > undercloud.qcow2.md5
md5sum minimal-base.qcow2 > minimal-base.qcow2.md5
md5sum overcloud-base.qcow2 > overcloud-base.qcow2.md5
popd

View File

@@ -1,8 +0,0 @@
working_dir: /home/stack
ansible_user: stack
undercloud_image_url: "file:///{{ working_dir }}/overcloud-base.qcow2"
undercloud_working_image: undercloud-base.qcow2
undercloud_working_image_dest: "{{ working_dir }}/{{ undercloud_working_image }}"
undercloud_overwrite_existing: no
undercloud_run_script: undercloud-run
undercloud_virt_customize_command: "virt-customize -m 16042 --smp 4 -a {{ undercloud_working_image_dest }} --run {{ working_dir }}/{{ undercloud_run_script }}"

View File

@@ -1,50 +0,0 @@
- name: "get base image for {{ undercloud_working_image_dest }}"
get_url:
url: '{{ undercloud_image_url }}'
dest: '{{ undercloud_working_image_dest }}'
force: '{{ undercloud_overwrite_existing }}'
- name: Check if volume_pool exists
virt_pool:
command: status
name: default
register: volume_pool_status
ignore_errors: true
become: true
- name: Create volume_pool if it does not exists
virt_pool:
command: define
name: default
xml: '{{ lookup("template", "volume_pool.xml.j2") }}'
when: volume_pool_status.failed is defined
become: true
- name: Create volume_pool if it does not exists
virt_pool:
command: create
name: default
when: volume_pool_status.failed is defined
become: true
- name: expand undercloud.qcow2 filesystem
shell: |
virsh vol-create-as default undercloud.qcow2 40G --format qcow2
virt-resize --expand /dev/sda1 \
{{ undercloud_working_image_dest }} \
/var/lib/libvirt/images/undercloud.qcow2
cp -f /var/lib/libvirt/images/undercloud.qcow2 \
{{ undercloud_working_image_dest }}
environment:
LIBGUESTFS_BACKEND: direct
become: true
- name: "Create virt-customize run script ({{ undercloud_run_script }})"
template:
src: "{{ undercloud_run_script }}"
dest: "{{ working_dir }}"
- name: Run the virt-customize run script
shell: "{{ undercloud_virt_customize_command }}"
environment:
LIBGUESTFS_BACKEND: direct

View File

@@ -1,37 +0,0 @@
#!/bin/bash
# Undercloud script for virt-customize --run
set -eux
xfs_growfs -d /dev/sda1
yum remove -y cloud-init
yum remove -y mariadb-galera-server
yum install -y mariadb-server
sudo yum install -y openstack-tempest
sudo yum remove -y python-manila
useradd stack
echo "stack ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stack
mkdir /home/stack/.ssh
chown stack:stack /home/stack/.ssh
echo "127.0.0.1 localhost undercloud" > /etc/hosts
echo "HOSTNAME=undercloud" >> /etc/sysconfig/network
echo "undercloud" > /etc/hostname
cp /usr/share/instack-undercloud/undercloud.conf.sample /home/stack/undercloud.conf
chown stack:stack /home/stack/*
## workarounds
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
# https://bugzilla.redhat.com/show_bug.cgi?id=1301290
# https://bugs.launchpad.net/tripleo/+bug/1537720
# https://review.openstack.org/272149
sed --in-place '/wsrep_notify_cmd/d' /usr/share/openstack-tripleo-heat-templates/puppet/manifests/overcloud_controller_pacemaker.pp || true

View File

@@ -17,6 +17,7 @@
- libvirt
- libvirt-python
- python-lxml
- libguestfs-tools
- openvswitch
become: true