Skip to content

Instantly share code, notes, and snippets.

@pirate
Created September 22, 2024 23:21
Show Gist options
  • Save pirate/11ead1ebbb6638e275232bc822900b0c to your computer and use it in GitHub Desktop.
Save pirate/11ead1ebbb6638e275232bc822900b0c to your computer and use it in GitHub Desktop.
Ansible playbook to create a new user with a random available uid & gid
- name: Determine available groups
getent:
database: group
- name: Add additional groups to user
user: name="{{user}}" groups="{{item}}" append=yes
when: item in ansible_facts.getent_group
with_items:
- sudo
- wheel
---
- hosts: my_host
become: true
tasks:
- name: determine available groups
getent:
database: group
- name: determine available users
getent:
database: passwd
- name: set group with gid 1900 when not available
group:
name:
gid: 1900
when:
- "'' not in ansible_facts.getent_group"
- "'1900' not in item.value"
loop: "{{ ansible_facts.getent_group | dict2items }}"
- name: set group with gid 2020 when not available
group:
name:
gid: 2020
when:
- "'' not in ansible_facts.getent_group"
- "'2020' not in item.value"
loop: "{{ ansible_facts.getent_group | dict2items }}"
- name: create random number
set_fact:
random_num: "{{ range(1500, 2000) | random(seed=item) }}"
run_once: yes
with_items:
- string
- name: set group with random gid when 2020 already in use
group:
name:
gid: "{{ random_num }}"
when:
- "'' not in ansible_facts.getent_group"
- "'2020' in item.value"
loop: "{{ ansible_facts.getent_group | dict2items }}"
- name: set fact when exists
set_fact:
user_exists: true
when: '"" in item.key'
loop: "{{ ansible_facts.getent_passwd | dict2items }}"
- name: set fact when does not exists
set_fact:
user_exists: false
when: '"" not in item.key'
loop: "{{ ansible_facts.getent_passwd | dict2items }}"
- name: set user with uid 1900, and group when not available
user:
name:
uid: 1900
group:
when:
- not user_exists
- "'1900' not in item.value[1]"
loop: "{{ ansible_facts.getent_passwd | dict2items }}"
- name: set user with uid 2020, and group when not available
user:
name:
uid: 2020
group:
when:
- not user_exists
- "'2020' not in item.value[1]"
loop: "{{ ansible_facts.getent_passwd | dict2items }}"
- name: set user with random uid, and group when not available
user:
name:
uid: "{{ random_num }}"
group:
when:
- not user_exists
- "'2020' in item.value[1]"
loop: "{{ ansible_facts.getent_passwd | dict2items }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment