ansible-collections / dellemc.os10

GNU General Public License v3.0
38 stars 49 forks source link

os10_config backup option not working #113

Closed allan-silverstein closed 2 years ago

allan-silverstein commented 2 years ago
SUMMARY

Setting the backup option in the os10_config module does not work. The configuration file is not written to the playbook root directory or any other directory if the backup_options are specfied.

ISSUE TYPE
COMPONENT NAME

os10_config

ANSIBLE VERSION
ansible [core 2.12.1]
  config file = None
  configured module search path = ['/home/asilver/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/asilver/pyvenv/conf_bkups/lib/python3.10/site-packages/ansible
  ansible collection location = /home/asilver/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/asilver/pyvenv/conf_bkups/bin/ansible
  python version = 3.10.1 (main, Jan 10 2022, 12:18:42) [GCC 9.3.0]
  jinja version = 3.0.3
  libyaml = True
COLLECTION VERSION
# /home/asilver/.ansible/collections/ansible_collections
Collection   Version
------------ -------
dellemc.os10 1.1.1
CONFIGURATION

This returned nothing

ansible-config dump --only-changed
(conf_bkups) asilver@dev-ubuntu-200403-gui-vm-3:~/pyprojects/aoe-netconfig-bkups$
OS / ENVIRONMENT

fra02-wls01-msw01# show version Dell EMC Networking OS10 Enterprise Copyright (c) 1999-2020 by Dell Inc. All Rights Reserved. OS Version: 10.5.2.2 Build Version: 10.5.2.2.258 Build Time: 2020-12-12T02:56:02+0000 System Type: S4148T-ON Architecture: x86_64 Up Time: 17 weeks 1 day 17:15:01 fra02-wls01-msw01#

STEPS TO REPRODUCE

Running a simple playbook with the following command line:

ansible-playbook -vvv -i inventory -k config_bkups2.yaml

---
- name: Configuration Retrieval Teseting
  connection: ansible.netcommon.network_cli
  gather_facts: false
  hosts: all
  tasks:

    - name: Retrieve Configuration
      dellemc.os10.os10_config:
        backup: true
#       backup_options:
#         dir_path: /tmp/bkups
#         filename:  junk.txt
        lines:
#         - ip host junk1 1.1.1.1
          - no ip host junk1
        save: yes
EXPECTED RESULTS

Configuration changes should be made and the the configuration should be saved to a file on the control system (The system that is executing the playbook).

ACTUAL RESULTS

The configuration of the device is changed but the configuration is never saved to the control system.

ansible-playbook [core 2.12.1]
  config file = None
  configured module search path = ['/home/asilver/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/asilver/pyvenv/conf_bkups/lib/python3.10/site-packages/ansible
  ansible collection location = /home/asilver/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/asilver/pyvenv/conf_bkups/bin/ansible-playbook
  python version = 3.10.1 (main, Jan 10 2022, 12:18:42) [GCC 9.3.0]
  jinja version = 3.0.3
  libyaml = True
No config file found; using defaults
SSH password:
setting up inventory plugins
host_list declined parsing /home/asilver/pyprojects/aoe-netconfig-bkups/inventory as it did not pass its verify_file() method
script declined parsing /home/asilver/pyprojects/aoe-netconfig-bkups/inventory as it did not pass its verify_file() method
auto declined parsing /home/asilver/pyprojects/aoe-netconfig-bkups/inventory as it did not pass its verify_file() method
Parsed /home/asilver/pyprojects/aoe-netconfig-bkups/inventory inventory source with ini plugin
Loading collection dellemc.os10 from /home/asilver/.ansible/collections/ansible_collections/dellemc/os10
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
Loading callback plugin default of type stdout, v2.0 from /home/asilver/pyvenv/conf_bkups/lib/python3.10/site-packages/ansible/plugins/callback/default.py
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: config_bkups2.yaml ******************************************************************************************************************************************************************************************************************************************
Positional arguments: config_bkups2.yaml
verbosity: 4
connection: smart
timeout: 10
ask_pass: True
become_method: sudo
tags: ('all',)
inventory: ('/home/asilver/pyprojects/aoe-netconfig-bkups/inventory',)
forks: 5
1 plays in config_bkups2.yaml

PLAY [Configuration Retrieval Teseting] *******************************************************************************************************************************************************************************************************************************
META: ran handlers
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
Loading collection ansible.netcommon from /home/asilver/.ansible/collections/ansible_collections/ansible/netcommon

TASK [Retrieve Configuration] *****************************************************************************************************************************************************************************************************************************************
task path: /home/asilver/pyprojects/aoe-netconfig-bkups/config_bkups2.yaml:8
<p2r1ms1> attempting to start connection
<p2r1ms1> using connection plugin ansible.netcommon.network_cli
Found ansible-connection at path /home/asilver/pyvenv/conf_bkups/bin/ansible-connection
<p2r1ms1> local domain socket does not exist, starting it
<p2r1ms1> control socket path is /home/asilver/.ansible/pc/0d0cb01437
<p2r1ms1> Loading collection ansible.netcommon from /home/asilver/.ansible/collections/ansible_collections/ansible/netcommon
<p2r1ms1> Loading collection dellemc.os10 from /home/asilver/.ansible/collections/ansible_collections/dellemc/os10
<p2r1ms1> local domain socket listeners started successfully
<p2r1ms1> loaded cliconf plugin ansible_collections.dellemc.os10.plugins.cliconf.os10 from path /home/asilver/.ansible/collections/ansible_collections/dellemc/os10/plugins/cliconf/os10.py for network_os dellemc.os10.os10
<p2r1ms1> ssh type is set to paramiko
<p2r1ms1>
<p2r1ms1> local domain socket path is /home/asilver/.ansible/pc/0d0cb01437
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
<p2r1ms1> ANSIBLE_NETWORK_IMPORT_MODULES: disabled
<p2r1ms1> ANSIBLE_NETWORK_IMPORT_MODULES: module execution time may be extended
<p2r1ms1> ESTABLISH LOCAL CONNECTION FOR USER: asilver
<p2r1ms1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b `"&& mkdir "` echo /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165 `" && echo ansible-tmp-1643734318.967188-1116965-254092881000165="` echo /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165 `" ) && sleep 0'
Using module file /home/asilver/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<p2r1ms1> PUT /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/tmph51nkbea TO /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165/AnsiballZ_os10_config.py
<p2r1ms1> EXEC /bin/sh -c 'chmod u+x /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165/ /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165/AnsiballZ_os10_config.py && sleep 0'
<p2r1ms1> EXEC /bin/sh -c '/home/asilver/pyvenv/conf_bkups/bin/python3 /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165/AnsiballZ_os10_config.py && sleep 0'
<p2r1ms1> EXEC /bin/sh -c 'rm -f -r /home/asilver/.ansible/tmp/ansible-local-11168463iz2tm2b/ansible-tmp-1643734318.967188-1116965-254092881000165/ > /dev/null 2>&1 && sleep 0'
changed: [p2r1ms1] => {
    "__backup__": "! Version 10.5.2.2\n! Last configuration change at Feb  02 01:13:28 2022\n!\nip vrf default\n!\nip vrf management\n interface management\n!\nspanning-tree mode rstp\nspanning-tree rstp priority 57344\niscsi enable\niscsi target port 860\niscsi target port 3260\nhostname fra02-wls01-msw01\ninterface breakout 1/1/25 map 100g-1x\ninterface breakout 1/1/26 map 100g-1x\ninterface breakout 1/1/29 map 100g-1x\ninterface breakout 1/1/30 map 100g-1x\nsystem-user linuxadmin password ****\nip virtual-router mac-address 00:00:00:00:21:02\nusername admin password **** role sysadmin priv-lvl 15\naaa authentication login default local\naaa authentication login console local\n!\nclass-map type application class-iscsi\n!\npolicy-map type application policy-iscsi\n!\ninterface vlan1\n no shutdown\n!\ninterface vlan1200\n description To_POD2_MSPINE\n no shutdown\n mtu 9216\n ip address 172.16.2.19/29\n!\ninterface vlan1299\n description WORKLOAD_MGMT\n no shutdown\n mtu 9216\n ip address 10.236.74.2/26\n ip virtual-router address 10.236.74.1\n!\ninterface vlan4003\n description \"vmotion-traffic Do Not Advertise\"\n no shutdown\n mtu 9216\n ip address 128.221.223.2/24\n ip virtual-router address 128.221.223.1\n!\ninterface vlan4004\n description \"vsan-traffic Do Not Advertise\"\n no shutdown\n mtu 9216\n ip address 172.255.4.2/24\n ip virtual-router address 172.255.4.1\n!\ninterface vlan4010\n description \"provisioning-traffic Do Not Advertise\"\n no shutdown\n mtu 9216\n ip address 172.255.10.2/24\n ip virtual-router address 172.255.10.1\n!\ninterface port-channel128\n description To_POD2_MSPINE\n no shutdown\n switchport mode trunk\n switchport access vlan 1\n switchport trunk allowed vlan 1200\n mtu 9216\n vlt-port-channel 128\n!\ninterface mgmt1/1/1\n no shutdown\n no ip address dhcp\n ip address 10.236.72.20/26\n!\ninterface ethernet1/1/1\n description \"ESXi Host. Traffic: vmotion, public managment\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4003,4010\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/2\n description \"ESXi Host. Traffic: vmotion, public managment\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4003,4010\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/3\n description \"ESXi Host. Traffic: vmotion, public managment\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4003,4010\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/4\n description \"ESXi Host. Traffic: vmotion, public managment\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4003,4010\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/5\n description \"ESXi Host. Traffic: vmotion, public managment\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4003,4010\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/6\n description \"ESXi Host. Traffic: vmotion, public managment\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4003,4010\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/7\n no shutdown\n switchport access vlan 1299\n flowcontrol receive on\n!\ninterface ethernet1/1/8\n no shutdown\n switchport access vlan 1299\n flowcontrol receive on\n!\ninterface ethernet1/1/9\n no shutdown\n switchport access vlan 1299\n flowcontrol receive on\n!\ninterface ethernet1/1/10\n no shutdown\n switchport access vlan 1299\n flowcontrol receive on\n!\ninterface ethernet1/1/11\n no shutdown\n switchport access vlan 1299\n flowcontrol receive on\n!\ninterface ethernet1/1/12\n no shutdown\n switchport access vlan 1299\n flowcontrol receive on\n!\ninterface ethernet1/1/13\n description \"ESXi Host. Traffic: VSAN\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4004\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/14\n description \"ESXi Host. Traffic: VSAN\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4004\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/15\n description \"ESXi Host. Traffic: VSAN\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4004\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/16\n description \"ESXi Host. Traffic: VSAN\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4004\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/17\n description \"ESXi Host. Traffic: VSAN\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4004\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/18\n description \"ESXi Host. Traffic: VSAN\"\n no shutdown\n switchport mode trunk\n switchport access vlan 1299\n switchport trunk allowed vlan 4004\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/19\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/20\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/21\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/22\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/23\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/24\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/25\n description \"Spine uplink to Mgmt Switch-1 Pod 2\"\n no shutdown\n channel-group 128 mode active\n no switchport\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/26\n description \"Spine uplink to Mgmt Switch-2 Pod 2 - To Be Completed\"\n no shutdown\n channel-group 128 mode active\n no switchport\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/29\n description VLTi\n no shutdown\n no switchport\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/30\n description VLTi\n no shutdown\n no switchport\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/31\n description IDRAC\n no shutdown\n switchport access vlan 1299\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/32\n description IDRAC\n no shutdown\n switchport access vlan 1299\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/33\n description IDRAC\n no shutdown\n switchport access vlan 1299\n mtu 9216\n flowcontrol receive on\n!\ninterface ethernet1/1/34\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/35\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/36\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/37\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/38\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/39\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/40\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/41\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/42\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/43\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/44\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/45\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/46\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/47\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/48\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/49\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/50\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/51\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/52\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/53\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\ninterface ethernet1/1/54\n no shutdown\n switchport access vlan 1\n flowcontrol receive on\n!\nmanagement route 0.0.0.0/0 10.236.72.1\n!\nrouter bgp 64513\n !\n address-family ipv4 unicast\n  network 10.236.74.0/26\n !\n neighbor 172.16.2.17\n  description POD2-MSPINE\n  remote-as 64513\n  no shutdown\n!\nvlt-domain 10\n backup destination 10.236.72.21 vrf management\n discovery-interface ethernet1/1/29-1/1/30\n primary-priority 4096\n vlt-mac 00:00:00:00:21:01\n!\nsnmp-server contact http://www.dell.com/support\n!\ntelemetry",
    "changed": true,
    "commands": [
        "ip host junk1 1.1.1.1",
        "commit"
    ],
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": null,
            "before": null,
            "config": null,
            "lines": [
                "ip host junk1 1.1.1.1"
            ],
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": true,
            "src": null,
            "update": "merge"
        }
    },
    "saved": true,
    "updates": [
        "ip host junk1 1.1.1.1",
        "commit"
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP ************************************************************************************************************************************************************************************************************************************************************
p2r1ms1                    : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
zerwes commented 2 years ago

I can confirm this. on ansible 2.9 with the legacy dell so6/10 roles I used this to save the config but since a update to ansible 2.12 and the new collections this is not working anymore.

sample playbook:

- hosts: switch
  connection: network_cli
  gather_facts: false
  strategy: linear
  tasks:
    - name: fetch dellos10 config
      dellos10_config:
        backup: true
        save: false
        update: check
        backup_options:
          dir_path: /tmp/
          filename: "{{ backup_filename }}"
      when:
        - ansible_network_os == "dellos10"

a sample debug output:

± time ansible-playbook -vvv -l swa31ber0.ber0.rosalux.org -D switch_dellos10_fetch_config.yml 
ansible-playbook [core 2.12.1]
  config file = /home/zerwes/git/ansible-spk8/ansible.cfg
  configured module search path = ['/home/zerwes/git/ansible-spk8/library']
  ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
  ansible collection location = /home/zerwes/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
  jinja version = 2.11.3
  libyaml = True
Using /home/zerwes/git/ansible-spk8/ansible.cfg as config file
host_list declined parsing /home/zerwes/git/ansible-spk8/hosts as it did not pass its verify_file() method
script declined parsing /home/zerwes/git/ansible-spk8/hosts as it did not pass its verify_file() method
auto declined parsing /home/zerwes/git/ansible-spk8/hosts as it did not pass its verify_file() method
Parsed /home/zerwes/git/ansible-spk8/hosts inventory source with ini plugin
redirecting (type: modules) ansible.builtin.dellos10_config to dellemc.os10.os10_config
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: switch_dellos10_fetch_config.yml ************************************************************************************************************************************************************************
1 plays in switch_dellos10_fetch_config.yml

PLAY [switch] *****************************************************************************************************************************************************************************************************
META: ran handlers

TASK [fetch dellos10 config] **************************************************************************************************************************************************************************************
task path: /home/zerwes/git/ansible-spk8/switch_dellos10_fetch_config.yml:22
redirecting (type: connection) ansible.builtin.network_cli to ansible.netcommon.network_cli
redirecting (type: terminal) ansible.builtin.dellos10 to dellemc.os10.os10
redirecting (type: cliconf) ansible.builtin.dellos10 to dellemc.os10.os10
redirecting (type: action) ansible.builtin.dellos10 to dellemc.os10.os10
redirecting (type: action) ansible.builtin.dellos10 to dellemc.os10.os10
<172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes
<172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku `"&& mkdir "` echo /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061 `" && echo ansible-tmp-1643813293.9834929-1446620-232234029997061="` echo /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061 `" ) && sleep 0'
redirecting (type: modules) ansible.builtin.dellos10_config to dellemc.os10.os10_config
Using module file /home/zerwes/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/tmpx54mz0x9 TO /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061/AnsiballZ_os10_config.py
<172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061/ /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061/AnsiballZ_os10_config.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061/AnsiballZ_os10_config.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-1446616zsn4aaku/ansible-tmp-1643813293.9834929-1446620-232234029997061/ > /dev/null 2>&1 && sleep 0'
ok: [swa31ber0.ber0.rosalux.org] => {
    "__backup__": "! Version 10.5.2.3\n! Last configuration change at Feb  02 14:48:12 2022... _output containing config_",
    "changed": false,
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/",
                "filename": "swa31ber0.ber0.rosalux.org.cfg"
            },
            "before": null,
            "config": null,
            "lines": [],
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "update": "check"
        }
    },
    "saved": false
}
META: ran handlers
META: ran handlers

