ansible을 통해 사용자의 쉘을 어떻게 변경할 수 있습니까?

ansible을 통해 사용자의 쉘을 어떻게 변경할 수 있습니까?

Ansible 플레이북이 있습니다.

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

그리고 플레이북은 올바르게 작동하지만 /etc/passwd 파일에 사용자가 없으면 플레이북은 "rc"를 가져오기 때문에 "Block user" 작업을 건너뜁니다. 1. "rc": 1을 올바르게 무시하고 실행할 수 있는 방법 사용자가 없을 때 "사용자 차단" 작업을 수행하시겠습니까?

답변1

목록의 모든 항목에 대해 두 작업이 함께 실행되는지 확인해야 합니다. 현재는 첫 번째 작업의 사용자 이름 하나만 두 번째 작업에서 사용됩니다.

이론적으로 이것은 다음과 같은 경우에 이상적입니다.블록, 그러나 블록을 루프와 결합할 수는 없습니다. 이 문제를 해결하려면 포함된 다른 .yml 파일에서 실제 작업을 이동할 수 있습니다.

플레이북.yml:

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

그러면 목록의 각 사용자에 대해 두 작업이 순차적으로 실행됩니다.

관련 정보