2016-02-01 17 views
8

Sto provando a eseguire uno script python da uno script ansible. Penserei che sarebbe una cosa facile da fare, ma non riesco a capirlo. Ho una struttura di progetto come questo:Esecuzione di script Python tramite ansible

playbook-folder 
    roles 
    stagecode 
     files 
     mypythonscript.py 
     tasks 
     main.yml 
    release.yml 

che sto cercando di eseguire mypythonscript.py all'interno di un compito in main.yml (che è un ruolo utilizzato in release.yml). Ecco il compito:

- name: run my script! 
    command: ./roles/stagecode/files/mypythonscript.py 
    args: 
    chdir: /dir/to/be/run/in 
    delegate_to: 127.0.0.1 
    run_once: true 

Ho anche provato ../files/mypythonscript.py. Pensavo che il percorso per ansible sarebbe stato relativo al playbook, ma immagino di no?

Ho anche provato il debug per capire dove sono nel mezzo della sceneggiatura, ma senza fortuna neanche lì.

- name: figure out where we are 
    stat: path=. 
    delegate_to: 127.0.0.1 
    run_once: true 
    register: righthere 

- name: print where we are 
    debug: msg="{{righthere.stat.path}}" 
    delegate_to: 127.0.0.1 
    run_once: true 

Che stampa ".". Così utile ...

risposta

11

Se si desidera essere in grado di utilizzare un percorso relativo per il proprio script anziché un percorso assoluto, è preferibile utilizzare lo role_path magic variable per trovare il percorso del ruolo e lavorare da lì.

Con la struttura che si sta utilizzando in questione Il seguente dovrebbe funzionare:

- name: run my script! 
    command: ./mypythonscript.py 
    args: 
    chdir: "{{ role_path }}"/files 
    delegate_to: 127.0.0.1 
    run_once: true 
+0

Ciò potrebbe rovinare la mia directory in cui intendo eseguire lo script python, ma suppongo di poterlo passare come parametro allo script python. Grazie! – CorayThan

+1

Quindi basta cambiare la riga 'command' a' comando: ./ "{{role_path}}"/files/mypythonscript.py' se lo script Python deve essere eseguito da un percorso specifico (e ovviamente cambiare il 'chdir' arg al percorso che vuoi che sia) – ydaetskcoR

14

tenta di utilizzare lo script direttiva, funziona per me

mia main.yml

--- 
- name: execute install script 
    script: get-pip.py 

e get-pip.py il file deve essere nei file nello stesso ruolo

+0

Questa è la risposta migliore e non sono nemmeno sicuro del motivo per cui non l'ho suggerito diversamente da quello che segue più da vicino il codice originale dell'OP. Utilizzare i ruoli e quindi utilizzare lo zucchero sintattico che li circonda come i percorsi di ricerca di script/file e modelli ecc. – ydaetskcoR

Problemi correlati