bash脚本的Ansible |变量声明
我在bash脚本的Ansible |变量声明,ansible,Ansible,我在files下有一个bash脚本,它需要从default\main1.yml传递一个变量。我怎样才能申报呢 roles config defaults main1.yml files script.sh tasks main2.yml 默认值\main1.yml log_group_name: "{{ lookup('env','LOG_GROUP') }}" script.sh for NAME in $(ls -1p /h
files
下有一个bash脚本,它需要从default\main1.yml传递一个变量。我怎样才能申报呢
roles
config
defaults
main1.yml
files
script.sh
tasks
main2.yml
默认值\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
log_group_name=$1
...
执行播放的ansible命令:-deploy.py
execute(['sudo', '-E', 'ansible-playbook', 'ansible/plays/deploy.yml', '-i', 'hosts.yml'],
stdout=sys.stdout, stderr=sys.stderr, env=aug_env)
看看这是否有效-
- hosts: localhost
tasks:
- shell: "script.sh {{ log_group_name }}"
您需要在脚本的执行环境中设置变量,但它显然已经存在,因为您要将它从环境中拉出,所以您甚至不需要这样做。如果您这样做了,您可以通过Ansible模板模块安装脚本并以这种方式执行脚本
只需使用脚本的参数 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
log_group_name=$1
...
并使用参数运行脚本
roles/config/tasks/main2.yml
- command: "{{ role_path }}/files/script.sh {{ log_group_name }}"
你可能知道,但只是确定一下。这只适用于“localhost”。在其他情况下,必须首先将脚本复制到“远程主机”,并且必须更改脚本的路径。您可以在调用bash脚本的位置共享任务吗?谢谢您的建议。我需要在远程主机上执行此操作。我怎样才能复制它们?此外,我还使用python调用ansible playbook,并获取我的变量。