Wie kann ein Benutzer über Ansible die Shell ändern?

Wie kann ein Benutzer über Ansible die Shell ändern?

Ich habe ein Ansible-Playbook:

---
- hosts: servers
  gather_facts: false
  become: yes
  ignore_errors: yes
  tasks:
  - include_vars: users.yml

  - name: Check that user exists
    shell: "grep -q {{item.username}} /etc/passwd"
    ignore_errors: yes
    with_items: "{{ users }}"
    register: userexist

  - name: Block user
    user:
      name: "{{ item.username }}"
      shell: /bin/false
    when: userexist is succeeded
    with_items: "{{ userexist.results }}"

Und das Playbook funktioniert korrekt, aber wenn in der Datei /etc/passwd kein Benutzer vorhanden ist, überspringt das Playbook die Aufgabe „Benutzer blockieren“, da „rc“: 1 erhalten wird. Wie kann „rc“: 1 korrekt ignoriert und die Aufgabe „Benutzer blockieren“ ausgeführt werden, wenn der Benutzer nicht vorhanden ist?

Antwort1

Sie müssen sicherstellen, dass beide Aufgaben für jeden Eintrag Ihrer Liste zusammen ausgeführt werden. Derzeit wird nur ein Benutzername aus der ersten Aufgabe in der zweiten verwendet.

Theoretisch wäre das ideal fürEin Block, aber Sie können einen Block nicht mit einer Schleife kombinieren. Um dies zu umgehen, können Sie die eigentlichen Aufgaben in eine andere .yml-Datei verschieben, die Sie einbinden:

Datei:

---
- hosts: servers
  gather_facts: false
  become: yes
  vars:
    users:
      - blah: blubb
        username: nagios
      - blubb: bleh
        username: foobar
  tasks:
  - name: set shell
    include_tasks: set_shell.yml
    loop: "{{ users }}"

set_shell.yml

---
- name: Check that user exists
  shell: "grep -q {{ item.username }} /etc/passwd"
  ignore_errors: yes
  register: userexist
- name: Block user
  user:
    name: "{{ item.username }}"
    shell: /bin/false
  when: userexist is succeeded

Dadurch werden beide Aufgaben nacheinander für jeden Benutzer in Ihrer Liste ausgeführt.

verwandte Informationen