Ansible:变量/循环中的变量或遍历项目

时间:2018-07-19 23:32:40

标签: ansible

这是我们必须调试的简单vars文件 <!DOCTYPE html> <html> <body> <h2>Please choose a seat to book</h2> <form action="/action_page.php" method="post"> <input type="checkbox" name="vehicle" id="A1" value="$100">$100<br> <input type="checkbox" name="vehicle" id="A2" value="$65"> $65<br> <input type="checkbox" name="vehicle" id="A3" value="$55"> $55<br> <input type="checkbox" name="vehicle" id="A4" value="$50"> $50<br> <p id="demo"> Selected Seat(s) <br> <br> Total: USD <input type="submit" value="Reserve Now"> </form> </p> <script> document.getElementById("A1").addEventListener("click", displayCheck); function displayCheck() { document.getElementById("demo").innerHTML = ; } </script> </body> </html>

./roles/test/vars/{{ ansible_distribution|lower }}/apt-packages.yml

这是一个简单的调试任务 packages: required: - htop # - aptitude package: htop: allow_unauthenticated: no autoclean: no autoremove: no cache_valid_time: 0 # default_release: force: no force_apt_get: no install_recommends: yes only_upgrade: no purge: no state: latest update_cache: yes upgrade: no

./roles/test/tasks/main.yml

- name: "Register variable" include_vars: #dir: vars/ubuntu file: "vars/{{ ansible_distribution|lower }}/apt-packages.yml" name: apt_install - name: "This a test" apt: name: "{{item}}" cache_valid_time: "{{ apt_install.package[item].cache_valid_time }}" state: "{{ apt_install.package[item].state }}" update_cache: "{{ apt_install.package[item].update_cache }}" with_items: "{{ apt_install.packages.required }}"

./roles/test-playbook.yml

使用下面的答案stackoverflow.com/questions/29276198,我们试图遍历项目并获取与项目相关的值。

任务在各个项目中循环良好,但是无法使用- name: "playbook test" hosts: localhost roles: - role: test become: true become_user: root become_method: sudo 语法或我们测试过的任何其他语法来检索相关变量。

我们总是有相同的错误

  

致命:[localhost]:失败! => {       “ msg”:“该任务包含一个带有未定义变量的选项。错误是:dict对象没有元素[u'htop']

但是直接调用变量有效

[item]

获取变量的当前循环值并在另一个变量内使用它来检索相关值...(在同一任务内)的正确语法是什么?

到目前为止,我们一直在无止境地转转!

亲切问候

1 个答案:

答案 0 :(得分:0)

使用loop / loop_control代替with_items可以完全正常工作

- name: "This a test"
  apt:
    name: "{{item}}"
    cache_valid_time: "{{ apt_install.package[item].cache_valid_time }}"
    state: "{{ apt_install.package[item].state }}"
    update_cache: "{{ apt_install.package[item].update_cache }}"
  loop: "{{ apt_install.packages.required|flatten(levels=1) }}"
  loop_control:
    index_var: index

因此,我们可以为每个软件包和每个发行版定义不同的设置。 现在,我也可以将每个包的设置导出到不同的var文件中。

学习很困难:)