首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从输出中提取一个值,然后在下一个任务中使用它

从输出中提取一个值,然后在下一个任务中使用它
EN

Stack Overflow用户
提问于 2022-04-01 12:14:37
回答 2查看 177关注 0票数 1

我只想从下面的输出中提取一个值,确切地说,就是主机行。

比如:

代码语言:javascript
复制
host: host-1.example.com

剧本本身:

代码语言:javascript
复制
---
- name: Get fortios_configuration_fact
  hosts: fortigate
  connection: httpapi
  collections:
    - fortinet.fortios
  gather_facts: no

  vars:
    ansible_httpapi_port: 4443
    ansible_httpapi_use_ssl: yes
    ansible_httpapi_validate_certs: no
    username: some-name

  tasks:
    - name: Retrieve Facts of FortiOS Configurable Objects
      fortinet.fortios.fortios_configuration_fact:
        access_token: "{{ vault_access_token }}"
        selector: "vpn.ssl.web_user-bookmark"
        formatters:
          - bookmarks
        params:
          name: "{{ username }}"
        sorters:
          - logon-user
      register: ssl_vpn_results

    - ansible.builtin.debug:
        msg: "{{ ssl_vpn_results.meta.results }}"

我有一个不可信的输出:

代码语言:javascript
复制
  - bookmarks:
    - additional-params: ''
      apptype: vnc
      color-depth: '16'
      description: 
      domain: ''
      folder: ''
      form-data: []
      host: host-1.example.com
      keyboard-layout: en-us
      load-balancing-info: ''
      logon-password: ENC XXXX
      logon-user: some-user
      name: some-name
      port: 5909
      preconnection-blob: ''
      preconnection-id: 0
      q_origin_key: some-description
      restricted-admin: disable
      security: rdp
      send-preconnection-id: disable
      sso: disable
      sso-credential: sslvpn-login
      sso-credential-sent-once: disable
      sso-password: ''
      sso-username: ''
      url: ''
    custom-lang: ''
    name: some-name
    q_origin_key: some-description

没有调试消息中的“.meta.results”,我有以下输出:

代码语言:javascript
复制
ok: [fortinet_vd] => 
  msg:
    changed: false
    failed: false
    meta:
      build: 234
      http_method: GET
      http_status: 200
      mkey: user-mkey
      name: user-bookmark
      path: vpn.ssl.web
      results:
      - bookmarks:
        - additional-params: ''
          apptype: vnc
          color-depth: '16'
          description: some-description
          domain: ''
          folder: ''
          form-data: []
          host: host-1.example.com
          keyboard-layout: en-us
          load-balancing-info: ''
          logon-password: ENC XXXX
          logon-user: some-user
          name: some-name
          port: 5909
          preconnection-blob: ''
          preconnection-id: 0
          q_origin_key: some-user
          restricted-admin: disable
          security: rdp
          send-preconnection-id: disable
          sso: disable
          sso-credential: sslvpn-login
          sso-credential-sent-once: disable
          sso-password: ''
          sso-username: ''
          url: ''
      revision: 9e0c1a3432bb884fdebaeaefdb0a51be
      serial: serial-nbr
      status: success
      vdom: root
      version: v7.0.2

我尝试了许多ansible过滤器来操作数据,但是失败了。

你能帮我提点主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-01 14:35:23

属性结果和书签都是列表。您可以从列表中获得第一项。

代码语言:javascript
复制
    - debug:
        msg: "{{ ssl_vpn_results.meta.results.0.bookmarks.0.host }}"

给出

代码语言:javascript
复制
  msg: host-1.example.com

结果和书签中可能有更多的项目。您可以使用json_query选择所有主机。

代码语言:javascript
复制
    - debug:
        msg: "{{ ssl_vpn_results.meta.results|
                 json_query('[].bookmarks[].host') }}"

给出清单

代码语言:javascript
复制
  msg:
    - host-1.example.com

您还可以迭代结果并列出特定项的所有主机。

代码语言:javascript
复制
    - debug:
        msg: "{{ item.name }}: {{ item.bookmarks|json_query('[].host') }}"
      loop: "{{ ssl_vpn_results.meta.results }}"
      loop_control:
        label: "{{ item.name }}"

给出

代码语言:javascript
复制
TASK [debug] *******************************************************
ok: [localhost] => (item=some-name) => 
  msg: 'some-name: [''host-1.example.com'']'
票数 1
EN

Stack Overflow用户

发布于 2022-04-01 14:34:03

您必须完成以下任务:结果和_bookmark_s是列表

代码语言:javascript
复制
- name: display
  debug:
    msg: the value of host is {{ ssl_vpn_results.meta.results.0.bookmarks.0.host }}

你得到了想要的结果!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71706775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档