PLAY RECAP ********************************************************************************************************************************************************************************************************
swa31ber0.ber0.rosalux.org : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

real    0m53.060s
user    0m9.415s
sys 0m1.138s

± ls /tmp/swa31ber0.ber0.rosalux.org.cfg*
ls: cannot access '/tmp/swa31ber0.ber0.rosalux.org.cfg*': No such file or directory

The expected cfg ist not saved to the file! Same issue with dellos6!

zerwes commented 2 years ago

maybe related / duplicate of #102

zerwes commented 2 years ago

as far as I can bisect this at a first try: 2.9 is OK :+1: and 2.10 is broken :-1:

2.9

# pip install "ansible>2.9,<2.10"
# ansible --version | head -1 ; pip show ansible | head -2
ansible 2.9.27
Name: ansible
Version: 2.9.27

# rm -rf /tmp/swa31ber0.ber0.rosalux.org*; ansible-playbook -vvv  -l swa31ber0.ber0.rosalux.org -D switch_dellos10_fetch_config.yml ; ls -l /tmp/swa31ber0.ber0.rosalux.org*
ansible-playbook 2.9.27
  config file = /root/ansible/ansible.cfg
  configured module search path = ['/root/ansible/library']
  ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
Using /root/ansible/ansible.cfg as config file
host_list declined parsing /root/ansible/hosts as it did not pass its verify_file() method
script declined parsing /root/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /root/ansible/hosts as it did not pass its verify_file() method
Parsed /root/ansible/hosts inventory source with ini plugin
Skipping callback 'actionable', as we already have a stdout callback.
Skipping callback 'counter_enabled', as we already have a stdout callback.
Skipping callback 'debug', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'full_skip', as we already have a stdout callback.
Skipping callback 'json', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'null', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
Skipping callback 'selective', as we already have a stdout callback.
Skipping callback 'skippy', as we already have a stdout callback.
Skipping callback 'stderr', as we already have a stdout callback.
Skipping callback 'unixy', as we already have a stdout callback.
Skipping callback 'yaml', as we already have a stdout callback.

