如何在ansible中将shell输出设置为变量
我需要在如何在ansible中将shell输出设置为变量,ansible,Ansible,我需要在ansible中的set\u fact中获取一个shell变量的输出。该变量在相同的剧本中的某处引用,但针对不同的主机集 但我不知道该怎么做 这是我的剧本: --- - hosts: kube-master tasks: - name: Print the value become: true shell: | echo "hi" set_fact: banuka: <value-t
ansible
中的set\u fact
中获取一个shell
变量的输出。该变量在相同的剧本中的某处引用,但针对不同的主机集
但我不知道该怎么做
这是我的剧本
:
---
- hosts: kube-master
tasks:
- name: Print the value
become: true
shell: |
echo "hi"
set_fact:
banuka: <value-taken-from-above-shell-command>
- hosts: kube-minions
tasks:
- name: Print the variable
become: true
shell: |
echo {{banuka}}
---
-主持人:库贝大师
任务:
-名称:打印值
变成:真的
外壳:|
回音“嗨”
设定事实:
巴努卡:
-主持人:库贝部下
任务:
-名称:打印变量
变成:真的
外壳:|
回声{{banuka}
但我不知道这些:
1。如何将shell命令输出到set\u fact
中的变量并将其引用到某个地方
2。是否可以有多个主机(如上面的剧本所示)我将按以下方式执行:
---
- hosts: master01
tasks:
- name: Print the value
shell: |
echo "hi"
register: somevariablename
- name: set fact
set_fact:
myvar: "{{ somevariablename.stdout }}"
- hosts: kube-minions
tasks:
- name: Print the variable
shell: |
echo "{{ hostvars['master01'].myvar }}"
重要的是要理解,set\u fact
只在执行它的主机上设置一个变量。因为您有一个组kube master
,所以可以在每个组上执行。我在库伯内特斯大师的剧本中也有同样的问题,我用其中一个作为“主要”e.q.master01
。然后,echo hi
将仅在该设备上执行
在第二个主机组中,必须引用kube主主机的主机变量,如master01
您是否需要运行组中的所有主机kube-master
?主机kube-master
只有一台服务器和kube-minions
3台服务器。因此,我要做的是,从master获得join
令牌并在minions上执行。因此,我认为这样做是可能的,但问题是,当我执行kubeadm token create--print join命令时,它会打印带有警告的。那么,我怎样才能摆脱警告而只打印join
命令本身呢?您可以尝试使用过滤器:echo“{hostvars['master01'].myvar | regex_search('(foo)}}}”嗨,我尝试了上述方法,但它在hostvars['master01']中给出了一个错误。myvar
行。我根据我的更改了这一行,但仍然失败了stvars['thismostbeyourhostname']