it-swarm.com.de

Legen Sie den remote_user für eine Reihe von Aufgaben im Ansible-Playbook fest, ohne diese pro Aufgabe zu wiederholen

Ich erstelle ein Playbook, das zuerst einen neuen Benutzernamen erstellt. Ich möchte dann "moretasks.yml" als den neuen Benutzer ausführen, den ich gerade erstellt habe. Momentan setze ich remote_user für jede Aufgabe. Gibt es eine Möglichkeit, wie ich es für die gesamte Aufgabengruppe einmal festlegen kann? Ich konnte anscheinend keine Beispiele dafür finden, und auch keiner meiner Versuche, remote_user zu bewegen, hat geholfen.

Unten ist 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}}"
8
Shark

Zuallererst möchten Sie sicherlich Sudo_user verwenden (der entfernte Benutzer ist derjenige, der sich anmeldet, Sudo_user ist derjenige, der die Aufgabe ausführt).

In Ihrem Fall möchten Sie die Aufgabe als ein anderer Benutzer (der zuvor erstellte) ausführen, indem Sie Folgendes festlegen:

- include: moretasks.yml
  Sudo: yes
  Sudo_user: "{{ newuser }}"

und diese Aufgaben werden ausgeführt als {{newuser}} (Anführungszeichen nicht vergessen)

Anmerkung: In den meisten Fällen sollten Sie remote_user als Host-Parameter betrachten. Es ist der Benutzer, der sich auf dem Computer anmelden darf und über ausreichende Rechte verfügt, um Dinge zu tun. Für betriebliche Dinge sollten Sie Sudo/Sudo_user verwenden.

7
ProfHase85

Sie könnten dies in separate Stücke aufteilen? (Spielbücher können mehrere Spiele enthalten)

---
- 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

Es gibt einen Fall, in dem separate Spiele verwendet werden: Sie können im ersten Spiel keine mit register: oder set_fact: gesetzten Variablen verwenden, um im zweiten Spiel Dinge zu tun (diese Aussage ist nicht ganz richtig, die Variablen sind in hostvars verfügbar. Ich empfehle jedoch, keine Variablen zwischen Rollen zu verwenden. Definierte Variablen wie in group_vars und Host_vars funktionieren einwandfrei.

Ein weiterer Tipp, den ich geben möchte, ist die Verwendung von roleshttp://docs.ansible.com/playbooks_roles.html . Obwohl es auf den ersten Blick komplizierter erscheint, ist es viel einfacher, sie wiederzuverwenden (wie es bei der "createuser.yml" der Fall zu sein scheint). Wenn Sie sich die Art der Dinge ansehen, die Sie erreichen möchten, wird der Pfad "Alle Dinge einbeziehen" nicht mehr lange dauern.

7

Art von Inline mit Ihrem Problem. Ich hoffe es hilft. Beim Aktualisieren meiner Playbooks für Ansible 2.5-Unterstützung für Cisco IOS network_cli-Verbindung

Mit ansible-vault erstellte Anmeldedatei: auth/secrets.yml

---
creds:
  username: 'ansible'
  password: 'user_password'

Spielbuch:

---
- hosts: ios
  gather_facts: yes
  connection: network_cli
  become: yes
  become_method: enable
  ignore_errors: yes

  tasks:
  - name: obtain login credentials
    include_vars: auth/secrets.yml

  - name: Set Username/ Password
    set_fact:
     remote_user: "{{ creds['username'] }}"
     ansible_ssh_pass: "{{ creds['password'] }}"

  - name: Find info for "{{ inventory_hostname }}" via ios_facts
    ios_facts:
      gather_subset: all
    register: hardware_fact

Laufende Playbook ohne auth/secrets.yml creds:

ansible-playbook -u ansible -k playbook.yml -l inventory_hostname
0
Jose H. Rosa