将Ansible变量从一个角色(在一个主机上运行)传递到在同一个playbook中的另一个主机上运行的另一个角色

ady*_*531 8 variables roles ansible ansible-playbook

我有一个在不同主机上运行不同角色的剧本.是否可以将变量从一个主机上运行的一个角色传递到同一个playbook运行中运行的另一个主机上的另一个角色?或任何解决方法?

playbook
   host1
     role1
       here I get some variables: var1 var2 ...etc
   host2
     role2
       here I need to use var1 var2 ... etc from the above host/role
Run Code Online (Sandbox Code Playgroud)

role1中设置teh变量的任务db如下所示:

- shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}'
  register: db
Run Code Online (Sandbox Code Playgroud)

更新:在第一台主机上,值是动态的,它就像一个始终更新的配置文件.在我使用role1将值存储在host1上的变量之后,然后移动到host2,运行role2并使用host1存储的变量对这些值进行处理.

我尝试使用hostvars:

{{ hostvars.LBL.db.stdout }}
{{ hostvars['LBL']['db'] }}
{{ hostvars['LBL']['db']['stdout'] }}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

in get_variables raise Exception("host not found: %s" % hostname) Exception: host not found: LBL
Run Code Online (Sandbox Code Playgroud)

LBL存在于主机中,我运行第一个角色

我在一台主机上设置了一个变量,我希望该变量可供其他主机使用.所有这些都在一本剧本中.可以吗?

hostvars不能像这样使用它:

---   
- name: test hostvars host1
  hosts: LBL
  tasks:
    - command: "ls /bin"
        register: ls_out

- name: test hostvars host2
  hosts: LM
  tasks:
    - debug:
        var: "{{ hostvars['LBL']['ls_out']['stdout'] }}"
Run Code Online (Sandbox Code Playgroud)

错误:

fatal: [10.104.148.138] => host not found: LBL
Run Code Online (Sandbox Code Playgroud)

的/ etc/ansible /主机

[root@NS1 ansible]# cat /etc/ansible/hosts
[LBL]
10.104.148.136
[LM]
10.104.148.138
Run Code Online (Sandbox Code Playgroud)

Geo*_*lin 12

这个主题很复杂,根据你的需要,有两个不同的答案.

从一个剧本访问变量到同一主机的其他剧本

例:

---
- hosts: host1
- roles:
    - role1
    - role2
Run Code Online (Sandbox Code Playgroud)

目标:您想要从role2中的role1访问一些变量.

使用set_fact模块.

内部角色1:

name: save precious value
set_fact: 
  pantsu: shiroi
Run Code Online (Sandbox Code Playgroud)

内部角色2:

name: Nozoki...
debug: msg="Color is {{ pantsu }}"
Run Code Online (Sandbox Code Playgroud)

访问一个主机(或组)的静态变量到其他主机

例:

[group_foo]
host1
host2
[group_bar]
host3
host4
Run Code Online (Sandbox Code Playgroud)

group_vars/group_foo

important_value=bla-bla-ba
Run Code Online (Sandbox Code Playgroud)

目标:您想在playbook中将它用于group2.

这是非常棘手的事情.

在group_vars/group_bar中

other_var: '{{hostvars[groups["group_foo"][0]].important_value}}'
Run Code Online (Sandbox Code Playgroud)

您可以使用"0"以外的其他索引.

  • 感谢您就如何偷看Shiroi长裤提出了明确的建议。:P (2认同)

Kas*_*yap 6

问题出在您的库存中.

这条信息:

fatal: [10.104.148.138] => host not found: LBL
Run Code Online (Sandbox Code Playgroud)

是因为LBL是一个群体而不是主人.集团中LBL有一个主机:10.104.148.136

执行以下操作之一:

1.将您的库存(/etc/ansible/hosts)更改为:

LBL ansible_ssh_host=10.104.148.136
LM ansible_ssh_host=10.104.148.138
Run Code Online (Sandbox Code Playgroud)

2.或者如果你真的知道你正在做什么并且LBL是一个小组,你想保持这种方式,那么访问变量:

{{ hostvars['10.104.148.136']['db']['stdout'] }}
Run Code Online (Sandbox Code Playgroud)

同样,LBL是一个不是主持人的群体.更多信息.