分配ssh用户取决于Ansible中主机文件中提到的主机名

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

我的主机文件定义如下。

[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是有效的。

寻找一些建议。

下面是playbook执行时抛出的错误,

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.
ansible ansible-inventory
1个回答
1
投票

任务中的when子句不应该是jinja2扩展变量。使用

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熟悉这些概念。

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