如何在Ansible中将shell输出设置为变量

时间:2020-07-19 12:20:12

标签: ansible

我需要将shell的输出输出到set_factansible的变量中。并且此变量在同一playbook中的某个位置被引用,但定位到另一组主机

但是我不确定该怎么做。

这是我的playbook

---
- 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}}

但是我不知道这些:

1。如何将Shell命令输出输出到set_fact中的变量并在某处引用

2。是否可以有多个主机(如以上剧本所示)

1 个答案:

答案 0 :(得分:1)

我将通过以下方式进行操作:

---
- 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_fact仅在执行它的主机上设置一个变量。由于您有一个kube-master组,因此可以在每个组上执行。我在Kubernetes-Masters的一本剧本中遇到了相同的问题,我将其中一个用作“主要”等式。 master01。然后echo hi将仅在该命令上执行。

在第二个主机组中,您必须像master01一样引用kube-master主机的hostvar。

您是否需要运行kube-master组中的所有主机?