应该根据{{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"
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可用。 请注意,隐式本地主机与“所有”错误不匹配!句法 加载YAML时出错。找不到预期的密钥错误 似乎在 '/app/axmw/Ansible/playbook/finacle_deployment/assignvars.yml':第 22,第57列,但取决于确切的位置,可能在文件的其他位置 语法问题。令人反感的行似乎是: MYUSER:“ 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。
你能建议吗?
答案 0 :(得分:0)
尝试这个
when: "command_result.stdout.split('\t')[1] == 'APP'"
确保command_result.stdout.split('\t')[1]
给您您真正想要的东西
- debug:
msg: "{{ command_result.stdout.split('\t')[1] }}"
答案 1 :(得分:0)
您有与清单文件相关的错误,如以下错误所示。
[警告]:提供的主机列表为空,只有localhost可用。 请注意,隐式本地主机与“所有”错误不匹配!句法 加载YAML时出错
此外,您的ansible剧本中有语法错误,从该错误中可以明显看出。
冒犯的行似乎是:MYUSER:“ wsadm”,当:“ {{ command_result.stdout.split('\ t')[1]}}“” =='WAS'^
我首先要引起您注意的是,我们应该避免在when condition
中使用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建议的变量中是否要获取正确的值
希望有帮助。