Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Ansible:使用注册变量中的标准输出行,该变量在shell模块中使用循环_Shell_Loops_Ansible_Jboss_Stdout - Fatal编程技术网

Ansible:使用注册变量中的标准输出行,该变量在shell模块中使用循环

Ansible:使用注册变量中的标准输出行,该变量在shell模块中使用循环,shell,loops,ansible,jboss,stdout,Shell,Loops,Ansible,Jboss,Stdout,不知道这里是否有人能帮忙 我正在运行Ansible 2.10.7-下面的Ansible任务负责检查是否存在以前Ansible运行中的任何JBOSS部署 如果check_deployments.stdout_line(check_deployments.stdout_line | length==0)未返回任何内容则应部署循环中定义的所有部署。但是,如果返回的内容(检查部署.stdout\u行|长度>0)则应使用检查部署.stdout\u行内容(例如,旧部署1、旧部署2、旧部署3、旧部署4)取消部

不知道这里是否有人能帮忙

我正在运行Ansible 2.10.7-下面的Ansible任务负责检查是否存在以前Ansible运行中的任何JBOSS部署

如果check_deployments.stdout_line(check_deployments.stdout_line | length==0)未返回任何内容则应部署循环中定义的所有部署。但是,如果返回的内容(检查部署.stdout\u行|长度>0)则应使用检查部署.stdout\u行内容(例如,旧部署1、旧部署2、旧部署3、旧部署4)取消部署任何存在的内容

我目前正在一个没有部署的新服务器上运行此Ansible,因此我希望取消部署部分应该被跳过,因为check_deployments.stdout_行为空。但是,它尝试运行,但失败并出现以下错误:

TASK [app : Undeploy all existing deployments as the versions do not match deployments defined in group_vars] ************************************************************************
fatal: []: FAILED! => {"msg": "'dict object' has no attribute 'stdout_lines'"}
以下是“我的调试”的输出:

    "check_deployments": {
        "changed": true,
        "msg": "All items completed",
        "results": [
            {
                "ansible_loop_var": "item",
                "changed": true,
                "cmd": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment1",
                "delta": "0:00:02.081544",
                "end": "2021-04-28 16:12:18.448965",
                "failed": false,
                "failed_when_result": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment1",
                        "_uses_shell": true,
                        "argv": null,
                        "chdir": "/opt/jboss/jboss-eap-7.1/bin",
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "stdin_add_newline": true,
                        "strip_empty_ends": true,
                        "warn": true
                    }
                },
                "item": "deployment1",
                "msg": "non-zero return code",
                "rc": 1,
                "start": "2021-04-28 16:12:16.367421",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "",
                "stdout_lines": []
            },
            {
                "ansible_loop_var": "item",
                "changed": true,
                "cmd": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment2",
                "delta": "0:00:02.185931",
                "end": "2021-04-28 16:12:21.396740",
                "failed": false,
                "failed_when_result": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment2",
                        "_uses_shell": true,
                        "argv": null,
                        "chdir": "/opt/jboss/jboss-eap-7.1/bin",
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "stdin_add_newline": true,
                        "strip_empty_ends": true,
                        "warn": true
                    }
                },
                "item": "deployment2",
                "msg": "non-zero return code",
                "rc": 1,
                "start": "2021-04-28 16:12:19.210809",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "",
                "stdout_lines": []
            },
            {
                "ansible_loop_var": "item",
                "changed": true,
                "cmd": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment3",
                "delta": "0:00:01.938456",
                "end": "2021-04-28 16:12:24.060703",
                "failed": false,
                "failed_when_result": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment3",
                        "_uses_shell": true,
                        "argv": null,
                        "chdir": "/opt/jboss/jboss-eap-7.1/bin",
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "stdin_add_newline": true,
                        "strip_empty_ends": true,
                        "warn": true
                    }
                },
                "item": "deployment3",
                "msg": "non-zero return code",
                "rc": 1,
                "start": "2021-04-28 16:12:22.122247",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "",
                "stdout_lines": []
            },
            {
                "ansible_loop_var": "item",
                "changed": true,
                "cmd": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment4",
                "delta": "0:00:01.934429",
                "end": "2021-04-28 16:12:26.819414",
                "failed": false,
                "failed_when_result": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "./jboss-cli.sh --connect --commands='ls deployment' | grep -q deployment4",
                        "_uses_shell": true,
                        "argv": null,
                        "chdir": "/opt/jboss/jboss-eap-7.1/bin",
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "stdin_add_newline": true,
                        "strip_empty_ends": true,
                        "warn": true
                    }
                },
                "item": "deployment4",
                "msg": "non-zero return code",
                "rc": 1,
                "start": "2021-04-28 16:12:24.884985",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "",
                "stdout_lines": []
            }
        ]
    }
}
这是我的任务:

 - name: Check if the deployments defined in group_vars are already installed
  ansible.builtin.shell: "./jboss-cli.sh --connect --commands='ls deployment' | grep -q {{ item }}"
  args:
    chdir: "{{ jboss_home_dir }}/bin"
  register: check_deployments
  failed_when: check_deployments.rc == 2
  tags: # We always need to check this as the output determines whether or not we need to undeploy an existing deployment.
    - skip_ansible_lint
  loop:
 - "{{ new_deployment1 }}"
 - "{{ new_deployment2 }}"
 - "{{ new_deployment3 }}"
 - "{{ new_deployment4 }}"

 - name: Show list of deployments
  ansible.builtin.debug:
    var: check_deployments.stdout_lines

 - name: Undeploy all existing deployments as the versions do not match deployments defined in group_vars
  ansible.builtin.command: "./jboss-cli.sh --connect 'undeploy {{ item }} --all-relevant-server-groups'"
  args:
    chdir: "{{ jboss_home_dir }}/bin"
  when: check_deployments.stdout_lines | length > 0
  register: check_undeployment_status
  loop:
 - "{{ check_deployments.stdout_lines }}"

 - name: Deploy all deployments defined in group_vars
  ansible.builtin.command: "./jboss-cli.sh --connect 'deploy {{ jboss_deployment_dir }}/{{ item }} --server-groups=dm-server-group'"
  args:
    chdir: "{{ jboss_home_dir }}/bin"
  when: check_deployments.stdout_lines | length == 0 or check_undeployment_status.rc | default('') == 0
  loop:
 - "{{ new_deployment1 }}"
 - "{{ new_deployment2 }}"
 - "{{ new_deployment3 }}"
 - "{{ new_deployment4 }}"

您的剧本和给定的输出都有问题。当我构建一个没有所有依赖项的类似剧本时:

- name: "Check if the deployments defined in group_vars are already installed"
  shell: "{{ item }}"
  register: check_deployments
  loop:
    - "pwd"
    - "ls -al"
    - "pwd"

- name: "Show list of deployments"
  debug:
    var: check_deployments.stdout_lines
我正在得到信息

TASK [Show list of deployments] *************************************************
ok: [localhost] => 
  check_deployments.stdout_lines: VARIABLE IS NOT DEFINED!
这是正确的,因为您循环一个Ansible模块,并将所有输出注册到一个变量中。在这种情况下,变量包含一个结果列表。因此-您使用
检查部署的循环。标准输出行
是错误的。您需要遍历所有
检查部署。结果
每个模块运行时包含正确的“已注册”变量,您要检查该变量

- name: "Undeploy..."
  debug:
    msg: "stdout: {{ item.cmd }}"
  when: "item.stdout_lines | length > 1"
  loop: "{{ check_deployments.results }}"
这将只输出一个条目(ls-al)。将跳过所有其他选项