Filöverföring över SCP

Jag brottades med att få filöverföring över SCP att fungera i Ansible med de inbyggda modulerna till Cisco-routrar. Det funkade inte. 

 Det som till slut fungerade var att slå Linux-kommandon med ansible.builtin.command . 

 - name: Kopiera image från lokal maskin till routern via SCP

 ansible.builtin.command:

 cmd: sshpass -p "{{ ansible_ssh_pass }}" scp -O -o StrictHostKeyChecking=no {{ image_src_path }} {{ ansible_user }}@{{ inventory_hostname }}:{{ image_dest_path }}

 delegate_to: localhost

 when: image_file not in dir_out.stdout[0] 

 sshpass -p används här för att ta lösenordet man matar in när man kör jobbet med flaggan -k, men man kan köra utan och manuellt slå lösenord varje gång jobbet sker. 

 Här är ett filöverföringsjobb för att ladda över IOS-XE mjukvara och NBAR-fil: 

 ---

- name: Ladda upp IOS-XE mjukvara till routrar

 hosts: all

 gather_facts: no

 vars:

 image_file: "cat9k_iosxe.17.12.06.SPA.bin"

 image_src_path: "/data/dir/c9300-c9500/17.12.6/{{ image_file }}"

 image_dest_path: "bootflash:{{ image_file }}"

 ansible_command_timeout: 7200 # 2 timmar

 nbar_file: "pp-adv-cat9k-1712.1-49-74.0.0.pack"

 nbar_src_path: "/data/dir/c9300-c9500/17.12.6/{{ nbar_file }}"

 nbar_dest_path: "bootflash:{{ nbar_file }}"

 tasks:

 - name: Print paths

 ansible.builtin.debug:

 msg:

 - "image_src_path: {{ image_src_path }}"

 - "image_dest_path: {{ image_dest_path }}"

 - name: Kontrollera om IOS-XE image redan finns

 cisco.ios.ios_command:

 commands:

 - "dir bootflash: | include {{ image_file }}"

 register: dir_out

 - name: Ta bort oanvända IOS-XE filer (install remove inactive)

 ansible.netcommon.cli_command:

 command: "install remove inactive"

 prompt: "Do you want to remove the above files\\? \\[y/n\\]"

 answer: "y"

 when: image_file not in dir_out.stdout[0]

 - name: Kopiera IOS-XE image från lokal maskin till routern via SCP

 ansible.builtin.command:

 cmd: sshpass -p "{{ ansible_ssh_pass }}" scp -O -o StrictHostKeyChecking=no {{ image_src_path }} {{ ansible_user }}@{{ inventory_hostname }}:{{ image_dest_path }}

 delegate_to: localhost

 when: image_file not in dir_out.stdout[0]

 - name: Verifiera att filen finns på routern

 cisco.ios.ios_command:

 commands:

 - "dir bootflash: | include {{ image_file }}"

 register: verify_dir

 failed_when: image_file not in verify_dir.stdout[0]

 - name: Kontrollera om NBAR-filen redan finns på routern

 cisco.ios.ios_command:

 commands:

 - "dir bootflash: | include {{ nbar_file }}"

 register: dir_out_nbar

 - name: Kopiera NBAR-fil från lokal maskin till routern via SCP

 ansible.builtin.command:

 cmd: sshpass -p "{{ ansible_ssh_pass }}" scp -O -o StrictHostKeyChecking=no {{ nbar_src_path }} {{ ansible_user }}@{{ inventory_hostname }}:{{ nbar_dest_path }}

 delegate_to: localhost

 when: dir_out_nbar.stdout[0] is search(nbar_file) == False

 - name: Verifiera att NBAR-filen finns på routern

 cisco.ios.ios_command:

 commands:

 - "dir bootflash: | include {{ nbar_file }}"

 register: verify_dir_nbar

 failed_when: verify_dir_nbar.stdout[0] is search(nbar_file) == False

 

  