Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 无法根据Ansible中的条件设置_事实变量_Variables_Ansible_Conditional Statements - Fatal编程技术网

Variables 无法根据Ansible中的条件设置_事实变量

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"

应根据{{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与“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所建议的那样

希望能有帮助