首页 > 解决方案 > 稳定 | bash 脚本的变量声明

问题描述

我有一个 bash 脚本,在该脚本下files需要一个从 default\main1.yml 传递的变量。我怎样才能声明相同?

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

默认值\main1.yml

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

脚本.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

任务/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

ansible 命令执行播放:- deploy.py

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

标签: ansible

解决方案


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

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


推荐阅读