我是Ansible以及Ubuntu系统的新手。我想将.sh文件中的多个变量传递给.yml。我计划将所有输入变量存储在一个数组中,然后在调用文件distributed-setup.yml
时使用for循环逐个传递变量。
目前,我正在尝试传递变量。为此,我遵循以下步骤。
执行First.sh
文件时,我传递的变量如First.sh Input.yaml
First.sh
文件就像这样
echo $1
ansible-playbook distributed-setup.yml --extra-vars="v:$1" -${1:-v} | tee output.txt
分布式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。
怎么做?
答案 0 :(得分:0)
最简单的方法之一是通过环境
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 }}"
答案 1 :(得分:0)
这是您可以在其他变量中使用变量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
的变量在这种情况下使用set_fact
b
进行测试:
$ export v=foo
$ date > /tmp/foo
$ ansible-playbook test.yml
它会将v
设置为foo
,然后在/tmp/foo
中创建一个文件,其中包含当前日期(date
命令的输出)