我的主机文件定义如下。
[groupname]
server1
server2
server3
上面列表中的每个服务器都有不同的SSH用户登录。
在我的剧本中,我将根据主机名条件设置用户。
- name: setting user user1
set_fact: ssh_user='user1'
when: "{{ inventory_hostname }}" == 'server1'
- name: setting user user2
set_fact: ssh_user='user2'
when: "{{ inventory_hostname }}" == 'server2'
- name: setting user user3
set_fact: ssh_user='user3'
when: "{{ inventory_hostname }}" == 'server3'
但是这不能按预期工作,并且总是抛出语法错误,但是yaml有效。
正在寻找一些建议。
以下是执行剧本时引发的错误
ERROR! Syntax Error while loading YAML.
The error appears to have been in '/var/lib/awx/projects/_2573__sample/mysample.yml': line 6, column 36, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
set_fact: ssh_user='user1'
when: "{{ inventory_hostname }}" == 'server1'
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value.
答案 0 :(得分:1)
任务中的when
子句不应该是jinja2扩展的var。使用
when: inventory_hostname == 'somehost'
此外,关于我之前的评论,没有必要像在游戏手册中那样为这样的变量设置事实。您应该在库存级别设置此设置,这样您就不必为使用的任何剧本而烦恼。您有几种选择。如果您想坚持使用ini风格的广告资源,可以这样做:
[groupname]
server1 ansible_user=user1
server2 ansible_user=user2
server3 ansible_user=user3
您还可以使用yaml进行库存,或在单独的文件(在host_vars/<hostname>.yml
中声明主机变量)。您应该read the doc about inventories熟悉这些概念。