Begrenzen Sie die CPU-Auslastung Ansible J2-Schleife

Begrenzen Sie die CPU-Auslastung Ansible J2-Schleife

Ich habe eine Ansible-Aufgabe, die eine Liste von VLANs formatiert. Wenn ich die Aufgabe jedoch mit mehreren Forks ausführe, steigt meine CPU-Auslastung für längere Zeit auf 100 %. Wie kann ich die Aufgabe optimieren, um die CPU-Auslastung zu reduzieren oder die CPU-Auslastung dieser Aufgabe zu begrenzen?

Hier ist die ursprüngliche Aufgabe:

- 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 }}"

Ich habe bereits cpulimit ausprobiert, aber es begrenzt die CPU-Auslastung jedes einzelnen Forks, aber nicht aller.

Antwort1

Ich habe es behoben, indem ich json_query verwendet habe, was viiiiiiiel schneller ist:

    - 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 }}"

verwandte Informationen