[TryMOS] Update image build fileset
* add ansible playbooks for image build/install
* move inventory files to Ansible folder
Related-Prod: PRODX-53424
Change-Id: I01d32082190ab20ac5bc3f64a2a268e063e33c68
diff --git a/trymos/image_build/ansible/ansible.cfg b/trymos/image_build/ansible/ansible.cfg
new file mode 100644
index 0000000..1c7972d
--- /dev/null
+++ b/trymos/image_build/ansible/ansible.cfg
@@ -0,0 +1,2 @@
+[defaults]
+roles_path=/srv/ansible/roles:/srv/virtual_lab/ansible/roles:/root/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/srv/ansible
\ No newline at end of file
diff --git a/trymos/image_build/ansible/build-image.yaml b/trymos/image_build/ansible/build-image.yaml
new file mode 100644
index 0000000..efb5e28
--- /dev/null
+++ b/trymos/image_build/ansible/build-image.yaml
@@ -0,0 +1,27 @@
+---
+- name: Deploy initial controllers
+ hosts: k8s_controllers[0]
+ become: true
+ become_user: root
+ tasks:
+ - name: Initialize clients
+ include_role:
+ name: rvl
+ tasks_from: clients
+ - name: Setup SSL certs
+ include_role:
+ name: rvl
+ tasks_from: certs
+ - name: Update hosts file for local registry
+ ansible.builtin.lineinfile:
+ path: /etc/hosts
+ regexp: '^127\.0\.0\.1'
+ line: 127.0.0.1 localhost registry.it.just.works
+ - name: Setup Docker registry
+ include_role:
+ name: rvl
+ tasks_from: registry
+ - name: Mirror images/binaries/charts
+ include_role:
+ name: rvl
+ tasks_from: mirror
diff --git a/trymos/image_build/ansible/inventory/master/single_node.yaml b/trymos/image_build/ansible/inventory/master/single_node.yaml
new file mode 100644
index 0000000..ba809ed
--- /dev/null
+++ b/trymos/image_build/ansible/inventory/master/single_node.yaml
@@ -0,0 +1,39 @@
+---
+all:
+ vars:
+ ansible_ssh_user: ubuntu
+ k0s_worker_on_controller: true
+ k0s_no_taints: true
+ k0s_version: 1.31.8+k0s.0
+ ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
+ kubeconfig: "{{ inventory_dir }}/artifacts/k0s-kubeconfig.yml"
+ rvl_images_build_rockoon: false
+ rvl_images_build_loci: false
+ rvl_registry_source: systemd
+ rvl_mirror_images: true
+ rvl_mirror_charts: true
+ rvl_mirror_binaries: true
+ rvl_images_build_tag: 1.1.6-dev9
+ rvl_images_base_url: "{{ rvl_registry_host }}"
+ rvl_binary_base_url: "{{ rvl_registry_https_url }}"
+ rvl_chart_ref_rockoon: "{{ rvl_registry_https_url }}/openstack/helm/rockoon/rockoon-1.1.6-dev9.tgz"
+ rvl_mirror_rockoon_chart: "{{ rvl_binary_public_base_url }}/openstack/helm/rockoon/rockoon-1.1.6-dev9.tgz"
+ rvl_openvpn_enable: true
+
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ ansible_host: localhost
+ ansible_connection: local
+
+ children:
+ computes:
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ controllers:
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ k8s_controllers:
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ k8s_workers:
+ hosts:
diff --git a/trymos/image_build/ansible/inventory/mosk-25.1/single_node.yaml b/trymos/image_build/ansible/inventory/mosk-25.1/single_node.yaml
new file mode 100644
index 0000000..008adab
--- /dev/null
+++ b/trymos/image_build/ansible/inventory/mosk-25.1/single_node.yaml
@@ -0,0 +1,41 @@
+---
+all:
+ vars:
+ ansible_ssh_user: ubuntu
+ k0s_worker_on_controller: true
+ k0s_no_taints: true
+ k0s_version: 1.27.16+k0s.0
+ ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
+ kubeconfig: "{{ inventory_dir }}/artifacts/k0s-kubeconfig.yml"
+ rvl_images_build_rockoon: false
+ rvl_images_build_loci: false
+ rvl_registry_source: systemd
+ rvl_mirror_images: true
+ rvl_mirror_charts: true
+ rvl_mirror_binaries: true
+ rvl_images_build_tag: 1.0.7
+ rvl_binary_public_base_url: https://binary.mirantis.com
+ rvl_images_public_base_url: mirantis.azurecr.io
+ rvl_images_base_url: "{{ rvl_registry_host }}"
+ rvl_binary_base_url: "{{ rvl_registry_https_url }}"
+ rvl_chart_ref_rockoon: "{{ rvl_registry_https_url }}/openstack/helm/rockoon/rockoon-1.0.7.tgz"
+ rvl_mirror_rockoon_chart: "{{ rvl_binary_public_base_url }}/openstack/helm/rockoon/rockoon-1.0.7.tgz"
+ rvl_openvpn_enable: true
+
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ ansible_host: localhost
+ ansible_connection: local
+
+ children:
+ computes:
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ controllers:
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ k8s_controllers:
+ hosts:
+ oc-virtual-lab-server-ctl-01:
+ k8s_workers:
+ hosts:
diff --git a/trymos/image_build/env/master/packer.env b/trymos/image_build/env/master/packer.env
index b63300e..45dfc86 100644
--- a/trymos/image_build/env/master/packer.env
+++ b/trymos/image_build/env/master/packer.env
@@ -1,3 +1,3 @@
export IMAGE_BASE_URL=${IMAGE_BASE_URL:-"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"}
export IMAGE_MD5_URL=${IMAGE_MD5_URL:-"https://cloud-images.ubuntu.com/jammy/current/MD5SUMS"}
-export INVENTORY_FILE=${INVENTORY_FILE:-"./env/master/single_node_inventory.yaml"}
+export INVENTORY_FILE=${INVENTORY_FILE:-"./ansible/inventory/master/single_node.yaml"}
diff --git a/trymos/image_build/env/master/single_node_inventory.yaml b/trymos/image_build/env/master/single_node_inventory.yaml
deleted file mode 100644
index 7d50aea..0000000
--- a/trymos/image_build/env/master/single_node_inventory.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-all:
- vars:
- ansible_ssh_user: ubuntu
- k0s_worker_on_controller: true
- k0s_no_taints: true
- k0s_version: 1.31.8+k0s.0
- ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
- rvl_images_build_rockoon: false
- rvl_images_build_loci: false
- rvl_images_build_tag: 1.1.4-dev72
- rvl_images_rockoon: docker-dev-kaas-virtual.docker.mirantis.net/openstack/rockoon
- rvl_chart_ref_rockoon: https://artifactory.mcp.mirantis.net/artifactory/binary-dev-kaas-local/openstack/helm/rockoon/rockoon-1.1.4-dev72.tgz
- rvl_dns_nameservers:
- - 172.18.176.6
-
- hosts:
- oc-virtual-lab-server-ctl-01:
- ansible_host: localhost
- ansible_connection: local
-
- children:
- computes:
- hosts:
- oc-virtual-lab-server-ctl-01:
- controllers:
- hosts:
- oc-virtual-lab-server-ctl-01:
- k8s_controllers:
- hosts:
- oc-virtual-lab-server-ctl-01:
- k8s_workers:
- hosts:
diff --git a/trymos/image_build/env/mosk-25.1/packer.env b/trymos/image_build/env/mosk-25.1/packer.env
index 96348ec..cb1a09e 100644
--- a/trymos/image_build/env/mosk-25.1/packer.env
+++ b/trymos/image_build/env/mosk-25.1/packer.env
@@ -1,3 +1,3 @@
export IMAGE_BASE_URL=${IMAGE_BASE_URL:-"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"}
export IMAGE_MD5_URL=${IMAGE_MD5_URL:-"https://cloud-images.ubuntu.com/jammy/current/MD5SUMS"}
-export INVENTORY_FILE=${INVENTORY_FILE:-"./env/mosk-25.1/single_node_inventory.yaml"}
+export INVENTORY_FILE=${INVENTORY_FILE:-"./ansible/inventory/mosk-25.1/single_node.yaml"}
diff --git a/trymos/image_build/env/mosk-25.1/single_node_inventory.yaml b/trymos/image_build/env/mosk-25.1/single_node_inventory.yaml
deleted file mode 100644
index 7401e3b..0000000
--- a/trymos/image_build/env/mosk-25.1/single_node_inventory.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-all:
- vars:
- ansible_ssh_user: ubuntu
- k0s_worker_on_controller: true
- k0s_no_taints: true
- k0s_version: 1.27.16+k0s.0
- ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
- rvl_images_build_rockoon: false
- rvl_images_build_loci: false
- rvl_images_build_tag: 1.0.7
- rvl_images_rockoon: mirantis.azurecr.io/openstack/rockoon
- rvl_chart_ref_rockoon: https://binary.mirantis.com/openstack/helm/rockoon/rockoon-1.0.7.tgz
- rvl_images_public_base_url: mirantis.azurecr.io
- rvl_binary_public_base_url: https://binary.mirantis.com
-
- hosts:
- oc-virtual-lab-server-ctl-01:
- ansible_host: localhost
- ansible_connection: local
-
- children:
- computes:
- hosts:
- oc-virtual-lab-server-ctl-01:
- controllers:
- hosts:
- oc-virtual-lab-server-ctl-01:
- k8s_controllers:
- hosts:
- oc-virtual-lab-server-ctl-01:
- k8s_workers:
- hosts:
diff --git a/trymos/image_build/scripts/build-image.sh b/trymos/image_build/scripts/build-image.sh
new file mode 100755
index 0000000..c7140ad
--- /dev/null
+++ b/trymos/image_build/scripts/build-image.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+set -ex
+
+LOG_FILE=${LOG_FILE:-"/var/log/build-image.log"}
+
+apt update -y
+DEBIAN_FRONTEND=noninteractive apt install -y moreutils
+
+exec > >(ts '[%Y-%m-%d %H:%M:%S]' | tee -a "${LOG_FILE}" )
+exec 2> >(ts '[%Y-%m-%d %H:%M:%S]' | tee -a "${LOG_FILE}" >&2)
+
+DEBIAN_FRONTEND=noninteractive apt install -y python3-pip
+
+PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install ansible jmespath
+
+ansible-galaxy collection install bodsch.core
+ansible-galaxy collection install bodsch.scm
+ansible-galaxy collection install community.docker
+ansible-galaxy role install bodsch.k0s
+ansible-galaxy role install cloudalchemy.coredns
+
+TOP_DIR="$(cd "$(dirname "$0")" && pwd)"
+INVENTORY_FILE=${INVENTORY_FILE:-"${TOP_DIR}/../single_node.yaml"}
+PRE_INSTALL_INVENTORY=/tmp/pre_install.yaml
+HOSTNAME=$(hostname)
+
+cp ${INVENTORY_FILE} ${PRE_INSTALL_INVENTORY}
+sed -i "s/oc-virtual-lab-server-ctl-01/${HOSTNAME}/g" "${PRE_INSTALL_INVENTORY}"
+
+cd ${TOP_DIR}/ansible
+
+ansible-playbook -i "${PRE_INSTALL_INVENTORY}" build-image.yaml -vvv
diff --git a/trymos/image_build/scripts/install-trymos.sh b/trymos/image_build/scripts/install-trymos.sh
new file mode 100755
index 0000000..6883b75
--- /dev/null
+++ b/trymos/image_build/scripts/install-trymos.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+set -ex
+
+LOG_FILE=${LOG_FILE:-"/var/log/trymos-install.log"}
+
+exec > >(ts '[%Y-%m-%d %H:%M:%S]' | tee -a "${LOG_FILE}" )
+exec 2> >(ts '[%Y-%m-%d %H:%M:%S]' | tee -a "${LOG_FILE}" >&2)
+
+HOSTNAME=$(hostname)
+TOP_DIR="$(cd "$(dirname "$0")" && pwd)"
+INVENTORY_FILE=${INVENTORY_FILE:-"${TOP_DIR}/../single_node.yaml"}
+
+sed -i "s/oc-virtual-lab-server-ctl-01/${HOSTNAME}/g" "${INVENTORY_FILE}"
+
+cd ${TOP_DIR}/../virtual_lab/ansible
+apt update -y
+
+ansible-playbook -i "${INVENTORY_FILE}" k0s-install.yaml -vvv
+
+mkdir -p /root/.kube; cp "$(dirname "${INVENTORY_FILE}")/artifacts/k0s-kubeconfig.yml" /root/.kube/config
+
+ansible-playbook -i "${INVENTORY_FILE}" infra-install.yaml -vvv
+ansible-playbook -i "${INVENTORY_FILE}" oc-install.yaml -vvv
+ansible-playbook -i "${INVENTORY_FILE}" oc-install.yaml -vvv --tags wait
+ansible-playbook -i "${INVENTORY_FILE}" deployment-info.yaml
diff --git a/trymos/image_build/scripts/launch.sh b/trymos/image_build/scripts/launch.sh
index 5c84200..368d963 100755
--- a/trymos/image_build/scripts/launch.sh
+++ b/trymos/image_build/scripts/launch.sh
@@ -4,4 +4,4 @@
export INVENTORY_FILE=/srv/single_node.yaml
-/srv/virtual_lab/install.sh
+/srv/trymos/install-trymos.sh
diff --git a/trymos/image_build/template.json b/trymos/image_build/template.json
index be7d8b9..cc8e575 100644
--- a/trymos/image_build/template.json
+++ b/trymos/image_build/template.json
@@ -2,7 +2,7 @@
"variables": {
"user": "root",
"password": "r00tme",
- "disk_size": "2500M",
+ "disk_size": "16000M",
"images_cache": "{{ env `PACKER_IMAGES_CACHE` }}",
"image_base_url": "{{ env `IMAGE_BASE_URL` }}",
"image_md5_url": "{{ env `IMAGE_MD5_URL` }}",
@@ -13,7 +13,7 @@
{
"type": "shell",
"inline": [
- "mkdir -p /usr/share/trymos /srv"
+ "mkdir -p /usr/share/trymos /srv/trymos"
]
},
{
@@ -23,18 +23,34 @@
},
{
"type": "file",
- "source": "../rockoon/charts",
- "destination": "/srv/"
- },
- {
- "type": "file",
- "source": "../rockoon/virtual_lab",
+ "sources": [
+ "../rockoon/charts",
+ "../rockoon/virtual_lab"
+ ],
"destination": "/srv/"
},
{
"type": "file",
"source": "./scripts/launch.sh",
"destination": "/usr/share/trymos/"
+ },
+ {
+ "type": "file",
+ "sources": [
+ "./ansible",
+ "./scripts/build-image.sh",
+ "./scripts/install-trymos.sh"
+ ],
+ "destination": "/srv/trymos/"
+ },
+ {
+ "type": "shell",
+ "environment_vars": [
+ "INVENTORY_FILE=/srv/single_node.yaml"
+ ],
+ "inline": [
+ "/srv/trymos/build-image.sh"
+ ]
}
],
"builders": [