Ansible задача для создания пользователя с циклами и проверками - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь создать задачу, в которой я могу настроить пользователей на основе группы сред и типов серверов, когда запускаю задачу для указанных c env и server. Например, допустим, что я запускаю playbook на серверах oracle для производства, задача должна добавлять только user1, а не user2.

Итак, я установил этот способ так:

"internal_users": [
  {
    "username": user1,
    "comment": "Name of the User",
    "password": "$1$D3d32t4t53y5ytyttgtuudhkjfgt!fdfsdf.",
    "env": ["prod","uat"],
    "hosts": ["apache","oracle"]
  },
  {
    "username": user2,
    "comment": "Name of the User2",
    "password": "$1$D3d32t4t53y5fdfvrgrt45234fdfsdf.",
    "env": ["uat"],
    "hosts": ["apache","oracle"]
  }
]

Я полагаю, что могу получить реальный env и сервер, на котором я запускаю playbook, используя переменную vars['env'] для среды и inventory_hostname.

Тогда задача:

- name: Create Internal users
  vars: 
    env: "{{ vars['env'] }}"
    host: "{{ inventory_hostname }}"
  user:
    name: "{{ item.username }}"
    comment: "{{ item.comment }}"
    groups: wheel,internal_users
    append: yes
    shell: /bin/bash
    password: "{{ item.password }}"
    update_password: on_create
  when: env in item.hosts
  with_dict: "{{ internal_users }}"

Не работает, может кто-нибудь помочь с логикой c, чтобы она заработала?

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Переменная «internal_users» - это список, а не словарь. «l oop» должен использоваться вместо «with_dict». Например, задача, запущенная на "oracle"

    - name: Create Internal users
      debug:
        msg:
          - "{{ item.username }}"
          - "{{ item.comment }}"
          - "{{ item.password }}"
      loop: "{{ internal_users }}"
      when:
        - env in item.env
        - host in item.hosts
      vars: 
        env: uat
        host: "{{ inventory_hostname }}"

, дает

    "msg": [
        "user1", 
        "Name of the User", 
        "$1$D3d32t4t53y5ytyttgtuudhkjfgt!fdfsdf."
    ]

    "msg": [
        "user2", 
        "Name of the User2", 
        "$1$D3d32t4t53y5fdfvrgrt45234fdfsdf."
    ]
0 голосов
/ 17 апреля 2020

Вот последняя рабочая задача:

- name: Create Internal users
  vars: 
    env: "{{ vars['env'] }}"
    host: "{{ group_names[0] }}"
  user:
    name: "{{ item.username }}"
    comment: "{{ item.comment }}"
    groups: wheel,internal_users
    append: yes
    shell: /bin/bash
    password: "{{ item.password }}"
    update_password: on_create
  when:
    - env in item.env
    - host in item.hosts
  loop: "{{ internal_users }}"

Спасибо Владимиру Ботке за помощь.

...