ansible 将变量写入本地文件

问题描述 投票:0回答:2

我有以下 ansible 剧本,它将变量“hello”的内容写入作为消息(我从在线示例中获得了此代码)。我尝试修改它,以便将其写入本地文件,但出现错误。修改后的代码和错误信息如下:

原代码(成功):

- hosts: all
  vars:
    hello: world
  tasks:
  - name: Ansible Basic Variable Example
    debug:
      msg: "{{ hello }}"

修改代码(不成功):

- hosts: all
  vars:
    hello: world
  tasks:
  - name: Ansible Basic Variable Example
  - local_action: copy content={{hello}} dest=~/ansible_logfile
    debug:
      msg: "{{ hello }}"

错误信息:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in '/space/mathewLewis/towerCodeDeploy/playBooks/test.yml': line 5, column 5, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
      - name: Ansible Basic Variable Example
    ^ here

我想知道如何正确地将变量写入文件

ansible
2个回答
2
投票

这是一个简单的语法错误。
任务是任务列表中的一个条目,在 YAML 中由

-
(破折号)指定。
任务名称在 Ansible 中是可选的。
copy
debug
都是模块,应该是任务的“动作”。
错误消息告诉您的是带有
name: Ansible Basic Variable Example
的任务没有操作,这是因为您的
local_action
是一个单独的任务,由
-
指示。

使用适当的任务名称修复示例:

  - name: Write variable to file
    local_action: copy content="{{hello}}" dest=~/ansible_logfile

  - name: Output the variable
    debug:
      msg: "{{ hello }}"

0
投票

托马斯·赫希的回答是正确的。 然而,我发现这种表示不太令人困惑(我是 ansible 的新手):

- name: "Controller"
  hosts: "controller.jeff.ddns.net"
  tasks:
    - name: "Register a variable to be shared with the clients"
      set_fact: shared_fact="Brother"

- name: "Client"
  hosts: "client.jeff.ddns.net"
  tasks:
    - name: "writing to hostvars.json"
      local_action: copy content="{{hostvars | to_json(indent=4) }}" dest="hostvars.json"

这个例子有两个剧本。 控制器播放仅设置一个变量。 客户端才是实际写入文件的地方。 在这种情况下,hostvars 的结构很复杂,所以我使用

to_json(indent=4)
过滤器转换为良好的
.json
文件,适合与
jq
一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.