Ansible | bash脚本的变量声明

时间:2019-09-11 20:31:23

标签: ansible

我在files下有一个bash脚本,该脚本需要一个变量来从default \ main1.yml传递。我该怎么声明呢?

roles
  config
    defaults
      main1.yml
    files
      script.sh
    tasks
      main2.yml

defaults \ main1.yml

log_group_name: "{{ lookup('env','LOG_GROUP') }}"

script.sh

for NAME in $(ls -1p /home/ec2-user/ |grep -v "^_" | grep -v "/$" |cut -d. -f1);
do
if ! grep $NAME /etc/awslogs/awslogs.conf;
then    
sudo tee -a /etc/awslogs/awslogs.conf << END
[$DAGNAME]
datetime_format = %b %d %H:%M:%S
file = /var/log/airflow/$NAME/*/*/*.log
buffer_duration = 5000
log_stream_name = $NAME
initial_position = start_of_file
log_group_name = ${log_group_name}
END
fi
done
sudo service awslogsd start
sudo systemctl enable awslogsd

task / cloud.yml

---

- name: 'Cloud | AWSlogs.conf file'
  when: inventory_hostname == 'master'
  script: ../files/cloud.sh

- name: 'Cloud | AWSlogs.conf file'
  when: inventory_hostname == 'worker_1'
  script: ../files/cloud.sh

可执行播放的命令:-deploy.py

execute(['sudo', '-E', 'ansible-playbook', 'ansible/plays/deploy.yml', '-i', 'hosts.yml'],
                stdout=sys.stdout, stderr=sys.stderr, env=aug_env)

3 个答案:

答案 0 :(得分:0)

看看是否可行-

- hosts: localhost
  tasks:
    - shell: "script.sh {{ log_group_name }}"

答案 1 :(得分:0)

您需要在脚本的执行环境中设置变量,但是由于您将其从ENV中拉出,因此变量显然已经存在,因此您甚至不需要这样做。如果这样做,则可以通过Ansible模板模块安装脚本并以这种方式执行脚本。

https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html

答案 2 :(得分:0)

只需使用脚本的参数

script.sh

log_group_name=$1
...

并使用参数运行脚本

roles / config / tasks / main2.yml

- command: "{{ role_path }}/files/script.sh {{ log_group_name }}"

您可能知道,但是请确保。这仅适用于“ localhost”。在其他情况下,必须先将脚本复制到“远程主机”,并且必须更改脚本的路径。