From 2df0a4bb465fbc65c78eb39bdf4e0c401e7b3b78 Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Wed, 29 Nov 2023 15:51:39 +0000 Subject: [PATCH 1/8] Create default target in playbook's Makefile Running 'make' without arguments inside 'playbooks' directory doesn't trigger the full installation as it happens in the root directory. With this patch, running 'make' inside 'playbooks' is equivalent to running it in the root directory. Signed-off-by: Xavi Hernandez --- playbooks/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/playbooks/Makefile b/playbooks/Makefile index e94fbb93..2a29fdd0 100644 --- a/playbooks/Makefile +++ b/playbooks/Makefile @@ -6,6 +6,8 @@ ifdef EXTRA_VARS SSH_EXTRA_VARS := EXTRA_VARS='${EXTRA_VARS}' endif +test: setup.site + local: @ansible-playbook --inventory localhost, ${ANSIBLE_EXTRA_VARS} local.yml From 9f6afdbc9e5f62246fec7c78eebb2164a8a9659d Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Tue, 28 Nov 2023 16:03:24 +0000 Subject: [PATCH 2/8] Create a python venv to run the ansible playbooks The patch creates a python virtual environment where required python modules and ansible collections are installed without interfering or polluting the system. Signed-off-by: Xavi Hernandez --- requirements.txt | 2 + site | 179 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 requirements.txt create mode 100755 site diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..74b24ce8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +ansible +netaddr diff --git a/site b/site new file mode 100755 index 00000000..fd27bc48 --- /dev/null +++ b/site @@ -0,0 +1,179 @@ +#!/bin/bash + +set -eu + +function check_version() { + local v + + for v in "${VERSION[@]}"; do + [[ ${v} -ne ${1-0} ]] && break + unset v + shift + done + + [[ ${v-0} -ge ${1-0} ]] +} + +function template() { + local file="${SITE_HOME}/${1}" + local mode="${2}" + local content="${3}" + + sed -n 's/^\s*|//p' <<<"${content}" >"${file}" + chmod "${mode}" "${file}" +} + +function wrapper() { + bash --rcfile "${SITE_HOME}/.siterc" -i "${@}" +} + +function run() { + wrapper -c "${*}" +} + +function cmd_show() { + find "${SITE_USER}" -mindepth 1 -maxdepth 1 -type d | + xargs -i{} bash -c ' + if [[ -f "{}/.siterc" ]]; then + echo "$(basename "{}") $(grep -o "EXTRA_VARS.*" "{}/.siterc")" + fi + ' +} + +function cmd_yamllint() { + yamllint -c .yamllint . +} + +function cmd_statedump() { + run make nodes.statedump +} + +function cmd_shell() { + wrapper +} + +function cmd_create() { + local opts + + opts=( + "--symlinks" + "--clear" + ) + check_version 3 6 && opts+=("--prompt" "SITE:${SITE_NAME}") + check_version 3 9 && opts+=("--upgrade-deps") + + ${PYTHON} -m venv "${opts[@]}" "${SITE_HOME}" + template ".siterc" 0644 " + |if [[ -f ~/.bashrc ]]; then + | source ~/.bashrc + |fi + | + |export EXTRA_VARS='${EXTRA_VARS-}' + | + |alias ssh=\"ssh -F \\\"\${SITE_HOME}/ssh-config-host\\\"\" + |alias scp=\"scp -F \\\"\${SITE_HOME}/ssh-config-host\\\"\" + |alias sftp=\"sftp -F \\\"\${SITE_HOME}/ssh-config-host\\\"\" + | + |source \"\${SITE_HOME}/bin/activate\" + | + |cd \"\${SITE_HOME}\" + " + + template "Makefile" 0644 " + |PHONY: \$(MAKECMDGOALS) all + | + |\$(or \$(MAKECMDGOALS), all): + | @make -C \"\${SITE_ROOT}/playbooks\" \$(MAKECMDGOALS) + " + + cp "${SITE_ROOT}/requirements.txt" "${SITE_HOME}" + + run pip install --upgrade -r requirements.txt +} + +function cmd_build() { + run make +} + +function cmd_clean() { + run make clean +} + +function cmd_destroy() { + cmd_clean + rm -rf "${SITE_HOME}" +} + +export SITE_USER="$(realpath "${HOME}/.site")" + +mkdir -p "${SITE_USER}" + +CMD="${1-show}" + +if [[ "${CMD}" == "show" ]]; then + cmd_show + exit 0 +elif [[ "${CMD}" == "yamllint" ]]; then + cmd_yamllint + exit 0 +fi + +PYTHON="$(echo -n "${PATH}" | + tr ':' '\n' | + xargs -i{} find {} -maxdepth 1 -type f -regex '.*/python[0-9.]*' 2>/dev/null | + xargs -i{} bash -c "echo \$({} --version | tr -dc '0-9.') {}" | + LC_ALL=C sort -Vr | + head -n 1 | + cut -d" " -f 2-)" + +VERSION=($(${PYTHON} --version | tr -dc '0-9.' | tr '.' ' ')) + +if ! check_version 3 4; then + echo "Python 3.4+ is required" >&2 + exit 1 +fi + +echo "Using ${PYTHON} ($(IFS=.; echo "${VERSION[*]}"))" + +export SITE_HOME="$(realpath "${SITE_USER}/${2?Environment name is not specified}")" +export SITE_NAME="$(basename "${SITE_HOME}")" +export SITE_ROOT="$(realpath "$(dirname "${0}")")" + +if [[ "${CMD}" == "create" ]]; then + cmd_create + exit 0 +fi + +if [[ ! -d "${SITE_HOME}" ]]; then + if [[ "${CMD}" != "destroy" ]]; then + echo "Directory doesn't exist" >&2 + exit 1 + fi + exit 0 +fi + +if [[ ! -f "${SITE_HOME}/.siterc" ]]; then + echo "Directory is not a SITE configuration" >&2 + exit 1 +fi + +case "${CMD}" in + "statedump") + cmd_statedump + ;; + "shell") + cmd_shell + ;; + "build") + cmd_build + ;; + "clean") + cmd_clean + ;; + "destroy") + cmd_destroy + ;; + *) + echo "Unknown command" >&2 + exit 1 +esac From c322e6cc8b8423e362dc9609af8707e52df09c5f Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Thu, 30 Nov 2023 14:10:35 +0000 Subject: [PATCH 3/8] Convert main Makefile into a wrapper of 'site' command The 'site' command is more versatile than the Makefile. It's retained just to avoid breaking centos-ci scripts. Once centos-ci scripts are updated, this Makefile can be removed. Signed-off-by: Xavi Hernandez --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 970bcdfd..c9722ffc 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,14 @@ .PHONY: test statedump clean yamllint test: - @$(MAKE) -C playbooks setup.site + @./site create test + @./site build test statedump: - @$(MAKE) -C playbooks nodes.statedump + @./site statedump test clean: - @$(MAKE) -C playbooks clean + @./site destroy test yamllint: - @yamllint -c .yamllint . + @./site yamllint From 532fcda72e000420aeb1913114a0e88d2570966d Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Tue, 28 Nov 2023 16:09:27 +0000 Subject: [PATCH 4/8] Use the environment name as the VM prefix To make it possible to have several independent environments at the same time, use a custom prefix for the VMs on each environment instead of the default 'playbooks' value (which is the name of the directory). Signed-off-by: Xavi Hernandez --- playbooks/roles/local.defaults/tasks/main.yml | 1 + playbooks/roles/local.defaults/templates/config.yml.j2 | 2 ++ playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 | 2 ++ 3 files changed, 5 insertions(+) diff --git a/playbooks/roles/local.defaults/tasks/main.yml b/playbooks/roles/local.defaults/tasks/main.yml index f3dcecc1..227510fc 100644 --- a/playbooks/roles/local.defaults/tasks/main.yml +++ b/playbooks/roles/local.defaults/tasks/main.yml @@ -13,6 +13,7 @@ variant: "{{ (backend | default('xfs') | split('.'))[1] | default('default') }}" max_memory: "{{ ansible_memfree_mb }}" max_cpu: "{{ ansible_processor_nproc }}" + vm_prefix: "{{ lookup('env', 'SITE_NAME') | default('site', true) }}" - name: Load configuration include_vars: diff --git a/playbooks/roles/local.defaults/templates/config.yml.j2 b/playbooks/roles/local.defaults/templates/config.yml.j2 index 1f2f70b7..f2f87f44 100644 --- a/playbooks/roles/local.defaults/templates/config.yml.j2 +++ b/playbooks/roles/local.defaults/templates/config.yml.j2 @@ -16,6 +16,8 @@ config: name: "{{ be }}" variant: "{{ variant }}" + vm_prefix: "{{ vm_prefix }}_" + data: {{ environments[be].data | default({}) }} paths: {{ paths }} diff --git a/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 b/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 index f5b3b12f..3961fb86 100644 --- a/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 +++ b/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 @@ -19,6 +19,8 @@ Vagrant.configure("2") do |config| # taken from: # https://github.com/heketi/heketi/pull/1008 v.cpu_mode = 'host-passthrough' + + v.default_prefix = '{{ config.vm_prefix }}' end {% for host in data.hosts %} {%- set node = config.nodes[host] %} From c3ad35bbbdb130aeaed0c62d700c88233e73fd1c Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Wed, 29 Nov 2023 14:10:59 +0000 Subject: [PATCH 5/8] Move settings and configuration inside SITE home Create a private copy of the settings.yml file into the SITE home directory so that it can be modified without interfering other environments. The config.yml file is also created inside the SITE home to avoid interferences. Signed-off-by: Xavi Hernandez --- .gitignore | 1 - playbooks/cleanup.yml | 2 +- playbooks/hosts.update.yml | 2 +- playbooks/nodes.statedump.yml | 2 +- playbooks/roles/local.clean/tasks/main.yml | 2 +- playbooks/roles/local.defaults/tasks/main.yml | 16 +++++++++++++--- .../roles/local.defaults/templates/config.yml.j2 | 2 ++ .../provisioner.vagrant/tasks/create/main.yml | 5 ----- playbooks/roles/setup.prep/tasks/main.yml | 5 +++++ playbooks/setup.prep.yml | 2 +- playbooks/settings.yml => settings.yml | 0 site | 1 + 12 files changed, 26 insertions(+), 14 deletions(-) rename playbooks/settings.yml => settings.yml (100%) diff --git a/.gitignore b/.gitignore index 32b9cae3..e411f6d7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,4 @@ playbooks/ansible/ssh-config-setup playbooks/site_inventory playbooks/ssh-config-host playbooks/Vagrantfile -playbooks/ansible/config.yml devel/authorized_keys diff --git a/playbooks/cleanup.yml b/playbooks/cleanup.yml index e768ea1e..a791e52e 100644 --- a/playbooks/cleanup.yml +++ b/playbooks/cleanup.yml @@ -4,7 +4,7 @@ become: no gather_facts: false vars_files: - - ansible/config.yml + - "{{ lookup('env', 'SITE_HOME') | default('.') }}/config.yml" vars: provision_action: destroy roles: diff --git a/playbooks/hosts.update.yml b/playbooks/hosts.update.yml index d51a2957..476879b5 100644 --- a/playbooks/hosts.update.yml +++ b/playbooks/hosts.update.yml @@ -6,6 +6,6 @@ become: yes become_method: sudo vars_files: - - ansible/config.yml + - "{{ lookup('env', 'SITE_HOME') | default('.') }}/config.yml" roles: - hosts.update diff --git a/playbooks/nodes.statedump.yml b/playbooks/nodes.statedump.yml index 8ac2841d..2aec8a3d 100644 --- a/playbooks/nodes.statedump.yml +++ b/playbooks/nodes.statedump.yml @@ -3,7 +3,7 @@ become: yes become_method: sudo vars_files: - - ansible/config.yml + - "{{ lookup('env', 'SITE_HOME') | default('.') }}/config.yml" roles: - logs.collect - config.collect diff --git a/playbooks/roles/local.clean/tasks/main.yml b/playbooks/roles/local.clean/tasks/main.yml index 65cd988e..01d23401 100644 --- a/playbooks/roles/local.clean/tasks/main.yml +++ b/playbooks/roles/local.clean/tasks/main.yml @@ -4,4 +4,4 @@ path: "{{ item }}" state: absent with_items: - - ansible/config.yml + - "{{ lookup('env', 'SITE_HOME') | default('.') }}/config.yml" diff --git a/playbooks/roles/local.defaults/tasks/main.yml b/playbooks/roles/local.defaults/tasks/main.yml index 227510fc..d467253f 100644 --- a/playbooks/roles/local.defaults/tasks/main.yml +++ b/playbooks/roles/local.defaults/tasks/main.yml @@ -1,12 +1,16 @@ --- +- name: Locate SITE home + set_fact: + site_home: "{{ lookup('env', 'SITE_HOME') | default('.', true) }}" + - name: Load settings include_vars: - file: "settings.yml" + file: "{{ site_home }}/settings.yml" - name: Generate config.yml in ansible directory template: src: config.yml.j2 - dest: ./ansible/config.yml + dest: "{{ site_home }}/config.yml" vars: os: "{{ use_distro | default('centos9') }}" be: "{{ (backend | default('xfs') | split('.'))[0] }}" @@ -14,10 +18,16 @@ max_memory: "{{ ansible_memfree_mb }}" max_cpu: "{{ ansible_processor_nproc }}" vm_prefix: "{{ lookup('env', 'SITE_NAME') | default('site', true) }}" + home: "{{ site_home }}" - name: Load configuration include_vars: - file: "ansible/config.yml" + file: "{{ site_home }}/config.yml" - debug: var: config + +- name: Copy common playbook configuration + copy: + src: "{{ site_home }}/config.yml" + dest: "{{ config.statedir }}" diff --git a/playbooks/roles/local.defaults/templates/config.yml.j2 b/playbooks/roles/local.defaults/templates/config.yml.j2 index f2f87f44..d25ecfc7 100644 --- a/playbooks/roles/local.defaults/templates/config.yml.j2 +++ b/playbooks/roles/local.defaults/templates/config.yml.j2 @@ -1,5 +1,7 @@ --- config: + home: "{{ home }}" + os: {%- for os_name in os_info +%} {{ os_name }}: diff --git a/playbooks/roles/provisioner.vagrant/tasks/create/main.yml b/playbooks/roles/provisioner.vagrant/tasks/create/main.yml index 577de3a7..297f9434 100644 --- a/playbooks/roles/provisioner.vagrant/tasks/create/main.yml +++ b/playbooks/roles/provisioner.vagrant/tasks/create/main.yml @@ -66,8 +66,3 @@ path: "{{ config.statedir }}/{{ item }}" state: directory loop: "{{ config.groups['cluster'] + config.groups['clients'] }}" - -- name: Copy common playbook configuration - copy: - src: ansible/config.yml - dest: "{{ config.statedir }}" diff --git a/playbooks/roles/setup.prep/tasks/main.yml b/playbooks/roles/setup.prep/tasks/main.yml index 4fad845c..0e59c870 100644 --- a/playbooks/roles/setup.prep/tasks/main.yml +++ b/playbooks/roles/setup.prep/tasks/main.yml @@ -29,3 +29,8 @@ src: ansible/ssh-config-setup dest: .ssh/config mode: 0600 + + - name: Copy config.yml + copy: + src: "{{ config.home }}/config.yml" + dest: ansible/config.yml diff --git a/playbooks/setup.prep.yml b/playbooks/setup.prep.yml index 4389c9aa..bf900823 100644 --- a/playbooks/setup.prep.yml +++ b/playbooks/setup.prep.yml @@ -6,6 +6,6 @@ become: yes become_method: sudo vars_files: - - ansible/config.yml + - "{{ lookup('env', 'SITE_HOME') | default('.') }}/config.yml" roles: - setup.prep diff --git a/playbooks/settings.yml b/settings.yml similarity index 100% rename from playbooks/settings.yml rename to settings.yml diff --git a/site b/site index fd27bc48..c99049d3 100755 --- a/site +++ b/site @@ -87,6 +87,7 @@ function cmd_create() { " cp "${SITE_ROOT}/requirements.txt" "${SITE_HOME}" + cp "${SITE_ROOT}/settings.yml" "${SITE_HOME}" run pip install --upgrade -r requirements.txt } From 16ae864738cfe2742f6e27339c693bf60c8cfc09 Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Fri, 1 Dec 2023 10:31:56 +0000 Subject: [PATCH 6/8] Move vagrant files into SITE home All vagrant-generated files are moved to the SITE home. This way there are no files created in the playbooks tree, which makes it possible to share it between multiple active environments. Signed-off-by: Xavi Hernandez --- .gitignore | 6 ---- playbooks/Makefile | 4 +-- .../ansible/roles/common.prep/tasks/main.yml | 2 +- .../provisioner.vagrant/tasks/create/main.yml | 36 +++++++++++-------- .../tasks/destroy/main.yml | 10 +++--- .../templates/Vagrantfile.j2 | 2 +- playbooks/roles/setup.prep/tasks/main.yml | 7 +++- 7 files changed, 37 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index e411f6d7..6f238f77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,2 @@ *~ -playbooks/.vagrant -playbooks/ansible/site_inventory -playbooks/ansible/ssh-config-setup -playbooks/site_inventory -playbooks/ssh-config-host -playbooks/Vagrantfile devel/authorized_keys diff --git a/playbooks/Makefile b/playbooks/Makefile index 2a29fdd0..24452b77 100644 --- a/playbooks/Makefile +++ b/playbooks/Makefile @@ -1,5 +1,5 @@ -INVENTORY := ./site_inventory -VSSH := ssh -F ssh-config-host +INVENTORY := "${SITE_HOME}/site_inventory" +VSSH := ssh -F "${SITE_HOME}/ssh-config-host" ifdef EXTRA_VARS ANSIBLE_EXTRA_VARS := -e '${EXTRA_VARS}' diff --git a/playbooks/ansible/roles/common.prep/tasks/main.yml b/playbooks/ansible/roles/common.prep/tasks/main.yml index eee4de06..704abd29 100644 --- a/playbooks/ansible/roles/common.prep/tasks/main.yml +++ b/playbooks/ansible/roles/common.prep/tasks/main.yml @@ -23,7 +23,7 @@ - name: copy ssh config copy: - src: ssh-config-setup + src: ~/.ssh/config dest: .ssh/config - name: Create /etc/hosts diff --git a/playbooks/roles/provisioner.vagrant/tasks/create/main.yml b/playbooks/roles/provisioner.vagrant/tasks/create/main.yml index 297f9434..67cfd969 100644 --- a/playbooks/roles/provisioner.vagrant/tasks/create/main.yml +++ b/playbooks/roles/provisioner.vagrant/tasks/create/main.yml @@ -2,49 +2,55 @@ - name: Setup Vagrant file template: src: Vagrantfile.j2 - dest: Vagrantfile + dest: "{{ config.home }}/Vagrantfile" - name: start vagrant vms - command: vagrant up --no-provision + command: + chdir: "{{ config.home }}" + cmd: vagrant up --no-provision - name: provision vagrant vms - command: vagrant provision + command: + chdir: "{{ config.home }}" + cmd: vagrant provision - name: copy vagrant generated inventory file - local machine copy: - src: .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory - dest: ./site_inventory + src: "{{ config.home }}/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory" + dest: "{{ config.home }}/site_inventory" - name: adapt inventory - ssh options blockinfile: - path: ./site_inventory + path: "{{ config.home }}/site_inventory" block: | [all:vars] ansible_ssh_common_args='-o StrictHostKeyChecking=no' - name: copy vagrant generated inventory file - setup machine copy: - src: ./site_inventory - dest: ./ansible/site_inventory + src: "{{ config.home }}/site_inventory" + dest: "{{ config.home }}/site_inventory_setup" - name: adapt inventory - correct ssh key replace: - path: ./ansible/site_inventory + path: "{{ config.home }}/site_inventory_setup" regexp: "ansible_ssh_private_key_file='.*/\\.vagrant\\.d/insecure_private_key'" replace: "ansible_ssh_private_key_file='insecure_private_ssh_key'" - name: dump ssh config - command: vagrant ssh-config + command: + chdir: "{{ config.home }}" + cmd: vagrant ssh-config register: output - name: store ssh-config in file copy: content: "{{ output.stdout }}\n" - dest: ./ssh-config-host + dest: "{{ config.home }}/ssh-config-host" - name: Create host alias lineinfile: - path: ./ssh-config-host + path: "{{ config.home }}/ssh-config-host" state: present regexp: '^\s*Host\s+{{ config.groups[item][0] }}.*$' line: "Host {{ config.groups[item][0] }} {{ item }}" @@ -52,12 +58,12 @@ - name: copy ssh-config for setup copy: - src: ./ssh-config-host - dest: ./ansible/ssh-config-setup + src: "{{ config.home }}/ssh-config-host" + dest: "{{ config.home }}/ssh-config-setup" - name: modify ssh-config-setup replace: - path: ./ansible/ssh-config-setup + path: "{{ config.home }}/ssh-config-setup" regexp: "IdentityFile .*" replace: "IdentityFile ansible/insecure_private_ssh_key" diff --git a/playbooks/roles/provisioner.vagrant/tasks/destroy/main.yml b/playbooks/roles/provisioner.vagrant/tasks/destroy/main.yml index ae8618b1..3220ad3d 100644 --- a/playbooks/roles/provisioner.vagrant/tasks/destroy/main.yml +++ b/playbooks/roles/provisioner.vagrant/tasks/destroy/main.yml @@ -1,15 +1,17 @@ --- - name: Destroy vagrant machines - command: vagrant destroy -f + command: + chdir: "{{ config.home }}" + cmd: vagrant destroy -f - name: Remove vagrant settings file: - path: "{{ item }}" + path: "{{ config.home }}/{{ item }}" state: absent with_items: - .vagrant - Vagrantfile - - ansible/site_inventory - - ansible/ssh-config-setup - site_inventory + - site_inventory_setup - ssh-config-host + - ssh-config-setup diff --git a/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 b/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 index 3961fb86..bff5b113 100644 --- a/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 +++ b/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 @@ -54,7 +54,7 @@ Vagrant.configure("2") do |config| # Run a no-op playbook to create the inventory file. # Based on that, one can run ansible without vagrant. node.vm.provision "no-op", type:'ansible' do |ansible| - ansible.playbook = "no-op-playbook.yml" + ansible.playbook = "{{ playbook_dir }}/no-op-playbook.yml" ansible.groups = { {%- for group in config.groups +%} "{{ group }}" => {{ config.groups[group] | to_json }}, diff --git a/playbooks/roles/setup.prep/tasks/main.yml b/playbooks/roles/setup.prep/tasks/main.yml index 0e59c870..3f1c4c9e 100644 --- a/playbooks/roles/setup.prep/tasks/main.yml +++ b/playbooks/roles/setup.prep/tasks/main.yml @@ -26,10 +26,15 @@ - name: copy ssh config in place copy: - src: ansible/ssh-config-setup + src: "{{ config.home }}/ssh-config-setup" dest: .ssh/config mode: 0600 + - name: Copy inventory + copy: + src: "{{ config.home }}/site_inventory_setup" + dest: ansible/site_inventory + - name: Copy config.yml copy: src: "{{ config.home }}/config.yml" From 72d6e2c81d6c595212237e84c3754247671bd090 Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Fri, 1 Dec 2023 12:17:13 +0000 Subject: [PATCH 7/8] Move collect diretories into SITE home Signed-off-by: Xavi Hernandez --- playbooks/roles/local.defaults/templates/config.yml.j2 | 4 ++-- settings.yml | 5 ----- site | 3 +++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/playbooks/roles/local.defaults/templates/config.yml.j2 b/playbooks/roles/local.defaults/templates/config.yml.j2 index d25ecfc7..790cee92 100644 --- a/playbooks/roles/local.defaults/templates/config.yml.j2 +++ b/playbooks/roles/local.defaults/templates/config.yml.j2 @@ -103,5 +103,5 @@ config: {%- endfor +%} {%- endfor +%} - statedir: "{{ misc.host.statedir }}/sit_statedump" - configdir: "{{ misc.host.configdir }}" + statedir: "{{ home }}/statedump" + configdir: "{{ home }}/config" diff --git a/settings.yml b/settings.yml index e4d595ae..c39b26d1 100644 --- a/settings.yml +++ b/settings.yml @@ -13,11 +13,6 @@ os_info: distro: centos version: 9 -misc: - host: - statedir: "/tmp" - configdir: "/tmp/config" - paths: samba: etc: /etc/samba diff --git a/site b/site index c99049d3..78e3f825 100755 --- a/site +++ b/site @@ -89,6 +89,9 @@ function cmd_create() { cp "${SITE_ROOT}/requirements.txt" "${SITE_HOME}" cp "${SITE_ROOT}/settings.yml" "${SITE_HOME}" + mkdir "${SITE_HOME}/statedump" + mkdir "${SITE_HOME}/config" + run pip install --upgrade -r requirements.txt } From e55b825cddfc7e9efd78468d9e06116f4644c6a9 Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Fri, 1 Dec 2023 12:19:53 +0000 Subject: [PATCH 8/8] Make VMs disk name dependent on the VM prefix Signed-off-by: Xavi Hernandez --- .../roles/provisioner.vagrant/templates/Vagrantfile.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 b/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 index bff5b113..324fa5bf 100644 --- a/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 +++ b/playbooks/roles/provisioner.vagrant/templates/Vagrantfile.j2 @@ -33,8 +33,8 @@ Vagrant.configure("2") do |config| {%- endfor +%} node.vm.provider :virtualbox do |vb| {%- for size in node.disks +%} - vb.customize [ "createhd", "--filename", "disk-{{ vm_idx }}{{ loop.index0 }}.vdi", "--size", {{ size * 1024 }} ] - vb.customize [ "storageattach", :id, "--storagectl", "SATA Controller", "--port", {{ loop.index0 + 3 }}, "--device", 0, "--type", "hdd", "--medium", "disk-{{ vm_idx }}{{ loop.index0 }}.vdi" ] + vb.customize [ "createhd", "--filename", "{{ config.vm_prefix }}disk-{{ vm_idx }}{{ loop.index0 }}.vdi", "--size", {{ size * 1024 }} ] + vb.customize [ "storageattach", :id, "--storagectl", "SATA Controller", "--port", {{ loop.index0 + 3 }}, "--device", 0, "--type", "hdd", "--medium", "{{ config.vm_prefix}}disk-{{ vm_idx }}{{ loop.index0 }}.vdi" ] {%- endfor +%} vb.memory = {{ node.memory }} vb.cpus = {{ node.cpus }} @@ -44,7 +44,7 @@ Vagrant.configure("2") do |config| lv.storage_pool_name = "{{ data.pool }}" {%- endif +%} {%- for size in node.disks +%} - lv.storage :file, :device => "vd{{ "bcdefghijklmnopqrstuvwxyz"[loop.index0] }}", :path => "disk-{{ vm_idx }}{{ loop.index0 }}.disk", :size => '{{ size }}G' + lv.storage :file, :device => "vd{{ "bcdefghijklmnopqrstuvwxyz"[loop.index0] }}", :path => "{{ config.vm_prefix }}disk-{{ vm_idx }}{{ loop.index0 }}.disk", :size => '{{ size }}G' {%- endfor +%} lv.memory = {{ node.memory }} lv.cpus = {{ node.cpus }}