2014-12-05 8 views
6

Sto creando un libro di esercizi che prima crea un nuovo nome utente. Quindi voglio eseguire "moretasks.yml" come quel nuovo utente che ho appena creato. Attualmente, sto impostando remote_user per ogni attività. C'è un modo in cui posso impostarlo per l'intera serie di compiti una volta? Non riesco a trovare esempi di questo, né alcuno dei miei tentativi di spostare remote_user in aiuto.Imposta utente_remoto per un insieme di attività nella cartella di gioco Ansible senza ripeterlo per attività

Di seguito main.yml:

--- 
- name: Configure Instance(s) 
    hosts: all 
    remote_user: root 
    gather_facts: true 

    tags: 
    - config 
    - configure 

    tasks: 
    - include: createuser.yml new_user=username 
    - include: moretasks.yml new_user=username 
    - include: roottasks.yml #some tasks unrelated to username. 

moretasks.yml:

--- 
    - name: Task1 
    copy: 
     src: /vagrant/FILE 
     dest: ~/FILE 
    remote_user: "{{newuser}}" 

    - name: Task2 
    copy: 
     src: /vagrant/FILE 
     dest: ~/FILE 
    remote_user: "{{newuser}}" 

risposta

7

Prima di tutto si desidera sicuramente utilizzare sudo_user (l'utente remoto è quello che accede, sudo_user è quello che esegue l'attività).

Nel tuo caso si desidera eseguire l'operazione come un altro utente (quello creato in precedenza) è sufficiente impostare:

- include: moretasks.yml 
    sudo: yes 
    sudo_user: "{{ newuser }}" 

e quei compiti verrà eseguito come {{}} newuser (Non dimenticare il Preventivi)

Nota: nella maggior parte dei casi è necessario considerare remote_user come parametro host. È l'utente che è autorizzato ad accedere alla macchina e che ha diritti sufficienti per fare le cose. Per le cose operative dovresti usare sudo/sudo_user

+2

Pensavo che sudo_user fosse quello che veniva eseguito solo se avevi bisogno di fare qualche azione sudo? Voglio sottolineare che gli utenti che sto creando non hanno privilegi sudo. Tutte le azioni in "moretasks" sono locali nella loro casa. È ancora appropriato (fuorviante?) Utilizzare l'approccio sudo_user? (L'approccio ha funzionato) – Shark

+0

Hai ragione, @Shark. Da doc, sudo_user: questo è l'utente predefinito da sudo se --sudo-utente non è specificato o 'sudo_user' non è specificato in una cartella di gioco Ansible. L'impostazione predefinita è la più logica: 'root'. – Esteban

+2

Si noti che 'sudo' e' sudo_user' sono stati deprecati a favore di 'become' e' become_user'. http://docs.ansible.com/ansible/become.html#become – kkurian

7

Si potrebbe dividere questo fino in ai giochi separati? (Playbook possono contenere più giochi)

--- 
- name: PLAY 1 
    hosts: all 
    remote_user: root 
    gather_facts: true 

    tasks: 
    - include: createuser.yml new_user=username 
    - include: roottasks.yml #some tasks unrelated to username. 

- name: PLAY 2 
    hosts: all 
    remote_user: username 
    gather_facts: false 

    tasks: 
    - include: moretasks.yml new_user=username 

C'è un Gotcha utilizzando giochi separati: non è possibile utilizzare variabili impostate con register: o set_fact: nel primo gioco a fare le cose nel secondo gioco (questa affermazione è non del tutto vero, le variabili sono disponibili in hostvars, ma consiglio di non utilizzare variabili tra ruoli). Le variabili definite come in group_vars e host_vars funzionano bene.

Un altro suggerimento che vorrei dare è quello di utilizzare roleshttp://docs.ansible.com/playbooks_roles.html. Anche se all'inizio potrebbe sembrare più complicato, è molto più facile riusarli (come sembra che tu stia facendo con "createuser.yml"). Osservando il tipo di cose che stai cercando di ottenere, il percorso "include tutte le cose" non durerà molto più a lungo.

+0

@ La risposta di ProfHase85 è corretta, non ho capito il fatto che nel tuo caso non hai bisogno di accedere come "nuovo utente". Lasciare ancora la risposta, dividere i quaderni e utilizzare i ruoli sono suggerimenti validi. –

+0

Sì, sto solo iniziando la struttura di questo codice base. Dato che diventa più elaborato, probabilmente cercherò di vedere quanto possano essere efficaci i ruoli. Per me, sembrava proprio un modo per fare riferimento a diversi file yml senza in realtà "includerli". Non sembrava aggiungere funzionalità che non potevi realizzare altrimenti – Shark

Problemi correlati