Estoy intentando validar una configuración de Cisco con Ansible. Quiero poder saber si se ha configurado algún usuario distinto de los válidos.

Usuarios válidos: nombre de usuario administrador, nombre de usuario de solo lectura

Usuarios no válidos: nombre de usuario secretbackdoor

He intentado crear una lista de usuarios y luego marcar los que no son válidos. El código que tengo hasta ahora es el siguiente:

---
- hosts: cisco
  gather_facts: no

  tasks:

- name: show run
  ios_command:
    commands:
     - show run
  register: cisco_show_run

    - name: list_cisco_usernames
  set_fact: cisco_usernames="{{ cisco_show_run.stdout[0] | regex_findall('username (\S+)', multiline=True) }}"

- name: print usernames
  debug:
    msg: {{ item }}
  with_items: "{{ cisco_usernames }}"

Esto imprimirá los tres usuarios. No estoy seguro de adónde ir a continuación.

1
Jonathan E 6 ago. 2020 a las 17:28

2 respuestas

La mejor respuesta

"Establecer filtros de teoría" podría ser el siguiente opción. Por ejemplo

- hosts: localhost
  vars:
    valid_users: [admin, readonly]
    invalid_users: [secretbackdoor]
    cisco_usernames: [admin, readonly, secretbackdoor]

  tasks:

    - name: Display users not in valid_users
      debug:
        msg: Not among valid users {{ not_valid }}
      when: not_valid|length > 0
      vars:
        not_valid: "{{ cisco_usernames|difference(valid_users) }}"

    - name: Display users in invalid_users
      debug:
        msg: Among invalid users {{ not_valid }}
      when: not_valid|length > 0
      vars:
        not_valid: "{{ cisco_usernames|intersect(invalid_users) }}"

Da (abreviado)

ok: [localhost] => 
  msg: Not among valid users ['secretbackdoor']

ok: [localhost] => 
  msg: Among invalid users ['secretbackdoor']
1
Vladimir Botka 6 ago. 2020 a las 15:23

Gracias por esto. Tu solución está funcionando bien. Pongo la primera opción, ya que no siempre sé cuáles son los usuarios 'incorrectos'.

0
Jonathan E 6 ago. 2020 a las 16:01