Использование Vars вместе с шаблоном в Ansible - PullRequest
0 голосов
/ 24 октября 2018

Я немного сбит с толку, когда пытаюсь использовать предопределенные переменные в моем шаблоне.Я хочу, чтобы мой файл template.xml содержал правильную информацию, уже определенную в файле vars yaml.

Например, для каждого namevm будут иметь каждый шаблон, который уже содержит каждую информацию, определенную в файле vars.Но, к сожалению, когда я запускаю свой playbook, я получаю следующее сообщение об ошибке, что переменная 'vmname' не определена, в чем я запутался.

Знаете ли вы, какую часть я пропустил?

TASK [createvm : modify db template] ********************************************
fatal: [127.0.0.1]: FAILED! => {
  "msg": "The task includes an option with an undefined variable. The error was : 'list object' has no attribute 'vmname'. The offending line appears to be:\n\n\n- name: modify db template\n  ^ here\n" }

Как выглядит моя пьеса:

 - name: Prepare DB component
   hosts: 127.0.0.1
   connection: local
   roles:
     - { role: "createvm" }

Как выглядят мои роли / createvm / tasks / main.yml:

- name: modify db template
  template:
    src: template.xml
    dest: /home/synthesizer/{{ settings.vmname }}.xml
  vars:
    settings: "{{ dbserver }}"

- name: modify loadbalancer template
  template:
    src: template.xml
    dest: /home/synthesizer/{{ settings.vmname }}.xml
  vars:
    settings: "{{ loadbalancer }}"

- name: modify forwarder template
  template:
    src: template.xml
    dest: /home/synthesizer/{{ settings.vmname }}.xml
  vars:
    settings: "{{ forwarder }}"

Это роли / createvm / vars /main.yml выглядит так:

loadbalancer:
  - vmname: elbi1
    memory: 1024
    cpu: 2
  - vmname: elbi2
    memory: 2048
    cpu: 3
forwarder:
  - vmname: efwe1
    memory: 1024
    cpu: 1
  - vmname: efwe2
    memory: 4096
    cpu: 3
dbserver:
  - vmname: dibi1
    memory: 1024
    cpu: 3
  - vmname: dibi2
    memory: 2048
    cpu: 1

И, наконец, так выглядит моя роль / createvm / templates / templates.xml:

<name>{{settings.vmname}}</name>
<memory unit='KiB'>{{settings.memory}}</memory>
<vcpu placement='static'>{{settings.cpu}}</vcpu>

1 Ответ

0 голосов
/ 24 октября 2018

Чтобы просмотреть список переменных, вам нужно использовать модуль loop, чтобы вы могли получить доступ к отдельным элементам списка с помощью оператора точки, который вы используете в настоящее время.

Вам придется изменитьваш tasks/main.yml как:

---
- name: modify db template
  template:
    src: template.xml
    dest: "/home/synthesizer/ {{ db.vmname }}.xml"
  loop: "{{ dbserver }}"
  loop_control:
    loop_var: db

- name: modify loadbalancer template
  template:
    src: template.xml
    dest: "/home/synthesizer/{{ lb.vmname }}.xml"
  loop: "{{ loadbalancer }}"
  loop_control:
    loop_var: lb

- name: modify forwarder template
  template:
    src: template.xml
    dest: "/home/synthesizer/{{ fw.vmname }}.xml"
  loop: "{{ forwarder }}"
  loop_control:
    loop_var: fw

Теперь, используя это, вы можете просматривать отдельные списки переменных.Надеюсь, это поможет!

...