如何在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']