Vladimir
Он сфоормирует инвентори в памяти
Vladimir
dynamic inventory
Sheridan
эмм... Чтото я непонял с арифметикой...
Sheridan
Sheridan
Sheridan
Sheridan
что я делаю не так?...
Timur
Больше скриншотов! Хороших и разных!
Ivan
что я делаю не так?...
повторяешь строку 4 раза, наверное
Sheridan
аа
Ivan
а на скрине да =)
Sheridan
это строка? | int нужен?
Sheridan
max-lease-time {{ dhcp.lease_time|int * 4 }}; тот же результат
Timur
Какой результат-то?
Timur
Телепаты в отпуске
Sheridan
а, не, всё норм
Sheridan
спасибо
Sheridan
не туда посмотрел
George
Делаю апгрейд с 2.4. Все инклюды с delegate поломались. Придумал вот такое: delegate_to: '{{ delegate_to|d(inventory_hostname) }}'
George
2.7.5+dfsg-1
George
Поломались в том смысле, что раньше можно было сделать include_tasks: ... delegate_to, а теперь при инклюде delegate_to на include'женые таски не распространяется.
George
https://github.com/ansible/ansible/issues/37995
George
И это не бага, а фича, так что с этим жить.
Vadik
Всем привет) Кто-то юзал libvirt for kvm для создание и управление вм ? Просто дока очень малая .... А модуля отдельного для квм нету есть для proxmox _kvm и там дока вообще замечательно описана Буду рад любой годной статье
George
т.к. нужно было много функций
George
python + биндинг к libvirt
George
ансибл для этого не юзали
MRY
Всем привет. Не могу понять как работает кеширование переменных. Есть плейбук который запускает 2-ве разных роли 1-я роль создает VM из темплейта. 2-я роль после отработки должна брать переменные из 1-й peer_ip и peer_hostname и регистрировать новую dns запись средствами powershell. Совсем разобрался кроме переноса переменной. пытаюсь в джобе вытащить её так: tasks: - name: Create DNS record win_command: powershell.exe - args: stdin: | $hostip= "{{ hostvars['linsrvgroup1'].peer_ip }}" $hostnm= "{{hostvars['linsrvgroup1'].peer_hostname}}" Add-DnsServerResourceRecordA -Name $hostnm -ZoneName "corp.example.com" -IPv4Address $hostip -Verbose >> C:\Windows\Temp\ansible.log Следуя логике данного топика вроде как делаю все верно: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts peer_ip и peer_hostname хранятся в host_vars для создаваемого хоста. ansible_facts: true включен
Alexander
Записи внутри hostvars - хосты а не группы
Alexander
Или линсгруп - хост?
MRY
нет
MRY
groupvars ?
Alexander
Это даст групварс, а переменная хранится в хостварс
MRY
получется нудно что то вида hostvars{{item}}['linsrvgroup'].peer_ip я имею ввиду итерацию ?
MRY
или как по всем хостам которые мембры linsrvgroup1 пройти прочитать ключ ip_peer и вытащить значение
Timur
Можете полностью плейбуку показать?
Timur
Так не очень понятно, что именно происходит в процессе
Timur
Что именно не получается при передаче переменных?
MRY
Сейчас скину
Alexander
$ cat test.yml --- - hosts: localhost vars: env: staging tasks: - debug: msg: "{{ secrets.api.db.credentials_staging }}" - debug: msg: "{{ vars['secrets.api.db.credentials_' + env] }}" 1-й ok, 2-й - "msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute u'secrets.api.db.credentials_staging
MRY
--- - hosts: linsrvgroup1 gather_facts: true connection: local user: remote become: true vars_prompt: - name: "vcenter_hostname" prompt: "Enter vcenter hostname" private: no default: "gs02vc01.corp.example.com" - name: "vcenter_username" prompt: "Enter vcenter username" private: no default: "username@corp.example.com" - name: "vcenter_password" prompt: "Enter vcenter password" private: yes confirm: yes - name: "notes" promt: "Enter notes for new VMS" private: no default: "From Ansible" - name: "datacenter" promt: "Enter Datacenter name" private: no default: "Tampa" - name: "vcenter_folder" promt: "Enter folder name for VMS" private: no default: "gsvms" - name: "vcenter_cluster" promt: "Enter cluster name" private: no default: "gs02 Cluster" tasks: - name: Clone a virtual machine from Linux template and customize vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no datacenter: "{{ datacenter }}" state: present folder: "{{ vcenter_folder }}" template: "{{ template }}" name: "{{ inventory_hostname }}" cluster: "{{ vcenter_cluster }}" networks: - name: "{{ peer_network }}" ip: "{{ peer_ip }}" netmask: "{{ peer_mask }}" gateway: "{{ peer_gw }}" wait_for_ip_address: True customization: domain: "{{ guest_domain }}" dns_servers: - "{{ peer_dns1 }}" - "{{ peer_dns2 }}" dns_suffix: - "{{ guest_domain }}" - name: add to ansible hosts file lineinfile: dest: ./inventory/hosts insertafter: '^\[{{ hostname_groups }}\]' line: '{{ item }}' with_items: '{{play_hosts}}' run_once: true delegate_to: localhost - hosts: dns gather_facts: yes vars_prompt: - name: "domainuser_passwd" prompt: "Enter domain password" private: yes tasks: - name: Run win_command: powershell.exe - args: stdin: | $hostip= "{{ hostvars['linsrvgroup1'].peer_ip }}" $hostnm= "{{ hostvars['linsrvgroup1'].peer_hostname }}" Add-DnsServerResourceRecordA -Name $hostnm -ZoneName "corp.example.com" -IPv4Address $hostip -Verbose >> C:\Windows\Temp\ansible.log
MRY
Сейчас правда последние строки переделал
Timur
--- - hosts: linsrvgroup1 gather_facts: true connection: local user: remote become: true vars_prompt: - name: "vcenter_hostname" prompt: "Enter vcenter hostname" private: no default: "gs02vc01.corp.example.com" - name: "vcenter_username" prompt: "Enter vcenter username" private: no default: "username@corp.example.com" - name: "vcenter_password" prompt: "Enter vcenter password" private: yes confirm: yes - name: "notes" promt: "Enter notes for new VMS" private: no default: "From Ansible" - name: "datacenter" promt: "Enter Datacenter name" private: no default: "Tampa" - name: "vcenter_folder" promt: "Enter folder name for VMS" private: no default: "gsvms" - name: "vcenter_cluster" promt: "Enter cluster name" private: no default: "gs02 Cluster" tasks: - name: Clone a virtual machine from Linux template and customize vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no datacenter: "{{ datacenter }}" state: present folder: "{{ vcenter_folder }}" template: "{{ template }}" name: "{{ inventory_hostname }}" cluster: "{{ vcenter_cluster }}" networks: - name: "{{ peer_network }}" ip: "{{ peer_ip }}" netmask: "{{ peer_mask }}" gateway: "{{ peer_gw }}" wait_for_ip_address: True customization: domain: "{{ guest_domain }}" dns_servers: - "{{ peer_dns1 }}" - "{{ peer_dns2 }}" dns_suffix: - "{{ guest_domain }}" - name: add to ansible hosts file lineinfile: dest: ./inventory/hosts insertafter: '^\[{{ hostname_groups }}\]' line: '{{ item }}' with_items: '{{play_hosts}}' run_once: true delegate_to: localhost - hosts: dns gather_facts: yes vars_prompt: - name: "domainuser_passwd" prompt: "Enter domain password" private: yes tasks: - name: Run win_command: powershell.exe - args: stdin: | $hostip= "{{ hostvars['linsrvgroup1'].peer_ip }}" $hostnm= "{{ hostvars['linsrvgroup1'].peer_hostname }}" Add-DnsServerResourceRecordA -Name $hostnm -ZoneName "corp.example.com" -IPv4Address $hostip -Verbose >> C:\Windows\Temp\ansible.log
Так, и какая ошибка выдается?
Timur
Это как?
lookup('vars', 'secrets.api.db.credentials_' + env)
MRY
groupvars вообще не существует как env var а hostvars работает только если указать конкретный хост, но я могу начать создание сотен хостов и не смогу соотвественно передать все значения.
Alexander
lookup('vars', 'secrets.api.db.credentials_' + env)
- debug: msg: "{{ lookup('vars', 'secrets.api.db.credentials_' + env) }}" ?
MRY
да
Timur
И что такое linsrvgroup1?
Timur
Это группа или локалхост?
MRY
чать из group_vars часть из host_vars
MRY
это гуппа
MRY
ввиде [Vmware:children] linssrvgroup1 linssrvgroup2 linssrvgroup3 [linssrvgroup1]
Alexander
Да, примерно так
У меня 2.4: "msg": "lookup plugin (vars) not found" Но переменная точно есть.
Timur
--- - hosts: linsrvgroup1 gather_facts: true connection: local user: remote become: true vars_prompt: - name: "vcenter_hostname" prompt: "Enter vcenter hostname" private: no default: "gs02vc01.corp.example.com" - name: "vcenter_username" prompt: "Enter vcenter username" private: no default: "username@corp.example.com" - name: "vcenter_password" prompt: "Enter vcenter password" private: yes confirm: yes - name: "notes" promt: "Enter notes for new VMS" private: no default: "From Ansible" - name: "datacenter" promt: "Enter Datacenter name" private: no default: "Tampa" - name: "vcenter_folder" promt: "Enter folder name for VMS" private: no default: "gsvms" - name: "vcenter_cluster" promt: "Enter cluster name" private: no default: "gs02 Cluster" tasks: - name: Clone a virtual machine from Linux template and customize vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no datacenter: "{{ datacenter }}" state: present folder: "{{ vcenter_folder }}" template: "{{ template }}" name: "{{ inventory_hostname }}" cluster: "{{ vcenter_cluster }}" networks: - name: "{{ peer_network }}" ip: "{{ peer_ip }}" netmask: "{{ peer_mask }}" gateway: "{{ peer_gw }}" wait_for_ip_address: True customization: domain: "{{ guest_domain }}" dns_servers: - "{{ peer_dns1 }}" - "{{ peer_dns2 }}" dns_suffix: - "{{ guest_domain }}" - name: add to ansible hosts file lineinfile: dest: ./inventory/hosts insertafter: '^\[{{ hostname_groups }}\]' line: '{{ item }}' with_items: '{{play_hosts}}' run_once: true delegate_to: localhost - hosts: dns gather_facts: yes vars_prompt: - name: "domainuser_passwd" prompt: "Enter domain password" private: yes tasks: - name: Run win_command: powershell.exe - args: stdin: | $hostip= "{{ hostvars['linsrvgroup1'].peer_ip }}" $hostnm= "{{ hostvars['linsrvgroup1'].peer_hostname }}" Add-DnsServerResourceRecordA -Name $hostnm -ZoneName "corp.example.com" -IPv4Address $hostip -Verbose >> C:\Windows\Temp\ansible.log
У вас в рамках плейбуки только одна виртуарка создается, получается?
MRY
это тестовый плейбук, будут сотни создаваться
MRY
тестирую в тестовой среде не на продакшене соотвественно
Timur
Понятно. В данном плейбуке модуль vmware_guest у вас ранается на localhost
Timur
Соответственно, и переменные на локалхосте лежат, судя по всему
Timur
$hostip= "{{ hostvars[localhost].peer_ip }}" Так работает?
MRY
щас гляну
Timur
Ну, и best practice в таких сценариях, это добавлять к вызовам подобных оркестраторных модулей директиву register, для сохранения фактов создаваемых инстансов. Которые потом можно использовать далее в других тасках.
MRY
TASK [Run] ********************************************************************************************************* task path: /home/username@corp.example.com/ansible/gss2.yml:83 fatal: [gs02anstest01a]: FAILED! => { "msg": "The task includes an option with an undefined variable. The error was: 'localhost' is undefined\n\nThe error appears to have been in '/home/username@corp.example.com/ansible/gss2.yml': line 83, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n tasks:\n - name: Run\n ^ here\n" }
Timur
Можно ссылочку на инфу ? если возможно
На что именно ссылочку? На то, как использовать register?
Timur
Можно ссылочку на инфу ? если возможно
Пример есть в доке по вашему модулю: - name: Create a virtual machine from a template vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no folder: /testvms name: testvm_2 state: poweredon template: template_el7 disk: - size_gb: 10 type: thin datastore: g73_datastore hardware: memory_mb: 512 num_cpus: 6 num_cpu_cores_per_socket: 3 scsi: paravirtual memory_reservation: 512 memory_reservation_lock: True mem_limit: 8096 mem_reservation: 4096 cpu_limit: 8096 cpu_reservation: 4096 max_connections: 5 hotadd_cpu: True hotremove_cpu: True hotadd_memory: False version: 12 # Hardware version of virtual machine boot_firmware: "efi" cdrom: type: iso iso_path: "[datastore1] livecd.iso" networks: - name: VM Network mac: aa:bb:dd:aa:00:14 wait_for_ip_address: yes delegate_to: localhost register: deploy
citius
всем привет а можно в vars plugin получить доступ к переменным которые уже были явно определы в инвентаре? типа [all:vars] project="promo" а в плагине я потом что-то дергаю, используя содержимое project что-то не могу в доке найти, как к ним обращаться
MRY
если я поменяю - hosts: localhost то модуль не сможет создать нужную VM он же инфу берет из группы etcdtmp
Timur
Но только в версиях, начиная с 2.5