From 1e769b726092b365a0dc57fb50e974a43f812981 Mon Sep 17 00:00:00 2001 From: Max Gautier <mg@max.gautier.name> Date: Thu, 12 Sep 2024 13:56:12 +0200 Subject: [PATCH] Rework vagrant inventory handling + support for multiples inventories The current way to handle a custom inventory in vagrant is a bit hackish, copy files around and can break Vagrantfile parsing in cornercase scenarios (removing vagrant inventories, or the inventory copied into vagrant inventory). Instead, simply pass additional inventories to the ansible-playbook command lines as raw arguments with `-i`. This also makes supporting multiples inventories trivial, so we add a new `$inventories` variable for that purpose. --- Vagrantfile | 24 ++++++------------------ tests/Makefile | 3 ++- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 8b43088b0..a07f1a55f 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -55,6 +55,8 @@ $subnet ||= "172.18.8" $subnet_ipv6 ||= "fd3c:b398:0698:0756" $os ||= "ubuntu2004" $network_plugin ||= "flannel" +$inventory ||= "inventory/sample" +$inventories ||= [$inventory] # Setting multi_networking to true will install Multus: https://github.com/k8snetworkplumbingwg/multus-cni $multi_networking ||= "False" $download_run_once ||= "True" @@ -93,19 +95,6 @@ if ! SUPPORTED_OS.key?($os) end $box = SUPPORTED_OS[$os][:box] -# if $inventory is not set, try to use example -$inventory = "inventory/sample" if ! $inventory -$inventory = File.absolute_path($inventory, File.dirname(__FILE__)) - -# if $inventory has a hosts.ini file use it, otherwise copy over -# vars etc to where vagrant expects dynamic inventory to be -if ! File.exist?(File.join(File.dirname($inventory), "hosts.ini")) - $vagrant_ansible = File.join(File.absolute_path($vagrant_dir), "provisioners", "ansible") - FileUtils.mkdir_p($vagrant_ansible) if ! File.exist?($vagrant_ansible) - $vagrant_inventory = File.join($vagrant_ansible,"inventory") - FileUtils.rm_f($vagrant_inventory) - FileUtils.ln_s($inventory, $vagrant_inventory) -end if Vagrant.has_plugin?("vagrant-proxyconf") $no_proxy = ENV['NO_PROXY'] || ENV['no_proxy'] || "127.0.0.1,localhost" @@ -286,14 +275,13 @@ Vagrant.configure("2") do |config| ansible.playbook = $playbook ansible.compatibility_mode = "2.0" ansible.verbose = $ansible_verbosity - $ansible_inventory_path = File.join( $inventory, "hosts.ini") - if File.exist?($ansible_inventory_path) - ansible.inventory_path = $ansible_inventory_path - end ansible.become = true ansible.limit = "all,localhost" ansible.host_key_checking = false - ansible.raw_arguments = ["--forks=#{$num_instances}", "--flush-cache", "-e ansible_become_pass=vagrant"] + ansible.raw_arguments = ["--forks=#{$num_instances}", + "--flush-cache", + "-e ansible_become_pass=vagrant"] + + $inventories.map {|inv| ["-i", inv]}.flatten ansible.host_vars = host_vars ansible.extra_vars = $extra_vars if $ansible_tags != "" diff --git a/tests/Makefile b/tests/Makefile index b7d64f19d..f052978b1 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -35,7 +35,8 @@ cleanup-packet: create-vagrant: vagrant up - cp $(CI_PROJECT_DIR)/inventory/sample/vagrant_ansible_inventory $(INVENTORY) + cp $(CI_PROJECT_DIR)/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory $(INVENTORY) + delete-vagrant: vagrant destroy -f -- GitLab