Citrix ADC (NetScaler) Backup mit Ansible
Table of Contents
Beschreibung
Citrix ADC, bis vor einer Weile noch als Citrix NetScaler bekannt ist eine Netzwerk Appliance welche als Access Gateway und Proxy verwendet werden kann. In diesem Artikel werden wir ein kleines Ansible Playbook schreiben, mit welchem man einen Citrix ADC sichern kann.
Ansible Config
Als erster Schritt definieren wir die Ansible Konfiguration: ansible.cfg
[defaults]
interpreter_python=auto_silent
[ssh_connection]
# allows new host keys once
ssh_args = -o StrictHostKeyChecking=accept-new
Dabei ist wichtig das du deine Secrets mit dem vault_password_file
verschlüsselst.
Inventar
Nun erstellen wir uns eine Datei inventory.yaml
mit dem folgenden Inhalt:
---
# yamllint disable rule:line-length
all:
hosts:
children:
citrix_adc:
hosts:
netscaler01
netscaler02
die Hosts müssen dabei natürlich den FQDN Namen deiner ADCs entsprechen.
Playbook
Auch das Playbook selbst ist nicht sehr spannend, von hier aus werden wir dann die Rolle mit dem eigentlich spannenden Inhalt anstossen: playbook.yaml
---
- hosts: citrix_adc
gather_facts: false
roles:
- citrix_adc
Rolle citrix_adc
Nun kommt der Spannende Inhalt, wir erstellen nun folgende Ordnerstruktur und main.yaml Dateien:
└── roles └── citrix_adc ├── tasks │ └── main.yaml └── vars └── main.yaml
der Inhalt der task/main.yaml
Datei ist wiefolgt:
---
# yamllint disable rule:line-length
- name: Delete all old backups from local
delegate_to: localhost
file:
path: "{{ dest_path }}/{{ inventory_hostname }}"
state: absent
- name: Generate new Citrix ADC system backup
delegate_to: localhost
command: ssh -l backuper {{ inventory_hostname }} "create system backup -level full {{ backup_file }}"
register: command_result
failed_when: "'Resource already exists' in command_result.stdout"
- name: Create new empty directory
delegate_to: localhost
file:
path: "{{ dest_path }}/{{ inventory_hostname }}"
state: directory
mode: '0755'
- name: Download backup file from Citrix ADC to local folder
delegate_to: localhost
command: /bin/scp backuper@{{ inventory_hostname }}:/var/ns_sys_backup/{{ backup_file }}.tgz {{ dest_path }}/{{ inventory_hostname }}/{{ backup_file }}.tgz
- name: delete backup from ADC
delegate_to: localhost
command: ssh -l backuper {{ inventory_hostname }} "rm backup {{ backup_file }}.tgz"
der Inhalt der vars/main.yaml
Datei ist wiefolgt:
---
# yamllint disable rule:line-length
dest_path: "/var/git/ndcb-data"
backup_file: "backup_full_{{ inventory_hostname }}_{{ lookup('pipe','date +%Y-%m-%d-%H') }}"
Secrets
Was noch fehlt sind die Secrets. Wir werden jedoch in diesem Fall gar keine Secrets verwenden, sondern direkt mit SSH-Key Authentifizieren. Dazu mussst du auf deinem Gerät einen neues SSH-Key Pair generieren und anschliessend wie folgt auf den Citrix ADCs als authorized keys erlauben:
- Auf ADCs einloggen und unter diesem Pfad dein PublicKey eintragen: /nsconfig/ssh/authorized_keys :
ssh-rsa AAAAB3NzaC1.....
- Anschliessend kannst du den Citrix ADC Host neustarten (z.b. wenn er nur im Seconday Mode ist), noch einfacher ist, wenn du einfach den sshd Service neustartest, was auf dem Citrix ADC relativ brachial ist:
kill -HUP `cat /var/run/sshd.pid`
Run
Das Playbook kann nun wiefolgt ausgeführt werden:
ansible-playbook playbook.yaml -i inventory.yaml