Linux 在shell脚本中使用多行变量进行Ansible
这可能看起来很奇怪,但我正在尝试创建两个shell脚本,一个带有我可以获取的变量,另一个带有要运行的函数 core.varsLinux 在shell脚本中使用多行变量进行Ansible,linux,bash,shell,ansible,devops,Linux,Bash,Shell,Ansible,Devops,这可能看起来很奇怪,但我正在尝试创建两个shell脚本,一个带有我可以获取的变量,另一个带有要运行的函数 core.vars #/bin/bash # list of playbooks to source # Core db initialization playbooks core_db_init_play_books=$(cat <<EOL ../ansible/test.yaml -e "val1=hi val2=by" ../ansible/provision.yml
#/bin/bash
# list of playbooks to source
# Core db initialization playbooks
core_db_init_play_books=$(cat <<EOL
../ansible/test.yaml -e "val1=hi val2=by"
../ansible/provision.yml --skip-tags "postgresql-slave,log-es"
../ansible/postgresql-data-update.yml
../ansible/es-mapping.yml --extra-vars "indices_name=all ansible_tag=run_all_index_and_mapping"
../ansible/cassandra-deploy.yml -e "cassandra_jar_path=$ansible_path/ansible cassandra_deploy_path=/home/{{ansible_ssh_user}}" -v
EOL
)
但是当您执行安装脚本时,ansible会抱怨文件中有额外的参数
playbook未找到../ansible/provision.yml--跳过标记“postgresql从站,日志es”
想想看,这和我传递文件的方式有关。但是我想不出来。
伟大的人物请……:) 请尝试以下方法: 安装脚本.sh
#!/bin/bash
## Ansible Runner
function ansible_runner() {
playbooks=$1
local IFS=$'\n' # seperate playbooks by newline
for playbook in ${playbooks}; do
ansible-playbook -i ../ansible/inventory/env ${playbook}
done
}
source core.vars
ansible_runner core_db_init_play_books
#!/bin/bash
## Ansible Runner
ansible_runner() {
while IFS= read -r line; do
declare -a playbook="($line)" # split $line into tokens
ansible-playbook -i ../ansible/inventory/env "${playbook[@]}"
done <<< "$1"
}
source core.vars
ansible_runner "$core_db_init_play_books"
#/bin/bash
##可移动的跑步者
ansible_runner(){
当IFS=读取-r行时;执行
declare-a playbook=“($line)”#将$line拆分为令牌
ansible剧本-i../ansible/inventory/env“${playbook[@]}”
完成问题在于IFS
。如果不想。/ansible/provision.yml--请跳过标记“postgresql slave,log es”
,将其作为一个长文件名。
使用for循环
,
试试这个:
function ansible_runner() {
while IFS= read -r playbook; do
echo ansible-playbook -i ../ansible/inventory/env ${playbook}
done <<< "$1"
}
ansible_runner "${core_db_init_play_books}"
函数ansible\u runner(){
当IFS=read-r剧本时;执行
echo ansible剧本-i../ansible/inventory/env${playbook}
完成,谢谢你的评论。但即使这样也不能解决问题。现在每个单词(考虑空格)都是一个条目(带引号的字符串都是一个).但是我们如何将整行内容传递给ansible?@RajeshRajendran感谢您的及时反馈。很抱歉我的回答不完整。现在我希望我已经正确理解了要求。请尝试我的更新答案好吗?BR.嗨,再次感谢您的更新。不过有点小问题,+ansible playbook-I../ansible/inventory/env../ansible/test.yaml-e'“val1=hi”“val2=by”“
。正因为如此,现在将得到未定义的变量。很抱歉给您带来不便。我已通过删除周围的引号更新了core.vars
。请您再试一次好吗?感谢您的帮助。但我们的想法是将语法与ansible保持内联,以便任何人都可以附加一个包含大量变量的剧本,并且应该ld工作。因此,我认为过度定制会带来更大的危害。最后一行缺少一个$
。我认为这是一个打字错误,因为您确实收到了一条包含变量数据的错误消息。