2015-12-17 13 views
5

Ecco il file di magazzinoAnsible porto cambiamento ssh nel playbook

--- 
[de-servers] 
192.26.32.32 

[uk-servers] 
172.21.1.23 
172.32.2.11 

e il mio Playbook è simile a questa:

- name: Install de-servers configurations 
    hosts: de-servers 
    roles: 
    - de-server-setup 

- name: Install uk-servers configurations 
    hosts: uk-servers 
    roles: 
    - uk-server-setup 

- name: Do some other job on de-servers (cannot be done until uk-servers is installed) 
    hosts: de-servers 
    roles: 
    - de-servers-rest-of-jobs 

Nel ruolo ruolo de-server-setup la porta SSH viene modificata da Da 22 a 8888, quindi quando viene chiamato l'ultimo compito fallisce perché non riesce a connettersi all'host tramite la porta 22. Come superare questa modifica della porta ssh?

risposta

10

nel ruolo de-server-setup aggiungere un compito di modificare la variabile host ansible_ssh_port.

- name: Change ssh port to 8888 
    set_fact: 
    ansible_ssh_port: 8888 
+2

Ciò funzionerebbe solo se si sta eseguendo il playbook per la prima volta, no? – Erfan

5

L'unica cosa che posso pensare potrebbe essere quella di creare alias ssh per gli host. Nel vostro .ssh/config:

Host de.1.before 
    HostName 192.26.32.32 
    Port 22 

Host de.1.after 
    HostName 192.26.32.32 
    Port 8888 

Quindi utilizzare questi alias nel vostro inventario Ansible:

[de-servers-before] 
de.1.before 

[de-servers-after] 
de.1.after 

E i gruppi definiti poi, rispettivamente, nei tuoi giochi:

- name: Install de-servers configurations 
    hosts: de-servers-before 
    roles: 
    - de-server-setup 

- name: Install uk-servers configurations 
    hosts: uk-servers 
    roles: 
    - uk-server-setup 

- name: Do some other job on de-servers (cannot be done until uk-servers is installed) 
    hosts: de-servers-after 
    roles: 
    - de-servers-rest-of-jobs 
3

ho bisogno di cambiare le porte SSH sui padroni di casa che gestisco e voglio usare Ansible per farlo. Essenzialmente, Ansible utilizza la seguente logica per gestire è connessioni SSH:

if self.port is not None: 
     ssh -p {{ self.port }} ... 
    else: 
     ssh ... 

dove "self.port" è la specificazione dall'inventario ospitante, o un override tramite il parametro "-e", o un dichiarazione esplicita di le variabili "ansible_port" e/o "ansible_ssh_port". La soluzione raccomandata per cambiare le porte è "wait_for" e "quando" i moduli in "pre_tasks", ma ci sono molte inadeguatezze a questo approccio, in particolare quando sono coinvolti molti host e soprattutto quando si desidera utilizzare diversi porte su host diversi.

ho clonato e patchato il plugin SSH (versioni 1 e 2) per modificare la logica come segue:

if self.port is not None and self.port is OPEN: 
    ssh -p {{ self.port }} ... 
else: 
    ssh ... 

La patch, di per sé, non apporta modifiche sui nodi di destinazione, ma consente connessioni a avere successo anche se le porte sui nodi non sono ancora state cambiate. Con la patch, ora è molto semplice scrivere i ruoli/attività per cambiare le porte ssh su tutto ciò che si trova nell'inventario dell'host .

Se sei interessato, puoi trovare la patch e campioni di come utilizzarlo a https://github.com/crlb/ansible; il README.md contiene informazioni aggiuntive.

Problemi correlati