Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash脚本的Ansible |变量声明_Ansible - Fatal编程技术网

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,并获取我的变量。