Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cisco.nxos.nxos_snmp_server - password breaks idempotency #801

Open
jorgenspange opened this issue Jan 16, 2024 · 4 comments
Open

cisco.nxos.nxos_snmp_server - password breaks idempotency #801

jorgenspange opened this issue Jan 16, 2024 · 4 comments
Assignees
Labels
snmp_servers snmp_servers resource module

Comments

@jorgenspange
Copy link

jorgenspange commented Jan 16, 2024

SUMMARY

Idemptoncy breaks when you apply password in clear text.

ISSUE TYPE
  • Bug Report
COMPONENT NAME

cisco.nxos.nxos_snmp_server

ANSIBLE VERSION
ansible [core 2.16.1]
  config file = /Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg
  configured module search path = ['/Users/jorgenspange/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/homebrew/Cellar/ansible/9.1.0/libexec/lib/python3.12/site-packages/ansible
  ansible collection location = /Users/jorgenspange/.ansible/collections:/usr/share/ansible/collections
  executable location = /opt/homebrew/bin/ansible
  python version = 3.12.1 (main, Dec  7 2023, 20:45:44) [Clang 15.0.0 (clang-1500.0.40.1)] (/opt/homebrew/Cellar/ansible/9.1.0/libexec/bin/python)
  jinja version = 3.1.3
  libyaml = True
COLLECTION VERSION
[jorgenspange@Jorgens-MBP git/ansible-network-automation (main) ]$ ansible-galaxy collection list cisco.nxos

# /Users/jorgenspange/.ansible/collections/ansible_collections
Collection Version
---------- -------
cisco.nxos 6.0.0
CONFIGURATION
[jorgenspange@Jorgens-MBP git/ansible-network-automation (main) ]$ ansible-config dump --only-changed
ANSIBLE_COW_PATH(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = /opt/homebrew/bin/cowsay
ANSIBLE_COW_SELECTION(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = small
ANSIBLE_NOCOWS(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = False
ANSIBLE_PIPELINING(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = True
CONFIG_FILE() = /Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg
DEFAULT_FORKS(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = 10
DEFAULT_GATHERING(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = smart
DEFAULT_HOST_LIST(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = ['/Users/jorgenspange/Docum>
DEFAULT_ROLES_PATH(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = ['/Users/jorgenspange/Docu>
DEFAULT_STDOUT_CALLBACK(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = yaml
DEFAULT_TIMEOUT(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = 120
DEFAULT_VAULT_PASSWORD_FILE(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = /Users/jorgenspan>
DISPLAY_SKIPPED_HOSTS(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = False
HOST_KEY_CHECKING(/Users/jorgenspange/Documents/git/ansible-network-automation/ansible.cfg) = False
OS / ENVIRONMENT

Macbook Pro 2021 M1

STEPS TO REPRODUCE
- name: configure_cisco.nxos.nxos | Set snmpv3 configuration.
  cisco.nxos.nxos_snmp_server:
    config:
     contact: {{ snmp_contact }}
     location: {{ snmp_location }}
     users:
        auth:
        - authentication:
            algorithm: sha
            localized_key: false
            password:  {{ authentication_password }}
            priv:
              aes_128: true
              privacy_password: {{ encryption_password }}
          group: network-admin
          user: snmp_rw
        use_acls:
        - ipv4: SNMP
          user: snmp_rw
    state: merged
EXPECTED RESULTS

When you apply multiple times it should not have state changed.

ACTUAL RESULTS

When applying this it multiple times it does a change everytime because it's reapplying the password:

  commands:
  - snmp-server user snmp_rw network-admin auth sha password123 priv aes-128 password123

(yes the password meets the requirements and is applied, just washed it away here)

@NilashishC NilashishC self-assigned this Jan 16, 2024
@NilashishC NilashishC added the snmp_servers snmp_servers resource module label Jan 16, 2024
@NilashishC
Copy link
Collaborator

@jorgenspange I think this is behaving as expected. NX-OS converts password123 into it's localized hashed format (default SHA-1) likely using a salt and stores that in it's configuration. As a result, this is what appears in running-config:

nexus9300-10-3-1# show running-config | section "^snmp-server user snmp_rw"
snmp-server user snmp_rw network-admin auth sha 332915F749A959BFF31571F660808B5A3478E32CAEBD priv aes-128 056E47AE43EC67C6896416B32CC4D47E3828B03CABA0 localizedV2key
snmp-server user snmp_rw use-ipv4acl SNMP

The nxos_snmp_server has no way of understanding if the password(s) passed through the task is what's actually configured on the box from this salted hash. As such, it considers this as a diff and keeps trying to push it every time the playbook is run.

The solution here is to run a task with state: gathered and round-trip that information to the aforementioned task. Or, manually update your task to reflect the localized salted hashed version of the passwords, instead of the plain text ones.

Hope that helps!

@NilashishC NilashishC added the needs_info This issue requires further information. Please answer any outstanding questions. label Jan 16, 2024
@jorgenspange
Copy link
Author

@NilashishC Yes, that's for sure what is happening. But for instance cisco.ios.ios_snmp_server has the same challenge, but that does not apply the password as long as the users is provisioned, therefore the idempotency is still intact.

Would it be possible to do something similar here? Maybe you could have a force_update: boolean to deal with this somehow.

@NilashishC NilashishC removed the needs_info This issue requires further information. Please answer any outstanding questions. label Jan 16, 2024
@KB-perByte
Copy link
Collaborator

@jorgenspange The behavior in cisco.ios is wrong. We would push a patch to fix it.
The facts are not rendering user-> authentication -> password information in snmp_server
Playbook -

- name: Apply the provided configuration
      # check_mode: true
      cisco.ios.ios_snmp_server:
        config:
          communities:
            - acl_v4: testACL
              name: mergedComm
              rw: true
          users:
            - authentication:
                algorithm: md5
                password: Test
              encryption:
                priv: 3des
                password: Test
              group: dev
              username: userPaul
              version: v3
        state: merged

Redacted output -

  after:
    communities:
    - acl_v4: testACL
      name: mergedComm
      rw: true
    users:
    - authentication:
        algorithm: md5
      encryption:
        priv: 3des
      group: dev
      username: userPaul
      version: v3
  before:
    communities:
    - acl_v4: testACL
      name: mergedComm
      rw: true
  commands:
  - snmp-server user userPaul dev v3 auth md5 ******** priv 3des ********
  invocation:

I see this enhancement went in with the PR
As mentioned in previous comments passwords or any such information not present in the running configuration of the appliance is expected to break idempotence. And that would be the expected behavior of the module.
Given that we prohibit the way the patch was added to cisco.ios we would be unable to update configuration with the overridden and replaced state.
I hope this answers your question.
Regards.

@KB-perByte
Copy link
Collaborator

CC @roverflow This would need fix in cisco.ios ^
Regards

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
snmp_servers snmp_servers resource module
Projects
None yet
Development

No branches or pull requests

3 participants