Limitar el uso de la CPU Bucle Ansible J2

Limitar el uso de la CPU Bucle Ansible J2

Tengo una tarea de Ansible que formatea una lista de VLAN. Sin embargo, cuando ejecuto la tarea con múltiples bifurcaciones, el uso de mi CPU aumenta al 100% durante mucho tiempo. ¿Cómo puedo optimizar la tarea para reducir el uso de la CPU o limitar el uso de la CPU de esta tarea?

Aquí está la tarea original:

- name: Fromat VLAN list
  ansible.builtin.set_fact:
    device_interface_vlans: "{{ dict(key | zip(val)) }}"
  vars:
    dev_ifc_str: |-
      {% for vlan in ansible_facts.napalm_vlans.keys() %}
      {% for int in ansible_facts.napalm_vlans[vlan]['interfaces'] %}
      - {int: {{ int }}, vlan: {{ nb_vlans | selectattr('vid', 'equalto', vlan | int) | map(attribute='id') | join }}}
      {% endfor %}
      {% endfor %}
    int_vlan: "{{ dev_ifc_str | from_yaml }}"
    arr: "{{ int_vlan | groupby('int') }}"
    key: "{{ arr | map('first') | list }}"
    val: "{{ arr | map('last') |
      map('json_query', '[].vlan') |
      map('community.general.dict_kv', 'vlans') | list }}"

Ya probé cpulimit pero está limitando el uso de la CPU de cada bifurcación y no de todas.

Respuesta1

Lo arreglé usando json_query, que es mucho más rápido:

    - ansible.builtin.set_fact:
        device_interface_vlans: "{{ dict(key | zip(val)) }}"
      vars:
        dev_ifc_str: |-
          {% for vlan in ansible_facts.napalm_vlans.keys() %}
          {% for int in ansible_facts.napalm_vlans[vlan]['interfaces'] %}
          - {int: {{ int }}, vlan: {{ nb_vlans | json_query('[?vid == `{}`].id'.format(vlan | int)) | join }}}
          {% endfor %}
          {% endfor %}
        int_vlan: "{{ dev_ifc_str | from_yaml }}"
        arr: "{{ int_vlan | groupby('int') }}"
        key: "{{ arr | map('first') | list }}"
        val: "{{ arr | map('last') |
          map('json_query', '[].vlan') |
          map('community.general.dict_kv', 'vlans') | list }}"

información relacionada