- name: Add a line to a file if the file does not exist
ansible.builtin.lineinfile:
path: ~/.ssh/config
line: |
Host {{item.COMPONENT}} {{item.COMPONENT}}.{{ZONE}}
HostName {{r53_var_one.resource_record_sets[0].resource_records[0].value}}
User centos
Port 22
IdentityFile ~/.ssh/key.pem
StrictHostKeyChecking no
create: yes
mode: '0600'
5条答案
按热度按时间pengsaosao1#
Ansible在其剧本中使用YAML语法。YAML有许多块操作符:
>
是一个折叠块运算符。也就是说,它通过空格将多行连接在一起。语法如下:会将值
This text has multiple lines\n
赋给key
。|
字符是一个文字块运算符。这可能是多行shell脚本所需要的。语法如下:会将
This text\nhas multiple\nlines\n
赋值给key
。您可以将其用于如下多行shell脚本:
有一点需要注意:Ansible对
shell
命令的参数进行了一些笨拙的操作,因此,虽然上面的命令通常会按预期工作,但下面的命令不会:Ansible实际上会呈现带有前导空格的文本,这意味着shell永远不会在行首找到字符串
EOF
,您可以通过使用cmd
参数来避免Ansible的无用启发式:xxhby3vn2#
尝试使用ansible2.0.0.2:
shell命令被压缩为一行,如
ls --color /home
所示参考文献(2021年访问):https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html ==〉页面中的搜索表单“多行”。
qlvxas9a3#
在EOF分隔符前添加一个空格可以避免cmd:
zpf6vheq4#
我更喜欢这种语法,因为它允许设置shell的配置参数:
nkkqxpd95#
您可以使用lineinfile集合附加文件,使用属性create创建文件(如果不存在),使用"|".