Variables 无法根据Ansible中的条件设置_事实变量
应根据{{command_result.stdout.split('\t')[1]}的输出为MYUSER分配值“wsadm”或“user1” 我尝试了下面的方法,但在运行时出现了错误 我的剧本如下所示:Variables 无法根据Ansible中的条件设置_事实变量,variables,ansible,conditional-statements,Variables,Ansible,Conditional Statements,应根据{{command_result.stdout.split('\t')[1]}的输出为MYUSER分配值“wsadm”或“user1” 我尝试了下面的方法,但在运行时出现了错误 我的剧本如下所示: --- - name: "Play 1-Find the details here" hosts: localhost gather_facts: no tasks: - name: "Search for {{ Number }} in the database"
---
- name: "Play 1-Find the details here"
hosts: localhost
gather_facts: no
tasks:
- name: "Search for {{ Number }} in the database"
command: >
mysql --user=root --password=mypass deployment
--host=localhost -Ns -e "SELECT dest_ip,layer FROM deploy_dets WHERE num LIKE '{{ Number }}'"
register: command_result
- set_fact:
dest_ip: "{{ command_result.stdout.split('\t')[0] }}"
MYUSER: "wsadm"
when: {{ command_result.stdout.split('\t')[1] }} == 'WAS'
MYUSER: "user1"
when: {{ command_result.stdout.split('\t')[1] }} == 'APP'
- name: "Print output for Number Search"
debug:
msg: "{{ command_result.stdout.split('\t')[1] }}"
msg: "{{ MYUSER }}"
错误输出:
[警告]:提供的主机列表为空,只有本地主机可用。
请注意,隐式localhost与“all”错误不匹配!语法
加载YAML时出错。找不到预期的密钥,因此出现错误
似乎在
“/app/axmw/Ansible/playbook/finacle_deployment/assignvars.yml”:行
22,第57列,但可能位于文件的其他位置,具体取决于
语法问题。令人不快的一行似乎是:
我的用户:“wsadm”
当:“{command_result.stdout.split('\t')[1]}}”=='WAS'
^在这里我们可能是错的,但这一个看起来可能是一个问题
缺少引号。当模板表达式使用括号时,请始终引用括号
开始一个值
我也尝试了以下方法,但也没有帮助:
第一:
MYUSER: "wsadm"
when: "{{ command_result.stdout.split('\t')[1] }}" == 'WAS'
MYUSER: "user1"
when: "{{ command_result.stdout.split('\t')[1] }}" == 'APP'
第二:
MYUSER: "wsadm"
when: command_result.stdout.split('\t')[1] == 'WAS'
MYUSER: "user1"
when: command_result.stdout.split('\t')[1] == 'APP'
第三:
layer: "{{ command_result.stdout.split('\t')[1] }}"
MYUSER: "wsadm"
when: layer == 'WAS'
MYUSER: "user1"
when: layer == 'APP'
我正在使用ansible的最新版本
你能推荐一下吗?试试这个
when: "command_result.stdout.split('\t')[1] == 'APP'"
确保命令\u result.stdout.split('\t')[1]
提供您真正需要的内容
- debug:
msg: "{{ command_result.stdout.split('\t')[1] }}"
您有与库存文件相关的错误,如下面的错误所示 [警告]:提供的主机列表为空,只有本地主机可用。 请注意,隐式localhost与“all”错误不匹配!语法 加载YAML时出错 此外,您的ansible playbook中存在语法错误,这一错误很明显 出现问题的行似乎是:MYUSER:“wsadm”when::{{ 命令\u result.stdout.split('\t'[1]}}“==”WAS'^ 我想提醒您的第一件事是,当条件为时,我们应该避免在
中使用jinja2模板
我已经为您编写了一个小剧本,它接受一个变量并根据\t
将其拆分,并且适合您的用例
---
- hosts: localhost
gather_facts: no
vars:
- user: "user: WAS"
tasks:
- debug:
msg: "{{ user }}"
- set_fact:
MYUSER: "wsadm"
when: user.split('\t')[1] == "WAS"
- debug:
msg: "{{ MYUSER }}"
输出
TASK [debug] *********************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "user:\tWAS"
}
Saturday 07 September 2019 06:57:29 +0000 (0:00:00.081) 0:00:00.218 ****
TASK [set_fact] ******************************************************************************************************************************************************************
ok: [localhost]
Saturday 07 September 2019 06:57:29 +0000 (0:00:00.064) 0:00:00.283 ****
TASK [debug] *********************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "wsadm"
}
还请记住,首先检查您是否在试图拆分的变量中得到了正确的值,正如@Vladimir Botka所建议的那样
希望能有帮助