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:
@@ -1,6 +1,7 @@
|
||||
default_disk: 50
|
||||
|
||||
undercloud_memory: 16384
|
||||
undercloud_vcpu: 4
|
||||
|
||||
control_memory: 8192
|
||||
compute_memory: 8192
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Minimal base script for virt-customize --run
|
||||
|
||||
set -eux
|
||||
|
||||
{% include repo_type %}
|
||||
|
||||
yum update -y
|
||||
@@ -1 +0,0 @@
|
||||
yum install -y http://www.rdoproject.org/repos/openstack-liberty/rdo-release-liberty.rpm || true
|
||||
@@ -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
|
||||
49
playbooks/roles/images/build/tasks/convert_undercloud.yml
Normal file
49
playbooks/roles/images/build/tasks/convert_undercloud.yml
Normal 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
|
||||
85
playbooks/roles/images/build/tasks/dib_build.yml
Normal file
85
playbooks/roles/images/build/tasks/dib_build.yml
Normal 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 }}"
|
||||
@@ -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
|
||||
19
playbooks/roles/images/build/tasks/package_install.yml
Normal file
19
playbooks/roles/images/build/tasks/package_install.yml
Normal 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
|
||||
17
playbooks/roles/images/build/tasks/repo_setup.yml
Normal file
17
playbooks/roles/images/build/tasks/repo_setup.yml
Normal 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
|
||||
14
playbooks/roles/images/build/tasks/undercloud_inject.yml
Normal file
14
playbooks/roles/images/build/tasks/undercloud_inject.yml
Normal 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
|
||||
@@ -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
|
||||
@@ -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/
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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 %}
|
||||
100
playbooks/roles/images/build/vars/default_package_list.yml
Normal file
100
playbooks/roles/images/build/vars/default_package_list.yml
Normal 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
|
||||
@@ -1,3 +0,0 @@
|
||||
env_setup_script: build-env-setup
|
||||
working_dir: /root
|
||||
ansible_user: root
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 }}"
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -17,6 +17,7 @@
|
||||
- libvirt
|
||||
- libvirt-python
|
||||
- python-lxml
|
||||
- libguestfs-tools
|
||||
- openvswitch
|
||||
become: true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user