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"以外的其他索引.
问题出在您的库存中.
这条信息:
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是一个不是主持人的群体.更多信息.