VLAN 목록의 형식을 지정하는 Ansible 작업이 있습니다. 그러나 여러 포크로 작업을 실행하면 CPU 사용량이 오랫동안 100%까지 치솟습니다. CPU 사용량을 줄이거나 이 작업의 CPU 사용량을 제한하기 위해 작업을 최적화하려면 어떻게 해야 합니까?
원래 작업은 다음과 같습니다.
- 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 }}"
나는 이미 cpulimit를 시도했지만 모든 포크가 아닌 각 포크의 CPU 사용량을 제한하고 있습니다.
답변1
json_query를 사용하여 문제를 해결했는데 훨씬 빠릅니다.
- 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 }}"