Ansible управлять пользователями SSH с помощью шаблонов - PullRequest
0 голосов
/ 28 января 2019

У меня есть хорошая книга для добавления более 50 ssh-пользователей для сборки пакета ami.

Вот как выглядит мой файл /playbooks/roles/users/tasks/create_user.yml:

---
- name: "User {{ item.name }}"
  user:
    comment: "Add {{ item.name }} account"
    name: "{{ item.name }}"
    home: "/data/companies/project/{{ item.name }}"
    state: present
    uid: "{{ item.uid }}"
    group: company
    groups: company
    shell: /sbin/nologin
    state: present
    generate_ssh_key: no
    password: "{{ item.password }}"

- name: "Create home directory for {{ item.name }}"
  file:
    path: "/data/companies/project/{{ item.name }}"
    state: directory
    owner: "{{ item.name }}"
    group: company
    mode: 0700

Вот как файл /playbooks/roles/users/vars/main.ymlвыглядит как

---
location: UK
users:
  - name: user1
    password: $6$8T8lH2vS$JKIdqkQmHUHR/s75RYMguPyHTisnNrXIPOjJ9IWxMHB4LY9PJX.3rgkmfLCWAHDi5VYZno2ntlYm7Kkdy0iAZ.
    uid: 601
    location: UK
  - name: user2
    password: $6$8T8lH2vS$JKIdqkQmHUHR/s75RYMguPyHTisnNrXIPOjJ9IWxMHB4LY9PJX.3rgkmfLCWAHDi5VYZno2ntlYm7Kkdy0iAZ
    uid: 602
    location: USA

Вот как выглядит мой "/playbooks/roles/users/tasks/main.yml"

---
 - name: Create users based on location
   include: create_users.yml
   loop: "{{ users | selectattr('location', 'equalto', location) | list }}"

Когда соответствующая сборка упаковщика была запущена, нетошибки, но user1, user2 и их атрибуты не создаются.

amazon-ebs: TASK [: Create users based on location] ***********************************
    amazon-ebs:
    amazon-ebs: PLAY RECAP *********************************************************************
    amazon-ebs: default                    : ok=10   changed=7    unreachable=0    failed=0
    amazon-ebs:

Может кто-нибудь помочь мне понять, почему пользователи не создаются?Спасибо

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Некоторые дополнительные советы, вы также можете использовать значения по умолчанию.Кроме того, если вы хотите защитить зашифрованные пароли, вы можете сохранить их в Ansible Vault:

users.yml, например:

users:
- name: user1
  uid: 666
  group: group1
  groups: [allusers]
  comment: User One
  home: /home/user1
  shell: /bin/bash

passwords: "{{ vault_passwords }}"

Файл хранилища, который вы шифруете с помощью ansible-vault'команда выглядит (расшифровывается):

passwords:
- name: user1
  password: $6$509875346RH.RAaVNW2iWtf/QJ4zUGaJiEyh.

Пример файла включенных в Playbook задач:

  - name: Set up user accounts
    user:
      name: "{{ item.name }}"
      create_home: '{{ item.createhome | default("no") }}'
      uid: "{{ item.uid }}"
      group: "{{ item.group }}"
      state: '{{ item.state | default("present") }}'
      comment: '{{ item.comment | default("Ansible created comment") }}'
      home: "{{ item.home }}"
      shell: '{{ item.shell | default("/bin/bash") }}'
    with_items: "{{ users }}"

  - name: Set up user account passwords
    user:
      name: "{{ item.name }}"
      password: '{{ item.password | default("*") }}'
    with_items: "{{ passwords }}"
0 голосов
/ 28 января 2019

Обычно это достигается с помощью переменных и циклов.Извлеките все переменные из списка переменных, содержащих словари параметров, затем используйте цикл для чтения и применения.Итак, основываясь на подходе вашей роли:

Создайте файл задач, содержащий две задачи для запуска - /playbooks/roles/users/tasks/create_user.yml:

---

- name: User "{{ item.name }}"
  user:
    comment "{{ item.name }} company account"
    name: "{{ item.name }}"
    home: "/data/company/{{ item.name }}"
    state: present
    uid: 666
    group: company
    groups: company
    shell: /bin/bash
    state: present
    generate_ssh_key: no
    password: "{{ item.password }}"

- name: "Create home directory for {{ item.name }}"
  file:
    path: "/data/company/{{ item.name }}"
    state: directory
    owner: "{{ item.name }}"
    group: company
    mode: 0700

Создайте файл varsсодержащий ваших пользователей - /playbooks/roles/users/vars/main.yml:

---

location: UK   # This will be your default. It can be overridden in a variety of places
users:
  - name: user1
    password: <some password>
    location: US
  - name: user2
    password: <some password>
    location: UK
  - name: user3
    password: <some password>
    location: UK

, затем в /playbooks/roles/users/tasks/main.yml:

---

- name: Create users based on location
  include: create_user.yml
  loop: "{{ users | selectattr('location', 'equalto', location) | list }}"

Надеюсь, большинство из них говорит само за себя.Поскольку вы используете роль, поместив переменную users в /playbooks/roles/users/vars/main.yml, переменная автоматически становится доступной.Выражение users | selectattr('location', 'equalto', location) принимает переменную user и фильтрует список, чтобы включить в него только те объекты, у которых элемент 'location' равен значению, указанному в переменной 'location'.

Переменные

Петли

Роли

...