shell 是否将参数从.sh文件传递到.yml文件?

6qfn3psc  于 2022-12-13  发布在  Shell
关注(0)|答案(2)|浏览(258)

我是新的Ansible以及Ubuntu系统也。我想传递多个变量从.sh文件到. yml。我有计划存储所有的输入变量在一个数组中,然后传递变量一个接一个使用for循环,同时调用文件distributed-setup.yml
目前,我正在尝试传递一个变量。为此,我遵循以下步骤。
1.在执行First.sh文件时,我传递了First.sh Input.yaml之类的变量

  1. First.sh文件如下所示
echo $1
ansible-playbook distributed-setup.yml --extra-vars="v:$1" -${1:-v} | tee output.txt
  1. Distributed-setup.yml
---
- name: Executing slaves
  hosts: slave
  gather_facts: no
  vars:
      v: "{{lookup('env','v') }}"
      contents: "{{ lookup('file','/home/ubuntu/Ansible-setup/Distributed-Ubuntu-Setup/Input/Input.yaml') | from_yaml }}"
      log: "{{ contents['log'][0] }}"
      timeout: "{{ contents['ansible-timeout'][0] }}"

行中内容:我需要使用变量'v'而不是Input.yaml。
这怎么办?

70gysomp

70gysomp1#

最简单的方法之一是通过环境

someVar=value ansible-playbook ...

然后,在Ansible代码中,您可以引用ansible_env.someVar。您也可以使用export变量,而无需在同一行中定义它。
为了使您的用例更加具体:

input_yaml=/home/ubuntu/Ansible-setup/Distributed-Ubuntu-Setup/Input/Input.yaml
export input_yaml
ansible-playbook distributed-setup.yml

...并在您的Ansible文件中:

contents: "{{ lookup('file', ansible_env.input_yaml) | from_yaml }}"
2exbekwf

2exbekwf2#

下面是在其他变量中使用变量v的方法:

---
- hosts: localhost
  connection: local
  gather_facts: no
  vars:
    v: "{{ lookup('env','v') }}"
    b: "{{ lookup('file','/tmp/{{ v }}') | from_yaml }}"

  tasks:
  - name: set contents
    set_fact:
      contents: "{{ lookup('file','/tmp/{{ v }}') | from_yaml }}"

  - name: debug
    debug:
      msg: "{{ b }} == {{ contents }}"
    when: b == contents

v将获取现有环境var v的值,然后在稍后的任务中将其用于var b,以防万一创建了另一个名为contents的变量,其值为b,在本例中使用set_fact
对于测试,请执行以下操作:

$ export v=foo
$ date > /tmp/foo
$ ansible-playbook test.yml

它会将v设置为foo,然后在/tmp/foo中创建一个包含当前日期的文件(date命令的输出)

相关问题