我希望通過 ansible playbook 運行以下 shell 腳本。
#!/bin/bash
oci compute instance list --lifecycle-state RUNNING --region ca-toronto-1 --compartment-id < compartment OCID> --all | grep display-name -A 0 > hostnames.txt
for line in `cat hostnames.txt`
do
#echo $line
if [[ $line == *","* ]]; then
# hostname=$(echo ${line//"display-name"/} | tr -d '",: ')
hostname=$(echo "$line" | tr -d '",')
echo "$hostname"
ssh -tt "$hostname" "sudo puppet agent -tv && sleep 10"
# break
fi
done
這就像我在運行 shell 腳本時想要的那樣作業,但是當我通過 ansible 運行時我得到一個空白輸出。劇本:
---
- name: puppet agent trigger
gather_facts: false
become_user: true
hosts: all
tasks:
- name: trigger puppet agent
shell: |
oci compute instance list --lifecycle-state RUNNING --region ca-toronto-1 --compartment-id <compartment OCID> --all | grep display-name -A 0 > hostnames.txt
for line in `cat hostnames.txt`
do
if [[ $line == *","* ]]; then
hostname=$(echo "$line" | tr -d '",')
echo "$hostname"
ssh -tt "$hostname" "sudo puppet agent -tv && sleep 10"
fi
done
register: shell_output
- debug:
msg: "{{ shell_output.stdout }}"
請指出我缺少什么。
uj5u.com熱心網友回復:
根據您的用例的描述,似乎建議將腳本的整個邏輯轉移到 Ansible 本身。為此,對于關于add_host_module的評論,您可以使用類似的方法
- name: Create an instance list
shell:
cmd: oc get nodes --no-headers | cut -d " " -f 1 | tr '\n' "," | rev | cut -c 2- | rev
register: instance_list
changed_when: false
為了生成instance_list我以 OpenShift 集群為例,因為我沒有類似oci compute instance list ...可訪問的東西。
- name: Add all hosts from instance_list to the script group
add_host:
name: '{{ item }}'
groups: script
loop: "{{ instance_list }}"
從那里您可以繼續執行您的命令puppet agent -tv && sleep 10。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/406095.html
標籤:
上一篇:包含git的搜索手冊
