我在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)
答案 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”。在其他情况下,必须先将脚本复制到“远程主机”,并且必须更改脚本的路径。