如何运行序列化的任务

时间:2018-10-27 18:37:07

标签: shell dictionary ansible with-statement

我处于一种奇怪的情况,我无法缠住我的头。

我收集了一些具有某些属性的水果, 同时,我正在注册一个变量,然后尝试在第二个任务中同时打印它们。

如果我为每个水果运行序列化的任务1和2,我的问题就会解决,但是,!第一项任务是在继续执行任务2之前将所有水果收集为对象列表。

vars:
  fruit:
     - name: banana
       color: yellow

     - name: apple
       color: green

     - name: tomato:
       color: red

tasks:
  - name: Task 1 - Get my hostname
    shell: "hostname -f"
    register: variable

  - name: Task 2 - print my hostname and the fruit

    debug: 
      msg: "hostname.stdout has value {{ variable.stdout }}, the fruits got is: {{ fruit.name }}"

现在,我不确定在上述情况下应该选择哪种“ with_”循环。

fruit是字典,键值对。 “ variable.stdout”不确定这是哪种对象类型,因为我们有3个水果对象,所以.stdout现在包含我们在此处运行的shell命令的3个结果:

ok: [localhost] => {
    "variable": {
        "changed": true, 
        "cmd": "hostname -f", 
        "delta": "0:00:00.008597", 
        "end": "2018-10-27 13:37:00.123456", 
        "rc": 0, 
        "end": "2018-10-27 13:37:01.123456", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "pinapplepie.my.lan.domain", 
        "stdout_lines": [
            "pinapplepie.my.lan.domain", 
        ]
    }
}
  1. 如何序列化运行任务?
  2. 我应该使用哪个“ with_”循环?

感谢您的宝贵时间。 非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以像这样进行迭代(请注意,水果不是字典,而是字典列表):

---
- name: test
  hosts: localhost
  vars:
    fruit:
       - name: banana
         color: yellow

       - name: apple
         color: green

       - name: tomato
         color: red

  tasks:
    - name: Task 1 - Get my hostname
      shell: "hostname -f"
      register: variable

    - name: Task 2 - print my hostname and the fruit
      debug: 
        msg: "hostname.stdout has value {{ variable.stdout }}, the fruits got is: {{ item.name }}"
      with_items: "{{ fruit }}"