TASK [fetch config] 
task path: /root/ansible/switch_dellos10_fetch_config.yml:21
Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/network/dellos10/dellos10_config.py
Pipelining is enabled.
<172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: root
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 && sleep 0'
<172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-93527jdgg7eu `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-93527jdgg7eu/ansible-tmp-1643841585.3456714-9355-214195678964903 `" && echo ansible-tmp-1643841585.3456714-9355-214195678964903="` echo /root/.ansible/tmp/ansible-local-93527jdgg7eu/ansible-tmp-1643841585.3456714-9355-214195678964903 `" ) && sleep 0'
Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/files/stat.py
Pipelining is enabled.
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 && sleep 0'
Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/files/file.py
Pipelining is enabled.
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 && sleep 0'
<172.31.248.31> PUT /root/.ansible/tmp/ansible-local-93527jdgg7eu/tmpr1tagki8 TO /root/.ansible/tmp/ansible-local-93527jdgg7eu/ansible-tmp-1643841585.3456714-9355-214195678964903/source
<172.31.248.31> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-93527jdgg7eu/ansible-tmp-1643841585.3456714-9355-214195678964903/ /root/.ansible/tmp/ansible-local-93527jdgg7eu/ansible-tmp-1643841585.3456714-9355-214195678964903/source && sleep 0'
Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/files/copy.py
Pipelining is enabled.
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 && sleep 0'
<172.31.248.31> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-93527jdgg7eu/ansible-tmp-1643841585.3456714-9355-214195678964903/ > /dev/null 2>&1 && sleep 0'
changed: [swa31ber0.ber0.rosalux.org] => {
    "backup_path": "/tmp/swa31ber0.ber0.rosalux.org.cfg",
    "changed": true,
    "date": "2022-02-02",
    "invocation": {
        "module_args": {
            "after": null,
            "auth_pass": null,
            "authorize": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/",
                "filename": "swa31ber0.ber0.rosalux.org.cfg"
            },
            "before": null,
            "config": null,
            "host": null,
            "lines": null,
            "match": "line",
            "parents": null,
            "password": null,
            "port": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "ssh_keyfile": null,
            "timeout": null,
            "update": "check",
            "username": null
        }
    },
    "saved": false,
    "time": "22:39:45"
}
META: ran handlers
META: ran handlers

PLAY RECAP ********************************************************************************************************************************************************************************************************
swa31ber0.ber0.rosalux.org : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

-rw-r--r-- 1 root root 21105 Feb  2 23:39 /tmp/swa31ber0.ber0.rosalux.org.cfg

2.10

# pip uninstall ansible ansible-base ansible-core
# pip install "ansible>2.10,<2.11" 
# ansible --version | head -1 ; pip show ansible | head -2
ansible 2.10.17
Name: ansible
Version: 2.10.7

# rm -rf /tmp/swa31ber0.ber0.rosalux.org*; ansible-playbook -vvv  -l swa31ber0.ber0.rosalux.org -D switch_dellos10_fetch_config.yml ; ls -l /tmp/swa31ber0.ber0.rosalux.org*
ansible-playbook 2.10.17
  config file = /root/ansible/ansible.cfg
  configured module search path = ['/root/ansible/library']
  ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
Using /root/ansible/ansible.cfg as config file
host_list declined parsing /root/ansible/hosts as it did not pass its verify_file() method
script declined parsing /root/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /root/ansible/hosts as it did not pass its verify_file() method
Parsed /root/ansible/hosts inventory source with ini plugin
redirecting (type: modules) ansible.builtin.dellos10_config to dellemc.os10.os10_config
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

