簡體   English   中英

在 shell 腳本中使用多行變量進行 Ansible

[英]Ansible with multiline variables in shell script

這可能看起來很奇怪,但我正在嘗試創建 2 個 shell 腳本,一個帶有我可以獲取的變量,另一個帶有要運行的函數。

核心變量

#/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
)

安裝腳本.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

但是當你執行安裝腳本時,ansible 會抱怨帶有 extra-args 的文件

playbook not found ../ansible/provision.yml --skip-tags "postgresql-slave,log-es"

想想,這和我傳遞文件的方式有關。 卻想不通。 偉大的頭腦請... :)

你會嘗試以下方法嗎:

安裝腳本.sh

#!/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"

現在選項行被正確地拆分為帶有declare語句的標記數組。

問題出在IFS 當您不希望../ansible/provision.yml --skip-tags "postgresql-slave,log-es"成為一個長文件名時,您需要空格。
使用for-loop逐行處理變量並for-loop空格變得困難。
嘗試這個:

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}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM