Ansible playbook 下一次使用的环境集
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 }' |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 }' |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: {{}}"}
我如何在 playbook 中设置环境 siguiente_shard
以便将来在文件 /roles/Jitsi/vars/main.yaml
中使用它
你能帮我出出主意吗...谢谢!
是因为你有一个bug,一个错误的模块使用;我们将从错误的模块使用开始,因为这是您的具体问题:
var:
是——顾名思义——变量名或表达式。如果你想做你自己的 jinja2 表达式,那么 msg:
更接近你正在寻找的东西
您得到的确切错误是因为没有 .stdout
内容,因此 "{{ siguiente_shard.stdout }}"
解析为 ""
,但是(无论好坏)var:
的 debug:
实际上是像你写了 msg: "{{ var }}"
一样实现的,因此这个片段:
- debug:
var: "{{ siguiente_shard.stdout }}"
实际上是这个片段
- debug:
msg: "{{ }}"
这是非法的 jinja2,因此是您的错误消息。
解决方法是移除 jinja2 胡须,或将 var:
更改为 msg:
然后就是bug,跟那个有关,是因为你在shell:
里赋值了shell变量,完全没问题在 shell 中做合法的事情——但它发出 无输出 。因此,register:
按照指示执行并存储了来自 shell 操作的标准输出,但没有任何
因此,您可能想要的是:
- name: Next number of shard script
shell: expr 1 + $(grep 'shard-' /etc/jitsi/videobridge/sip-communicator.properties | awk -F '.' '{print }' |uniq | sort | tail -n1 | cut -d '-' -f2 | xargs printf "%d" )
register: siguiente_shard
...抛开在 ansible 中使用这样一个怪物 shell 管道真的不是 ansible 思考世界的方式,而且你拥有的“动态”分片碰撞逻辑放置了幂等性你的剧本有风险
我有一个配置文件:
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 }' |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 }' |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: {{}}"}
我如何在 playbook 中设置环境 siguiente_shard
以便将来在文件 /roles/Jitsi/vars/main.yaml
你能帮我出出主意吗...谢谢!
是因为你有一个bug,一个错误的模块使用;我们将从错误的模块使用开始,因为这是您的具体问题:
var:
是——顾名思义——变量名或表达式。如果你想做你自己的 jinja2 表达式,那么 msg:
更接近你正在寻找的东西
您得到的确切错误是因为没有 .stdout
内容,因此 "{{ siguiente_shard.stdout }}"
解析为 ""
,但是(无论好坏)var:
的 debug:
实际上是像你写了 msg: "{{ var }}"
一样实现的,因此这个片段:
- debug:
var: "{{ siguiente_shard.stdout }}"
实际上是这个片段
- debug:
msg: "{{ }}"
这是非法的 jinja2,因此是您的错误消息。
解决方法是移除 jinja2 胡须,或将 var:
更改为 msg:
然后就是bug,跟那个有关,是因为你在shell:
里赋值了shell变量,完全没问题在 shell 中做合法的事情——但它发出 无输出 。因此,register:
按照指示执行并存储了来自 shell 操作的标准输出,但没有任何
因此,您可能想要的是:
- name: Next number of shard script
shell: expr 1 + $(grep 'shard-' /etc/jitsi/videobridge/sip-communicator.properties | awk -F '.' '{print }' |uniq | sort | tail -n1 | cut -d '-' -f2 | xargs printf "%d" )
register: siguiente_shard
...抛开在 ansible 中使用这样一个怪物 shell 管道真的不是 ansible 思考世界的方式,而且你拥有的“动态”分片碰撞逻辑放置了幂等性你的剧本有风险