Можно как выбрать вложенный список в атрибуте списка - PullRequest
0 голосов
/ 14 декабря 2018

Привет, я хотел бы знать, как я могу выбрать список, вложенный в список.Я провел исследование моего F5 BIG IP, и он дал мне список характеристик виртуальных серверов:

    "/Common/vs_portailopal_wi_https_virtual_server": {
        "last_hop_pool": "",
        "name": "vs_portailopal_wi_https_virtual_server",
        "nat64_state": "STATE_DISABLED",
        "object_status": {
            "availability_status": "AVAILABILITY_STATUS_RED",
            "enabled_status": "ENABLED_STATUS_DISABLED",
            "status_description": "The children pool member(s) are down"
        },
        "profile": [
            {
                "profile_context": "PROFILE_CONTEXT_TYPE_CLIENT",
                "profile_name": "/Common/vs_portailopal_wi_clientssl_profile",
                "profile_type": "PROFILE_TYPE_CLIENT_SSL"
            },
            {
                "profile_context": "PROFILE_CONTEXT_TYPE_ALL",
                "profile_name": "/Common/vs_portailopal_wi_http_profile",
                "profile_type": "PROFILE_TYPE_HTTP"
            },
            {
                "profile_context": "PROFILE_CONTEXT_TYPE_ALL",
                "profile_name": "/Common/vs_portailopal_wi_http_profile-cache",
                "profile_type": "PROFILE_TYPE_WEBACCELERATION"
            },]
        },
    },

Поэтому я хотел бы сравнить имя виртуального сервера иНазвание каждого профиля.Я могу выбрать имя жизненно важного сервера, но не могу войти в список профилей, чтобы выбрать имя, потому что это вложенный список в атрибуте

Это я делаю:

---
- name: Search
hosts: F5
gather_facts: no
connection: local


vars:
  username: '{{ cpt_username }}'
  password: '{{ cpt_password }}'

tasks: 


  - name: Get virtual-servers
    bigip_facts:
      include:
        - virtual_server
      server: '{{ inventory_hostname }}'
      user: '{{ username }}'
      password: '{{ password }}'
      validate_certs: no



  - name: filter on VIP_nommage when VIP_partition is OK
    lineinfile: 
      line: 
        - "{{ inventory_hostname }}  Virtual Server : {{ item.key }} => POOL: {{ item.value.profile.name }}" 
      dest: "xxxxx/file.csv"
      state: present
    with_dict: "{{ virtual_server }}"

Я хочу сохранить в файле все имена профилей для каждого виртуального сервера и в другом фильтре задач по их именам.

1 Ответ

0 голосов
/ 14 декабря 2018

Я не знаком с модулями Bigip Ansible, и у меня определенно нет ни одного комплекта F5 для тестирования :) Прежде чем сказать что-либо еще, следует отметить, что в документах говорится, что bigip_facts устарела, иВы должны использовать 'bigip_device_facts'.Но если вы хотите использовать этот модуль, вы можете сделать пару вещей:

1) Отредактируйте исходный вопрос, чтобы добавить детали, которые вы опубликовали в своем ответе.Лучше продолжать редактировать исходный вопрос с дополнительной информацией, а не добавлять ответы, так как это упрощает понимание всей ситуации.

2) Создайте новую пьесу, содержащую:

---
- hosts: F5
  gather_facts: no
  connection: local

  vars:
    username: '{{ cpt_username }}'
    password: '{{ cpt_password }}'

  tasks: 
    - name: Get virtual-servers
      bigip_facts:
        include:
          - virtual_server
        server: '{{ inventory_hostname }}'
        user: '{{ username }}'
        password: '{{ password }}'
        validate_certs: no
      register: bigip_facts_data

    - name: Display collected data
      debug:
        var: bigip_facts_data

Это покажет нам данные, с которыми фактически работает Ansible.Вставьте вывод в исходный ответ вместо того JSON, который вы изначально вставили.Это может выглядеть так:

"/Common/vs_portailopal_wi_https_virtual_server":
  last_hop_pool: ''
  name: vs_portailopal_wi_https_virtual_server
  nat64_state: STATE_DISABLED
  object_status:
    availability_status: AVAILABILITY_STATUS_RED
    enabled_status: ENABLED_STATUS_DISABLED
    status_description: The children pool member(s) are down
  profile:
  - profile_context: PROFILE_CONTEXT_TYPE_CLIENT
    profile_name: "/Common/vs_portailopal_wi_clientssl_profile"
    profile_type: PROFILE_TYPE_CLIENT_SSL
  - profile_context: PROFILE_CONTEXT_TYPE_ALL
    profile_name: "/Common/vs_portailopal_wi_http_profile"
    profile_type: PROFILE_TYPE_HTTP
  - profile_context: PROFILE_CONTEXT_TYPE_ALL
    profile_name: "/Common/vs_portailopal_wi_http_profile-cache"
    profile_type: PROFILE_TYPE_WEBACCELERATION

Если это так, то это может привести к получению нужного вам результата (хотя я до сих пор не уверен, что полностью понимаю, что вам нужно - надеюсь, мы ближе):

 - name: filter on VIP_nommage when VIP_partition is OK
    lineinfile: 
      line: 
        - "{{ inventory_hostname }}  Virtual Server : {{ item.0.name }} => POOL: {{ item.1.profile_name }}" 
      dest: "/home/ADMB0002194/F5/file.csv"
      state: present
    with_subelements:
      - "{{ bigip_fact_data }}"
      - profile

Действительно, with_subelements теперь устарела вместе с другими конструкциями with_, но если вы используете 'bigip_facts', я думаю, вы используете более старую версию Ansible.

...