Ansible:如何在一定范围内创建uid

时间:2018-02-15 17:06:07

标签: ansible user-roles uid

我目前正在安装安装了ansible的主机。我创建了2个带有nologin的组的应用程序帐户,并且在该组中我想添加用户,以便每个部门都有自己的ansible目录。

我的vars如下所示:

---
- hosts: localhost
  become: yes

  vars:
    ansible_groupuser:
    - name: "ansible-dictators"
      ansible_groupuser_uid: "3000" 
      ansible_users:
      - idia
      - josefs
      - donaldt
      - kimjongu

    - name: "ansible-druglords"
      ansible_groupuser_uid: "3001"
      ansible_users:
      - pabloe
      - javierg
      - frankl
      - rossu

现在我有2场比赛。 1创建Groupuser:

# This creates the groupuser 
- name: Play 1 Create central ansible user and group per department
  user:
    name: "{{ item.name }}"
    shell: "/sbin/nologin"
    home: "/home/{{ item.name }}"
    comment: "{{ item.name }} Group Account"
    uid: "{{ item.ansible_groupuser_uid }}"
    append: "yes"
  with_items:
    - "{{ansible_groupuser}}"

和1创建“普通”用户:

- name: Play 2 Create users
  user:
    name: "{{ item.1 }}"
    shell: "/bin/bash"
    home: "/home/{{ item.1 }}"
    comment: "{{ item.1 }}"
    groups: "{{ item.0.name }}"
    append: "yes"
  with_subelements:
    - "{{ ansible_groupuser }}" 
    - ansible_users

如果我运行这个游戏,它会在3000上创建groupuser ansible-dictators,在3001上创建ansible-druglords .idia获得3002,josefs获得3003等等。当我想添加像ansible-rockstars这样的第3组用户时,它会变得有点混乱,它开始计算在第一个可用的uid,3010。我想要的是将组用户和普通用户放在两个不同的范围内(例如2000和3000)

当我在第一场比赛中执行with_together时,如下所示,它可以工作:

- name: Play1 Create central ansible user and group per department
  user:
    name: "{{ item.0.name }}"
    shell: "/sbin/nologin"
    home: "/home/{{ item.0.name }}"
    comment: "{{ item.0.name }} Group Account"
    uid: "{{ item.1 }}"
    append: "yes"
  with_together:
    - "{{ansible_groupuser}}"
    - "{{ range(3000,3020)|list }}"
  when: item.0 != None

但是当我在第二场比赛中执行with_together时,它不起作用:

- name: Create users
  user:
    name: "{{ item.1 }}"
    shell: "/bin/bash"
    home: "/home/{{ item.1 }}"
    comment: "{{ item.1 }}"
    groups: "{{ item.0.name }}"
    append: "yes"
    uid: "{{ item.2 }}"
  with_together:
    - "{{ ansible_groupuser }}" 
    - ansible_users
    - "{{ range(2000,2020)|list }}"

任何人都有一个建议如何在一定范围内使用uid进行第二次游戏?或者另一个建议如何让uid在不同的组中?给团体用户一个在vars中的uid是没问题的。但我期待很多“普通”用户添加(+50),我不想为所有这些用户指定一个uid。

希望它有意义。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为range(...)方法有一个缺陷:如果您将来从列表中删除某些用户,后续条目的ID将会更改,您最终可能会在系统上获得混乱的文件权限。

您可以修补user模块以支持基础--firstuid命令的--lastuid / adduser参数,因此您可以为uid生成设置不同的范围。

但我建议你定义"静态"您的vars文件中的顶级用户的uid(来自某些预定义范围,例如:3000..30xx) - 这样您就可以在将来安全地添加/删除顶级用户/组。

离开"普通"用户自动获取ID,因此添加/删除它们不会弄乱您的ID。如果您希望他们来自某个特定范围,您可以使用/etc/adduser.conf / FIRST_UID=5000修改系统级LAST_UID=6000