[英]Set of environment for next using in Ansible playbook
我有一個帶有一些配置的文件:
org.jitsi.videobridge.xmpp.user.shard-2.HOSTNAME=localhost
org.jitsi.videobridge.xmpp.user.shard-2.DOMAIN=auth.js.name.com
org.jitsi.videobridge.xmpp.user.shard-2.USERNAME=rrr
org.jitsi.videobridge.xmpp.user.shard-2.PASSWORD=ENrewqsd
org.jitsi.videobridge.xmpp.user.shard-2.MUC_JIDS=JvbBrewery@internal.auth.js.name.com
org.jitsi.videobridge.xmpp.user.shard-2.MUC_NICKNAME=28bjrkd046-5891-bc2a-c6426a58966r4
在我的下一本劇本中,我想使用 env。 {siguiente_shard}
更改分片服務器的數量(shard-3、shard-4 等)為此我有一些 shell 命令:
siguiente_shard=$(expr 1 + $(grep 'shard-' /etc/jitsi/videobridge/sip-communicator.properties | awk -F '.' '{print $6}' |uniq | sort | tail -n1 | cut -d '-' -f2 | xargs printf "%d" ))
我有一本劇本:
---
- hosts: jitsi
become: true
tasks:
- name: Next number of shard script
shell: siguiente_shard=$(expr 1 + $(grep 'shard-' /etc/jitsi/videobridge/sip-communicator.properties | awk -F '.' '{print $6}' |uniq | sort | tail -n1 | cut -d '-' -f2 | xargs printf "%d" ))
register: siguiente_shard
- debug:
var: "{{ siguiente_shard.stdout }}"
- name: Echo my_env_var
shell: echo $siguiente_shard
environment:
siguiente_shard_env: siguiente_shard.stdout
register: siguiente_shard
- debug:
var: "{{ siguiente_shard.stdout }}"
但得到錯誤:
fatal: [jitsi]: FAILED! => {"msg": "template error while templating string: Expected an expression, got 'end of print statement'. String: {{}}"}
我如何在劇本中設置環境siguiente_shard
以便將來在文件/roles/Jitsi/vars/main.yaml
使用它
你能幫我提供建議嗎...謝謝!
這是因為你有一個錯誤和一個錯誤的模塊使用; 我們將從錯誤的模塊使用開始,因為這是您的具體問題:
var:
用於——顧名思義——變量名或表達式。 如果您想做自己的 jinja2 表達式,那么msg:
更接近您要查找的內容
您得到的確切錯誤是因為沒有.stdout
內容,因此"{{ siguiente_shard.stdout }}"
解析為""
,但是(無論好壞) var:
of debug:
實際上是實現的你寫了msg: "{{ var }}"
所以這個片段:
- debug:
var: "{{ siguiente_shard.stdout }}"
實際上是這個片段
- debug:
msg: "{{ }}"
這是非法的 jinja2,因此是您的錯誤消息。
修復方法是刪除 jinja2 胡子,或將var:
更改為msg:
然后,與此相關的 bug 是因為您在shell:
分配了一個shell變量,這是在 shell 中做的非常好的和合法的事情 - 但它不發出output 。 因此, register:
按照它的指示執行並存儲了來自您的 shell 操作的標准輸出,但沒有任何
因此,您可能想要的是:
- name: Next number of shard script
shell: expr 1 + $(grep 'shard-' /etc/jitsi/videobridge/sip-communicator.properties | awk -F '.' '{print $6}' |uniq | sort | tail -n1 | cut -d '-' -f2 | xargs printf "%d" )
register: siguiente_shard
...撇開在 ansible 中使用這樣一個怪物 shell 管道確實不是 ansible 思考世界的方式,而且你擁有的“動態”碎片碰撞邏輯使你的劇本的冪等性處於危險之中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.