TASK [fetch config] 
task path: /root/ansible/switch_dellos10_fetch_config.yml:21
redirecting (type: connection) ansible.builtin.network_cli to ansible.netcommon.network_cli
redirecting (type: terminal) ansible.builtin.dellos10 to dellemc.os10.os10
redirecting (type: cliconf) ansible.builtin.dellos10 to dellemc.os10.os10
redirecting (type: action) ansible.builtin.dellos10 to dellemc.os10.os10
redirecting (type: action) ansible.builtin.dellos10 to dellemc.os10.os10
<172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: root
<172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-9303sjujunne `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273 `" && echo ansible-tmp-1643840991.2404823-9306-403180865273="` echo /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273 `" ) && sleep 0'
redirecting (type: modules) ansible.builtin.dellos10_config to dellemc.os10.os10_config
Using module file /usr/local/lib/python3.9/dist-packages/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<172.31.248.31> PUT /root/.ansible/tmp/ansible-local-9303sjujunne/tmphv2y50vw TO /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273/AnsiballZ_os10_config.py
<172.31.248.31> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273/ /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273/AnsiballZ_os10_config.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273/AnsiballZ_os10_config.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-9303sjujunne/ansible-tmp-1643840991.2404823-9306-403180865273/ > /dev/null 2>&1 && sleep 0'
ok: [swa31ber0.ber0.rosalux.org] => {
    "__backup__": "! Version 10.5.2.3\n! Last configuration change at Feb  02 22:29:50 ...",
    "changed": false,
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/",
                "filename": "swa31ber0.ber0.rosalux.org.cfg"
            },
            "before": null,
            "config": null,
            "lines": null,
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "update": "check"
        }
    },
    "saved": false
    "changed": false,
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/",
                "filename": "swa31ber0.ber0.rosalux.org.cfg"
            },
            "before": null,
            "config": null,
            "lines": null,
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "update": "check"
        }
    },
    "saved": false
}
META: ran handlers
META: ran handlers

PLAY RECAP ********************************************************************************************************************************************************************************************************
swa31ber0.ber0.rosalux.org : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ls: cannot access '/tmp/swa31ber0.ber0.rosalux.org*': No such file or directory
zerwes commented 2 years ago

"ansible==2.10.0" "ansible-base==2.10.1" is the first broken version, so the reason should be findable via bisecting 2.9.27 and 2.10.0. But what makes me suspicious:

Finally leaves me with no good feeling in relying on this collection (unfortunately I have to!) ...

zerwes commented 2 years ago

just for the record in case it helps someone: my interim fix

--- a/switch.yml
+++ b/switch.yml
@@ -35,43 +35,51 @@
     - name: "save config to {{ switch_cfg_backup_dir }}"
       vars:
         ansible_become: yes
       dellos6_config:
         backup: yes
         save: no
         update: check
         backup_options:
           dir_path: "{{ switch_cfg_backup_dir }}"
           filename: "{{ backup_filename }}.orig"
       when:
         - ansible_network_os == "dellemc.os6.os6"
         - not ansible_check_mode
       tags: always
+      register: r6
     - name: "save config to {{ switch_cfg_backup_dir }}"
       dellos10_config:
         backup: yes
         save: no
         update: check
         backup_options:
           dir_path: "{{ switch_cfg_backup_dir }}"
           filename: "{{ backup_filename }}.orig"
       when:
         - ansible_network_os == "dellemc.os10.os10"
         - not ansible_check_mode
       tags: always
+      register: r10
+    - name: save cfg to file
+      local_action:
+        module: copy
+        content: "{{ r6['__backup__'] if ansible_network_os == 'dellemc.os6.os6' else r10['__backup__'] }}"
+        dest: "{{ switch_cfg_backup_dir }}/{{ backup_filename }}"
+      tags: always
prasadapr commented 2 years ago

@zerwes, i am checking on this, pls give me some time. will update once validated.

prasadapr commented 2 years ago

@zerwes, I have executed the playbook on both ansible versions (ansible [core 2.12.0] & ansible 2.9.26) and its working for me.

The Configuration changes are done and the configurations are saved in the specified file(junk.txt) on the ansible control system in the specified path(/tmp/bkups)

Find the sample playbook which i have executed:

prasadapr commented 2 years ago
---
- name: Configuration Retrieval Testing
  hosts: datacenter
  gather_facts: false
  connection: network_cli
  collections:
   - dellemc.os10
  tasks:
   - name: Retrieve Configuration
     os10_config:
       backup: true
       backup_options:
         dir_path: /tmp/bkups
         filename:  junk.txt
       lines:
         - ip host junk1 1.1.1.1
         - ip host junk2 2.2.2.2
prasadapr commented 2 years ago

Find the config file (junk.txt) on the ansible control system (/tmp/bkups) after executing the playbook: root@UBUNTU18-VM-38-024:/# ls /tmp/bkups/junk.txt /tmp/bkups/junk.txt root@UBUNTU18-VM-38-024:/#

prasadapr commented 2 years ago

ansible 2.9.26: Find the execution log for reference


root@UBUNTU18-VM-38-024:~/os10_collections# ansible-playbook -i inventory.yaml config_bkups2.yaml -vvv
ansible-playbook 2.9.26
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.17 (default, Feb 27 2021, 15:10:58) [GCC 7.5.0]
Using /etc/ansible/ansible.cfg as config file
host_list declined parsing /root/os10_collections/inventory.yaml as it did not pass its verify_file() method
script declined parsing /root/os10_collections/inventory.yaml as it did not pass its verify_file() method
Parsed /root/os10_collections/inventory.yaml inventory source with ini plugin
Skipping callback 'actionable', as we already have a stdout callback.
Skipping callback 'counter_enabled', as we already have a stdout callback.
Skipping callback 'debug', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'full_skip', as we already have a stdout callback.
Skipping callback 'json', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'null', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
Skipping callback 'selective', as we already have a stdout callback.
Skipping callback 'skippy', as we already have a stdout callback.
Skipping callback 'stderr', as we already have a stdout callback.
Skipping callback 'unixy', as we already have a stdout callback.
Skipping callback 'yaml', as we already have a stdout callback.

PLAYBOOK: config_bkups2.yaml ****************************************************************************************************************************************************************************************************
1 plays in config_bkups2.yaml

PLAY [Configuration Retrieval Teseting] *****************************************************************************************************************************************************************************************
META: ran handlers

