Ha devs,
Na een halfjaar op stage bezig te zijn geweest met Ansible ben ik enthousiast geworden en ben het nu ook aan het opzetten voor mijzelf. Ik run een Proxmox server met een aantal containers die ik met Ansible wil gaan provisionen.
Ik loop alleen nu tegen een issue aan, ik gebruik Vagrant om lokaal Ansible te testen. In de Vagrantfile creëer ik een dynamische inventory. Mijn productie inventory bevind zich onder /inventory/hosts met de bijbehorende host_vars. Ook nog even geprobeerd of het verschil maakt met de host_vars en host file in de root directory maar dat maakt ook niet uit.
De dynamische inventory maakt het lastig, eerst zaten mijn hosts niet in een group, dat heb ik opgelost door in een loop de een groups array te creëren. Maar nu kwam ik erachter dat Vagrant de hosts_vars uit de /inventory niet gebruikt (ook wel logisch aangezien er op deze manier een losse inventory wordt gemaakt). De vars in group_vars worden wel netjes opgepikt.
Nu heb ik hetzelfde truukje geprobeerd toe te passen als voor de groups maar Vagrant vind variabelen als de onderstaande niet zo fijn in zijn dynamische inventory en gooit de daar weer onderstaande foutmelding.
Nu vraag ik me allereerst af, hoe kan ik dit beter aanpakken? Wat zijn de ervaringen hier wat betreft lokaal testen? Is het de moeite waard uit te gaan zoeken of ik dit kan oplossen of is er een betere opzet mogelijk om lokaal te testen.
Ik zou graag alle host_vars op een plek houden en niet constant hoeven knippen en plakken tussen twee inventories (lokaal en productie).
Wie heeft hier meer ervaring mee? Google helpt me ook niet echt verder tot nu toe.
Dit is mijn huidige Vagrantfile:
Na een halfjaar op stage bezig te zijn geweest met Ansible ben ik enthousiast geworden en ben het nu ook aan het opzetten voor mijzelf. Ik run een Proxmox server met een aantal containers die ik met Ansible wil gaan provisionen.
Ik loop alleen nu tegen een issue aan, ik gebruik Vagrant om lokaal Ansible te testen. In de Vagrantfile creëer ik een dynamische inventory. Mijn productie inventory bevind zich onder /inventory/hosts met de bijbehorende host_vars. Ook nog even geprobeerd of het verschil maakt met de host_vars en host file in de root directory maar dat maakt ook niet uit.
De dynamische inventory maakt het lastig, eerst zaten mijn hosts niet in een group, dat heb ik opgelost door in een loop de een groups array te creëren. Maar nu kwam ik erachter dat Vagrant de hosts_vars uit de /inventory niet gebruikt (ook wel logisch aangezien er op deze manier een losse inventory wordt gemaakt). De vars in group_vars worden wel netjes opgepikt.
Nu heb ik hetzelfde truukje geprobeerd toe te passen als voor de groups maar Vagrant vind variabelen als de onderstaande niet zo fijn in zijn dynamische inventory en gooit de daar weer onderstaande foutmelding.
Python:
1
| nextcloud_instance_name: "{{ nextcloud_trusted_domain | first }}" |
code:
1
2
| ERROR! Attempted to read "/home/wilmardo/Documents/Development/lansible/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory" as YAML: 'AnsibleUnicode' object has no attribute 'keys' Attempted to read "/home/wilmardo/Documents/Development/lansible/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory" as ini file: /home/wilmardo/Documents/Development/lansible/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory:3: Expected key=value host variable assignment, got: {{ hostvars[loadbalancer.lansible.nl]['ansible_eth0']['ipv4']['address'] }}] |
Nu vraag ik me allereerst af, hoe kan ik dit beter aanpakken? Wat zijn de ervaringen hier wat betreft lokaal testen? Is het de moeite waard uit te gaan zoeken of ik dit kan oplossen of is er een betere opzet mogelijk om lokaal te testen.
Ik zou graag alle host_vars op een plek houden en niet constant hoeven knippen en plakken tussen twee inventories (lokaal en productie).
Wie heeft hier meer ervaring mee? Google helpt me ook niet echt verder tot nu toe.
Dit is mijn huidige Vagrantfile:
Ruby:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| # Require YAML module require 'yaml' Vagrant.configure("2") do |config| vms = { "jenkins" => { "hostname" => "jenkins.domain.nl", "group" => "jenkins", "os" => "centos/7", }, "nextcloud" => { "hostname" => "nextcloud.domain.nl", "group" => "nextcloud", "os" => "wholebits/ubuntu16.04-64", }, "loadbalancer" => { "hostname" => "loadbalancer.domain.nl", "group" => "loadbalancer", "os" => "centos/7", }, } groups = {} host_vars = {} vms.each do |key, value| # create groups groups[value['group']] = value['hostname'] # get host_vars host_vars[value['hostname']] = YAML.load_file("inventory/host_vars/#{value['hostname']}.yml") end if Vagrant.has_plugin?("vagrant-cachier") config.cache.scope = :box end config.vm.provider "libvirt" do |v| v.memory = 512 v.cpus = 4 end vms.each do |key, value| config.vm.define "#{value['hostname']}" do |define| define.vm.box = "#{value['os']}" define.vm.hostname = "#{value['hostname']}" define.vm.provision "ansible" do |ansible| #ansible.verbose = "vvv" #uncomment for debug, more v's, more debug output where 3 v's is the logical max ansible.playbook = "#{value['group']}.yml" ansible.groups = groups ansible.host_vars = host_vars end end end end |