我有以下 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
我想知道如何正确地将变量写入文件
这是一个简单的语法错误。
任务是任务列表中的一个条目,在 YAML 中由
-
(破折号)指定。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 }}"
托马斯·赫希的回答是正确的。 然而,我发现这种表示不太令人困惑(我是 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
一起使用。