TASK [Retrieve Configuration] ***************************************************************************************************************************************************************************************************
task path: /root/os10_collections/config_bkups2.yaml:10
Friday 04 February 2022  12:08:34 +0530 (0:00:01.265)       0:00:01.265 *******
<100.104.40.188> ESTABLISH LOCAL CONNECTION FOR USER: root
<100.104.40.188> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-14034ckJOjI `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839 `" && echo ansible-tmp-1643956719.56-14041-173280246946839="` echo /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839 `" ) && sleep 0'
Using module file /root/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<100.104.40.188> PUT /root/.ansible/tmp/ansible-local-14034ckJOjI/tmpAtz8_r TO /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839/AnsiballZ_os10_config.py
<100.104.40.188> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839/ /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839/AnsiballZ_os10_config.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839/AnsiballZ_os10_config.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956719.56-14041-173280246946839/ > /dev/null 2>&1 && sleep 0'
<100.104.40.188> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-14034ckJOjI `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022 `" && echo ansible-tmp-1643956728.18-14041-276747058141022="` echo /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022 `" ) && sleep 0'
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/files/stat.py
<100.104.40.188> PUT /root/.ansible/tmp/ansible-local-14034ckJOjI/tmpfFeg4H TO /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/AnsiballZ_stat.py
<100.104.40.188> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/ /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/AnsiballZ_stat.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/AnsiballZ_stat.py && sleep 0'
<100.104.40.188> PUT /root/.ansible/tmp/ansible-local-14034ckJOjI/tmpC8Ce1h TO /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/source
<100.104.40.188> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/ /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/source && sleep 0'
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/files/copy.py
<100.104.40.188> PUT /root/.ansible/tmp/ansible-local-14034ckJOjI/tmpbHKd_J TO /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/AnsiballZ_copy.py
<100.104.40.188> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/ /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/AnsiballZ_copy.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/AnsiballZ_copy.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-14034ckJOjI/ansible-tmp-1643956728.18-14041-276747058141022/ > /dev/null 2>&1 && sleep 0'
changed: [leaf] => {
    "backup_path": "/tmp/bkups/junk.txt",
    "changed": true,
    "commands": [
        "ip host junk2 2.2.2.2",
        "commit"
    ],
    "date": "2022-02-04",
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/bkups",
                "filename": "junk.txt"
            },
            "before": null,
            "config": null,
            "lines": [
                "ip host junk1 1.1.1.1",
                "ip host junk2 2.2.2.2"
            ],
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "update": "merge"
        }
    },
    "saved": false,
    "time": "06:38:51",
    "updates": [
        "ip host junk2 2.2.2.2",
        "commit"
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP **********************************************************************************************************************************************************************************************************************
leaf                       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Friday 04 February 2022  12:08:51 +0530 (0:00:16.468)       0:00:17.733 *******
===============================================================================
Retrieve Configuration -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 16.47s
/root/os10_collections/config_bkups2.yaml:10 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
root@UBUNTU18-VM-38-024:~/os10_collections#
prasadapr commented 2 years ago

ansible [core 2.12.0]: Find the execution log for reference:

root@Ubuntu20-vm-038-037:~/os10-ansible# ansible-playbook -i inventory.yaml -k config_bkups2.yaml -vvv
ansible-playbook [core 2.12.0]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True
No config file found; using defaults
SSH password:
host_list declined parsing /root/os10-ansible/inventory.yaml as it did not pass its verify_file() method
script declined parsing /root/os10-ansible/inventory.yaml as it did not pass its verify_file() method
Parsed /root/os10-ansible/inventory.yaml inventory source with ini plugin
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: config_bkups2.yaml ****************************************************************************************************************************************************************************************************
1 plays in config_bkups2.yaml

PLAY [Configuration Retrieval Teseting] *****************************************************************************************************************************************************************************************
META: ran handlers
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
[WARNING]: Collection ansible.netcommon does not support Ansible version 2.12.0

TASK [Retrieve Configuration] ***************************************************************************************************************************************************************************************************
task path: /root/os10-ansible/config_bkups2.yaml:9
redirecting (type: connection) ansible.builtin.network_cli to ansible.netcommon.network_cli
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
<100.104.40.187> ESTABLISH LOCAL CONNECTION FOR USER: root
<100.104.40.187> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-1605320s3hoy6ii `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093 `" && echo ansible-tmp-1643960298.2389295-1605331-233962922413093="` echo /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093 `" ) && sleep 0'
Using module file /root/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<100.104.40.187> PUT /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/tmpfh9kpyaa TO /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093/AnsiballZ_os10_config.py
<100.104.40.187> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093/ /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093/AnsiballZ_os10_config.py && sleep 0'
<100.104.40.187> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093/AnsiballZ_os10_config.py && sleep 0'
<100.104.40.187> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960298.2389295-1605331-233962922413093/ > /dev/null 2>&1 && sleep 0'
<100.104.40.187> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-1605320s3hoy6ii `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111 `" && echo ansible-tmp-1643960303.88884-1605331-142546273985111="` echo /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111 `" ) && sleep 0'
Using module file /usr/local/lib/python3.8/dist-packages/ansible/modules/stat.py
<100.104.40.187> PUT /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/tmpmn9rzeaf TO /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/AnsiballZ_stat.py
<100.104.40.187> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/ /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/AnsiballZ_stat.py && sleep 0'
<100.104.40.187> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/AnsiballZ_stat.py && sleep 0'
<100.104.40.187> PUT /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/tmp14i5t96y TO /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/source
<100.104.40.187> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/ /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/source && sleep 0'
Using module file /usr/local/lib/python3.8/dist-packages/ansible/modules/copy.py
<100.104.40.187> PUT /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/tmpx1xif5d7 TO /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/AnsiballZ_copy.py
<100.104.40.187> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/ /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/AnsiballZ_copy.py && sleep 0'
<100.104.40.187> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/AnsiballZ_copy.py && sleep 0'
<100.104.40.187> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-1605320s3hoy6ii/ansible-tmp-1643960303.88884-1605331-142546273985111/ > /dev/null 2>&1 && sleep 0'
changed: [spine] => {
    "backup_path": "/tmp/bkups/junk.txt",
    "changed": true,
    "commands": [
        "ip host junk2 2.2.2.2",
        "commit"
    ],
    "date": "2022-02-04",
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/bkups",
                "filename": "junk.txt"
            },
            "before": null,
            "config": null,
            "lines": [
                "ip host junk1 1.1.1.1",
                "ip host junk2 2.2.2.2"
            ],
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "update": "merge"
        }
    },
    "saved": false,
    "time": "07:38:25",
    "updates": [
        "ip host junk2 2.2.2.2",
        "commit"
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP **********************************************************************************************************************************************************************************************************************
spine                      : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

root@Ubuntu20-vm-038-037:~/os10-ansible#                     

root@Ubuntu20-vm-038-037:/# ls /tmp/bkups/junk.txt
/tmp/bkups/junk.txt
root@Ubuntu20-vm-038-037:/#   
allan-silverstein commented 2 years ago

For me it does not work on ansible 2.12.1. Looks like you tested on ansible-core 2.12.0. Assuming you do retest on version 2.12.1 and it works for you, where do we go from here? I'm running ansible in a python virtual environment and installed ansible-core using pip install ansible-core. Here are my packages... ` pip list Package Version


ansible-core 2.12.1 bcrypt 3.2.0 cffi 1.15.0 cryptography 36.0.1 Jinja2 3.0.3 MarkupSafe 2.0.1 packaging 21.3 paramiko 2.9.2 pip 21.2.4 pycparser 2.21 PyNaCl 1.5.0 pyparsing 3.0.7 PyYAML 6.0 resolvelib 0.5.5 setuptools 58.1.0 six 1.16.0 `

prasadapr commented 2 years ago

@allan-silverstein, yes mine also VM machine with Ubuntu. I have tested with ansible version 2.12.0 and ansible 2.9.26 and for both the version its working fine for me.


root@Ubuntu20-vm-038-037:~/os10-ansible# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
root@Ubuntu20-vm-038-037:~/os10-ansible#

root@Ubuntu20-vm-038-037:~/os10-ansible# ansible --version
ansible [core 2.12.0]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True
root@Ubuntu20-vm-038-037:~/os10-ansible#   
prasadapr commented 2 years ago

@allan-silverstein, i will try to execute on ansible version 2.12.1 also. meanwhile please can you share your playbook which you are testing.

allan-silverstein commented 2 years ago

I included the playbook in the original post (see above under steps to reproduce)

zerwes commented 2 years ago

Hello @prasadapr. Thank you for looking into this. For me it is not working neither. I propose the usage of the updated playbook for us all in order to ensure the presence of the desired backup file from the playbook itself:

---
- name: Configuration Retrieval Teseting
  connection: ansible.netcommon.network_cli
  gather_facts: false
  hosts: all
  collections:
    - dellemc.os10
  vars:
    ansible_command_timeout: 120
    dir_path: /tmp/bkups
    filename: junk.txt
    fp2b_filename: "{{ [dir_path, filename,] | path_join }}"
  tasks:
    - name: ensure old backup file is deleted
      file:
        path: "{{ fp2b_filename }}"
        state: absent
    - name: Retrieve Configuration
      dellemc.os10.os10_config:
        backup: true
        backup_options:
          dir_path: "{{ dir_path }}"
          filename: "{{ filename }}"
        lines:
          - ip host junk1 1.1.1.1
          - no ip host junk1
        save: yes
    - name: check if the backup file exists
      stat:
        path: "{{ fp2b_filename }}"
      register: _statr
    - name: assert the backup file exists
      assert:
        that: _statr.stat.exists
        fail_msg: "gosh darn it! {{ fp2b_filename }} not found!"
        success_msg: "yeah! {{ fp2b_filename }} is there!"
...

And the result is for me:

$ ansible-playbook -i hosts -l swa31ber0.ber0.rosalux.org -D dellos10_fetch_config.yml

PLAY [Configuration Retrieval Teseting] ***************************************************************************************************************************************************************************

TASK [ensure old backup file is deleted] **************************************************************************************************************************************************************************
ok: [swa31ber0.ber0.rosalux.org]

TASK [Retrieve Configuration] *************************************************************************************************************************************************************************************
changed: [swa31ber0.ber0.rosalux.org]

TASK [check if the backup file exists] ****************************************************************************************************************************************************************************
ok: [swa31ber0.ber0.rosalux.org]

TASK [assert the backup file exists] ******************************************************************************************************************************************************************************
fatal: [swa31ber0.ber0.rosalux.org]: FAILED! => {
    "assertion": "_statr.stat.exists",
    "changed": false,
    "evaluated_to": false,
    "msg": "gosh darn it! /tmp/bkups/junk.txt not found!"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
swa31ber0.ber0.rosalux.org : ok=3    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

Are you testing against a real device or a gns3 simulation?

If I find the time, I will try to setup a molecule test with the combination of different OS, ansible and python versions. Greetings to all.

prasadapr commented 2 years ago

@allan-silverstein, as you mentioned i have tested on ansible 2.12.1 and its working fine for me. I have tested with your original playbook (see above under steps to reproduce). but your playbook is not working for me also (means it's not creating the backup directory).

we have to declare collectionsand replace dellemc.os10.os10_config with os10_config in your playbook.

  collections:
   - dellemc.os10
  tasks:
   - name: Retrieve Configuration
     os10_config:

Please execute my below playbook in your ansible server with -vvv option to see the complete log.

EX: ansible-playbook -i inventory.yaml config_bkups2.yaml -vvv

---
- name: Configuration Retrieval Testing
  hosts: datacenter
  gather_facts: false
  connection: network_cli
  collections:
   - dellemc.os10
  tasks:
   - name: Retrieve Configuration
     os10_config:
       backup: true
       backup_options:
         dir_path: /tmp/bkups
         filename:  junk.txt
       lines:
         - ip host junk1 1.1.1.1
         - ip host junk2 2.2.2.2
zerwes commented 2 years ago

hello @prasadapr What about using the playbook above in order to ensure the presence of the desired backup file from the playbook itself? Even using -vvv the error is not directly viewable from the output. One difference I realized in the output: I get the "__backup__" key in the return of the os10_config, but I can not see this in your output ... any idea where this difference comes from?

prasadapr commented 2 years ago

@zerwes, the presence of the desired backup file is not mandatory. without providing the filename and dir_path also we can write the playbook. we can write the playbook in multiple ways. And still i am not getting why it's not working for you and reason for getting the error "__backup__" key in the return of the os10_config.

Possible can you provide output log of the ansible-playbook command with -vvv option for better understanding of the error.

prasadapr commented 2 years ago

@zerwes, Please find the playbook without filename and dir_path. The backup file will be created in the current directory and file name start with hosts name.

root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# cat config_bkups2_Issue-113.yaml
---
- name: Configuration Retrieval Teseting
  hosts: leaf
  gather_facts: false
  connection: network_cli
  collections:
   - dellemc.os10
  tasks:
   - name: Retrieve Configuration
     os10_config:
       backup: true
       backup_options:
         # dir_path: /tmp/bkups
         # filename:  junk.txt
       lines:
         - ip host junk1 1.1.1.1
         - ip host junk2 2.2.2.2
root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# 

Playbook execution and log: ansible-playbook -i inventory.yaml config_bkups2_Issue-113.yaml -vvv

root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# ansible-playbook -i inventory.yaml config_bkups2_Issue-113.yaml -vvv
ansible-playbook [core 2.12.1]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True
Using /etc/ansible/ansible.cfg as config file
host_list declined parsing /root/prasada/os10-ansible-collections/inventory.yaml as it did not pass its verify_file() method
script declined parsing /root/prasada/os10-ansible-collections/inventory.yaml as it did not pass its verify_file() method
Parsed /root/prasada/os10-ansible-collections/inventory.yaml inventory source with ini plugin
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: config_bkups2_Issue-113.yaml ******************************************************************************************************************************************************
1 plays in config_bkups2_Issue-113.yaml

PLAY [Configuration Retrieval Teseting] *****************************************************************************************************************************************************
META: ran handlers
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10

TASK [Retrieve Configuration] ***************************************************************************************************************************************************************
task path: /root/prasada/os10-ansible-collections/config_bkups2_Issue-113.yaml:9
redirecting (type: connection) ansible.builtin.network_cli to ansible.netcommon.network_cli
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
<100.104.40.188> ESTABLISH LOCAL CONNECTION FOR USER: root
<100.104.40.188> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-local-678913rlwjs8pv `"&& mkdir "` echo /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243 `" && echo ansible-tmp-1644211836.727082-678919-64874686197243="` echo /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243 `" ) && sleep 0'
Using module file /root/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<100.104.40.188> PUT /root/.ansible/tmp/ansible-local-678913rlwjs8pv/tmpvvg5krxo TO /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243/AnsiballZ_os10_config.py
<100.104.40.188> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243/ /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243/AnsiballZ_os10_config.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243/AnsiballZ_os10_config.py && sleep 0'
<100.104.40.188> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-local-678913rlwjs8pv/ansible-tmp-1644211836.727082-678919-64874686197243/ > /dev/null 2>&1 && sleep 0'
changed: [leaf] => {
    "backup_path": "/root/prasada/os10-ansible-collections/backup/leaf_config.2022-02-07@05:30:44",
    "changed": true,
    "commands": [
        "ip host junk1 1.1.1.1",
        "ip host junk2 2.2.2.2",
        "commit"
    ],
    "date": "2022-02-07",
    "filename": "leaf_config.2022-02-07@05:30:44",
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": null,
            "before": null,
            "config": null,
            "lines": [
                "ip host junk1 1.1.1.1",
                "ip host junk2 2.2.2.2"
            ],
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": false,
            "src": null,
            "update": "merge"
        }
    },
    "saved": false,
    "shortname": "/root/prasada/os10-ansible-collections/backup/leaf_config",
    "time": "05:30:44",
    "updates": [
        "ip host junk1 1.1.1.1",
        "ip host junk2 2.2.2.2",
        "commit"
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP **********************************************************************************************************************************************************************************
leaf                       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# 
root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# ls backup/leaf_config.2022-02-07@05\:30\:44 
backup/leaf_config.2022-02-07@05:30:44
root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# 

root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# ansible  --version
ansible [core 2.12.1]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True
root@ubuntu20-vm-035-113:~/prasada/os10-ansible-collections# 

root@ubuntu20-vm-035-113:~# ansible-galaxy collection list dellemc.os10

# /root/.ansible/collections/ansible_collections
Collection   Version
------------ -------
dellemc.os10 1.1.1  

# /usr/lib/python3/dist-packages/ansible_collections
Collection   Version
------------ -------
dellemc.os10 1.1.1  
root@ubuntu20-vm-035-113:~# 
zerwes commented 2 years ago

https://github.com/ansible-collections/dellemc.os10/blob/master/plugins/modules/os10_config.py#L287 strange that this result key is not displayed in @prasadapr results ...

zerwes commented 2 years ago

Hello @prasadapr Of course I can post the verbose output again () ~/dellemc.os10-issue113 $ cat dellos10_fetch_config.yml

---
- name: Configuration Retrieval Teseting
  connection: ansible.netcommon.network_cli
  gather_facts: false
  hosts: all
  collections:
    - dellemc.os10
  vars:
    ansible_command_timeout: 120
    dir_path: /tmp/bkups
    filename: junk.txt
    fp2b_filename: "{{ [dir_path, filename,] | path_join }}"
  tasks:
    - name: ensure old backup file is deleted
      file:
        path: "{{ fp2b_filename }}"
        state: absent
    - name: Retrieve Configuration
      dellemc.os10.os10_config:
        backup: true
        backup_options:
          dir_path: "{{ dir_path }}"
          filename: "{{ filename }}"
        lines:
          - ip host junk1 1.1.1.1
          - no ip host junk1
        save: yes
    - name: check if the backup file exists
      stat:
        path: "{{ fp2b_filename }}"
      register: _statr
    - name: assert the backup file exists
      assert:
        that: _statr.stat.exists
        fail_msg: "gosh darn it! {{ fp2b_filename }} not found!"
        success_msg: "yeah! {{ fp2b_filename }} is there!"
...

output:

ansible-playbook [core 2.12.2]
  config file = None
  configured module search path = ['/home/zerwes/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
  ansible collection location = /home/zerwes/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
  jinja version = 2.11.3
  libyaml = True
No config file found; using defaults
host_list declined parsing /home/zerwes/dellemc.os10-issue113/hosts as it did not pass its verify_file() method
script declined parsing /home/zerwes/dellemc.os10-issue113/hosts as it did not pass its verify_file() method
auto declined parsing /home/zerwes/dellemc.os10-issue113/hosts as it did not pass its verify_file() method
Parsed /home/zerwes/dellemc.os10-issue113/hosts inventory source with ini plugin
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: dellos10_fetch_config.yml *******************************************************************************************************************************************************************************
1 plays in dellos10_fetch_config.yml

PLAY [Configuration Retrieval Teseting] ***************************************************************************************************************************************************************************
META: ran handlers

TASK [ensure old backup file is deleted] **************************************************************************************************************************************************************************
task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:14
<172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes
<172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9 `"&& mkdir "` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260 `" && echo ansible-tmp-1644216652.8898544-629268-96687824616260="` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260 `" ) && sleep 0'
Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/file.py
<172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/tmp7hjatxzi TO /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260/AnsiballZ_file.py
<172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260/ /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260/AnsiballZ_file.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260/AnsiballZ_file.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216652.8898544-629268-96687824616260/ > /dev/null 2>&1 && sleep 0'
ok: [swa31ber0.ber0.rosalux.org] => {
    "changed": false,
    "invocation": {
        "module_args": {
            "_diff_peek": null,
            "_original_basename": null,
            "access_time": null,
            "access_time_format": "%Y%m%d%H%M.%S",
            "attributes": null,
            "follow": true,
            "force": false,
            "group": null,
            "mode": null,
            "modification_time": null,
            "modification_time_format": "%Y%m%d%H%M.%S",
            "owner": null,
            "path": "/tmp/bkups/junk.txt",
            "recurse": false,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": null,
            "state": "absent",
            "unsafe_writes": false
        }
    },
    "path": "/tmp/bkups/junk.txt",
    "state": "absent"
}
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10

TASK [Retrieve Configuration] *************************************************************************************************************************************************************************************
task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:18
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
<172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes
<172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9 `"&& mkdir "` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203 `" && echo ansible-tmp-1644216665.7545483-629296-200460643600203="` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203 `" ) && sleep 0'
Using module file /home/zerwes/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py
<172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/tmpoiyfj2l3 TO /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203/AnsiballZ_os10_config.py
<172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203/ /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203/AnsiballZ_os10_config.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203/AnsiballZ_os10_config.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216665.7545483-629296-200460643600203/ > /dev/null 2>&1 && sleep 0'
changed: [swa31ber0.ber0.rosalux.org] => {
    "__backup__": "! Version 10.5.2.3\n! Last configuration change at Feb  07 06:51:04 2022\n ....",
    "changed": true,
    "commands": [
        "ip host junk1 1.1.1.1",
        "no ip host junk1",
        "commit"
    ],
    "invocation": {
        "module_args": {
            "after": null,
            "backup": true,
            "backup_options": {
                "dir_path": "/tmp/bkups",
                "filename": "junk.txt"
            },
            "before": null,
            "config": null,
            "lines": [
                "ip host junk1 1.1.1.1",
                "no ip host junk1"
            ],
            "match": "line",
            "parents": null,
            "provider": null,
            "replace": "line",
            "save": true,
            "src": null,
            "update": "merge"
        }
    },
    "saved": true,
    "updates": [
        "ip host junk1 1.1.1.1",
        "no ip host junk1",
        "commit"
    ]
}

TASK [check if the backup file exists] ****************************************************************************************************************************************************************************
task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:28
<172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes
<172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9 `"&& mkdir "` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967 `" && echo ansible-tmp-1644216709.9096904-629432-8274571957967="` echo /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967 `" ) && sleep 0'
Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/stat.py
<172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/tmpcd7vfqnk TO /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967/AnsiballZ_stat.py
<172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967/ /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967/AnsiballZ_stat.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967/AnsiballZ_stat.py && sleep 0'
<172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-6292641umxg7x9/ansible-tmp-1644216709.9096904-629432-8274571957967/ > /dev/null 2>&1 && sleep 0'
ok: [swa31ber0.ber0.rosalux.org] => {
    "changed": false,
    "invocation": {
        "module_args": {
            "checksum_algorithm": "sha1",
            "follow": false,
            "get_attributes": true,
            "get_checksum": true,
            "get_md5": false,
            "get_mime": true,
            "path": "/tmp/bkups/junk.txt"
        }
    },
    "stat": {
        "exists": false
    }
}

TASK [assert the backup file exists] ******************************************************************************************************************************************************************************
task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:32
fatal: [swa31ber0.ber0.rosalux.org]: FAILED! => {
    "assertion": "_statr.stat.exists",
    "changed": false,
    "evaluated_to": false,
    "msg": "gosh darn it! /tmp/bkups/junk.txt not found!"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
swa31ber0.ber0.rosalux.org : ok=3    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
zerwes commented 2 years ago

we have to declare collectionsand replace dellemc.os10.os10_config with os10_config in your playbook. @prasadapr :+1: this makes the difference!

- name: Retrieve Configuration
-      dellemc.os10.os10_config:
+      os10_config:
backup: true

output:


~/dellemc.os10-issue113 12s $ ansible-playbook -vvv -i hosts dellos10_fetch_config.yml
ansible-playbook [core 2.12.2]
config file = None
configured module search path = ['/home/zerwes/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
ansible collection location = /home/zerwes/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible-playbook
python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
jinja version = 2.11.3
libyaml = True
No config file found; using defaults
host_list declined parsing /home/zerwes/dellemc.os10-issue113/hosts as it did not pass its verify_file() method
script declined parsing /home/zerwes/dellemc.os10-issue113/hosts as it did not pass its verify_file() method
auto declined parsing /home/zerwes/dellemc.os10-issue113/hosts as it did not pass its verify_file() method
Parsed /home/zerwes/dellemc.os10-issue113/hosts inventory source with ini plugin
redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: dellos10_fetch_config.yml *** 1 plays in dellos10_fetch_config.yml

PLAY [Configuration Retrieval Teseting] *** META: ran handlers

TASK [ensure old backup file is deleted] ** task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:14 <172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes <172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4"&& mkdir "echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699" && echo ansible-tmp-1644217003.9609456-630149-258045354600699="echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699" ) && sleep 0' Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/file.py <172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/tmp8y42vg1l TO /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699/AnsiballZ_file.py <172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699/ /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699/AnsiballZ_file.py && sleep 0' <172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699/AnsiballZ_file.py && sleep 0' <172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217003.9609456-630149-258045354600699/ > /dev/null 2>&1 && sleep 0' ok: [swa31ber0.ber0.rosalux.org] => { "changed": false, "invocation": { "module_args": { "_diff_peek": null, "_original_basename": null, "access_time": null, "access_time_format": "%Y%m%d%H%M.%S", "attributes": null, "follow": true, "force": false, "group": null, "mode": null, "modification_time": null, "modification_time_format": "%Y%m%d%H%M.%S", "owner": null, "path": "/tmp/bkups/junk.txt", "recurse": false, "selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, "state": "absent", "unsafe_writes": false } }, "path": "/tmp/bkups/junk.txt", "state": "absent" } redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10

TASK [Retrieve Configuration] ***** task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:18 redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10 redirecting (type: action) dellemc.os10.os10_config to dellemc.os10.os10 <172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes <172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4"&& mkdir "echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534" && echo ansible-tmp-1644217016.8860643-630177-161697297673534="echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534" ) && sleep 0' Using module file /home/zerwes/.ansible/collections/ansible_collections/dellemc/os10/plugins/modules/os10_config.py <172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/tmp5eba48hp TO /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534/AnsiballZ_os10_config.py <172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534/ /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534/AnsiballZ_os10_config.py && sleep 0' <172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534/AnsiballZ_os10_config.py && sleep 0' <172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217016.8860643-630177-161697297673534/ > /dev/null 2>&1 && sleep 0' changed: [swa31ber0.ber0.rosalux.org] => { "backup_path": "/tmp/bkups/junk.txt", "changed": true, "commands": [ "ip host junk1 1.1.1.1", "no ip host junk1", "commit" ], "date": "2022-02-07", "invocation": { "module_args": { "after": null, "backup": true, "backup_options": { "dir_path": "/tmp/bkups", "filename": "junk.txt" }, "before": null, "config": null, "lines": [ "ip host junk1 1.1.1.1", "no ip host junk1" ], "match": "line", "parents": null, "provider": null, "replace": "line", "save": true, "src": null, "update": "merge" } }, "saved": true, "time": "07:57:40", "updates": [ "ip host junk1 1.1.1.1", "no ip host junk1", "commit" ] }

TASK [check if the backup file exists] **** task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:29 <172.31.248.31> ESTABLISH LOCAL CONNECTION FOR USER: zerwes <172.31.248.31> EXEC /bin/sh -c '( umask 77 && mkdir -p "echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4"&& mkdir "echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842" && echo ansible-tmp-1644217060.7911253-630308-168548399412842="echo /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842" ) && sleep 0' Using module file /usr/local/lib/python3.9/dist-packages/ansible/modules/stat.py <172.31.248.31> PUT /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/tmpya9utq02 TO /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842/AnsiballZ_stat.py <172.31.248.31> EXEC /bin/sh -c 'chmod u+x /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842/ /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842/AnsiballZ_stat.py && sleep 0' <172.31.248.31> EXEC /bin/sh -c '/usr/bin/python3 /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842/AnsiballZ_stat.py && sleep 0' <172.31.248.31> EXEC /bin/sh -c 'rm -f -r /home/zerwes/.ansible/tmp/ansible-local-630145b0_45ro4/ansible-tmp-1644217060.7911253-630308-168548399412842/ > /dev/null 2>&1 && sleep 0' ok: [swa31ber0.ber0.rosalux.org] => { "changed": false, "invocation": { "module_args": { "checksum_algorithm": "sha1", "follow": false, "get_attributes": true, "get_checksum": true, "get_md5": false, "get_mime": true, "path": "/tmp/bkups/junk.txt" } }, "stat": { "atime": 1644217060.3921354, "attr_flags": "e", "attributes": [ "extents" ], "block_size": 4096, "blocks": 48, "charset": "us-ascii", "checksum": "06f1bedff2a6535552d9e7ee2bcbea3fca6529d3", "ctime": 1644217060.3921354, "dev": 65025, "device_type": 0, "executable": false, "exists": true, "gid": 1000, "gr_name": "zerwes", "inode": 14287747, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/plain", "mode": "0644", "mtime": 1644217060.3921354, "nlink": 1, "path": "/tmp/bkups/junk.txt", "pw_name": "zerwes", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 21078, "uid": 1000, "version": "1983889355", "wgrp": false, "woth": false, "writeable": true, "wusr": true, "xgrp": false, "xoth": false, "xusr": false } }

TASK [assert the backup file exists] ** task path: /home/zerwes/dellemc.os10-issue113/dellos10_fetch_config.yml:33 ok: [swa31ber0.ber0.rosalux.org] => { "changed": false, "msg": "yeah! /tmp/bkups/junk.txt is there!" } META: ran handlers META: ran handlers

PLAY RECAP **** swa31ber0.ber0.rosalux.org : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

prasadapr commented 2 years ago

@zerwes, now with the collections and os10_config its working fine right. Thank you for the verification and update.

prasadapr commented 2 years ago

Sure @zerwes, will look in to the Issue#114 and will provide the observations and required action will be taken care.

@zerwes, if you are OK, shall we close this issue#113.

zerwes commented 2 years ago

@prasadapr yes, this can be closed; thank you for the clarification.

prasadapr commented 2 years ago

Thanks @zerwes for the confirmation, so i am closing this issue.

allan-silverstein commented 2 years ago

Thank you @prasadapr , this now works for me also.

prasadapr commented 2 years ago

Thanks @allan-silverstein for the update.