Ansible在单个任务中注册多个变量

时间:2017-10-06 15:03:58

标签: ansible

我有一个ansible任务,我想在其中注册多个变量,我该如何实现?列表或逗号分隔的字符串似乎不起作用。

我想做这样的事情:

- name: my task
  module_name:
    <some more params>
  register: [var1, var2]

如果我添加register: var1 \n register: var2,则只会注册第二个。

编辑: 好吧,我认为我的困惑在于变量注册的工作方式。因此,当您执行register: any_var_name时,新创建的变量包含任务的整个输出。然后,您可以按照接受的答案以任何方式访问它。

2 个答案:

答案 0 :(得分:3)

不,这是不可能的。

Ansible(截至当前版本2.4)不允许注册模块的部分输出(或其几个不同部分)。

您只能注册完整结果,并在要执行的任务中提取部分结果。

例如,如果您想获得std_out模块的std_errcommand,则可以执行两项任务:

- command: myscript.sh
  register: cmd_res
- set_fact:
    std_out: "{{ cmd_res.stdout }}"
    std_err: "{{ cmd_res.stderr }}"

你不能一次性完成,如下所示:

- command: myscript.sh
  # this code does not work!
  register:
    std_out: result.stdout
    std_err: result.stderr

答案 1 :(得分:0)

为什么不能分多步完成?

 - name: my task
   module_name:
     <some more params>
   register: var1

  - set_fact:
       var2: "{{var1}}"