required varaibles / remove append group / blocks in shell
This commit is contained in:
parent
c53f502220
commit
59749462c0
|
@ -6,8 +6,8 @@ retry_files_save_path = /tmp/
|
||||||
inventory=./hosts
|
inventory=./hosts
|
||||||
host_key_checking=False
|
host_key_checking=False
|
||||||
gathering = smart
|
gathering = smart
|
||||||
#stdout_callback=unixy
|
stdout_callback=unixy
|
||||||
stdout_callback=debug
|
#stdout_callback=debug
|
||||||
|
|
||||||
[privilege_escalation]
|
[privilege_escalation]
|
||||||
become=True
|
become=True
|
||||||
|
|
|
@ -5,28 +5,39 @@ user_groups:
|
||||||
- name: mysecondgroup
|
- name: mysecondgroup
|
||||||
gid: 702
|
gid: 702
|
||||||
state: absent
|
state: absent
|
||||||
|
- name: admin
|
||||||
|
gid: 703
|
||||||
|
state: present
|
||||||
|
|
||||||
|
|
||||||
users:
|
users:
|
||||||
- name: remember
|
- name: remember
|
||||||
state: present
|
state: present
|
||||||
password: "blabla"
|
password: "blabla"
|
||||||
groups:
|
groups:
|
||||||
- mygroup
|
- mygroup
|
||||||
|
- admin
|
||||||
uid: 1100
|
uid: 1100
|
||||||
|
enable_sudo: false
|
||||||
keys:
|
keys:
|
||||||
- file: key1
|
- file: key1
|
||||||
state: present
|
state: present
|
||||||
bash_lines:
|
bash_lines:
|
||||||
- line: "testline"
|
- line: "#testline"
|
||||||
state: present
|
state: present
|
||||||
- line: "export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh"
|
- line: "export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh"
|
||||||
state: present
|
state: present
|
||||||
- line: "alias ls='ls lah'"
|
- line: "alias ls='ls lah'"
|
||||||
state: present
|
state: present
|
||||||
|
bash_blocks:
|
||||||
|
- content: |
|
||||||
|
#testing
|
||||||
|
#multiline
|
||||||
|
state: absent
|
||||||
ssh_config:
|
ssh_config:
|
||||||
- ServerAliveInterval: 10
|
- ServerAliveInterval: 10
|
||||||
- name: test
|
- name: test
|
||||||
|
state: present
|
||||||
keys:
|
keys:
|
||||||
- file: key2
|
- file: key2
|
||||||
state: absent
|
state: absent
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
group: "{{ item.item.name }}"
|
group: "{{ item.item.name }}"
|
||||||
mode: 0600
|
mode: 0600
|
||||||
state: touch
|
state: touch
|
||||||
when: item.stat.exists == False
|
when: item.stat.exists == False and item.item.state == "present"
|
||||||
with_items:
|
with_items:
|
||||||
- "{{ sshconfig.results }}"
|
- "{{ sshconfig.results }}"
|
||||||
no_log: True
|
no_log: True
|
||||||
|
@ -42,3 +42,4 @@
|
||||||
- "{{ users }}"
|
- "{{ users }}"
|
||||||
- ssh_config
|
- ssh_config
|
||||||
- skip_missing: true
|
- skip_missing: true
|
||||||
|
when: item.0.state == "present"
|
||||||
|
|
|
@ -17,11 +17,15 @@ Ansible roles to create/configure users on Linux/FreeBSD.
|
||||||
| password | string of an encrypted value(1) | string |
|
| password | string of an encrypted value(1) | string |
|
||||||
| groups | additional groups the user should belong to | list |
|
| groups | additional groups the user should belong to | list |
|
||||||
| uid | optionally specify a user id | int |
|
| uid | optionally specify a user id | int |
|
||||||
|
| enable_sudo | Enable passwordless sudo for the given user | bool |
|
||||||
| keys | list of dictionaries | list |
|
| keys | list of dictionaries | list |
|
||||||
| bash_lines | configure lines in .bashrc | list |
|
| bash_lines | configure lines in .bashrc | list |
|
||||||
|
| bash_blocks | configure lines in .bashrc | list |
|
||||||
| csh_lines | configure lines in .cshrc | list |
|
| csh_lines | configure lines in .cshrc | list |
|
||||||
|
| csh__blocks | configure lines in .cshrc | list |
|
||||||
|
|
||||||
(1) https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module
|
(1) https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module
|
||||||
|
|
||||||
## Default variables
|
## Default variables
|
||||||
The default shells depending on the OS are:
|
The default shells depending on the OS are:
|
||||||
|
|
||||||
|
@ -45,6 +49,7 @@ users:
|
||||||
groups:
|
groups:
|
||||||
- mygroup
|
- mygroup
|
||||||
uid: 1100
|
uid: 1100
|
||||||
|
enable_sudo: true
|
||||||
keys:
|
keys:
|
||||||
- file: key1
|
- file: key1
|
||||||
state: present
|
state: present
|
||||||
|
@ -53,7 +58,13 @@ users:
|
||||||
state: present
|
state: present
|
||||||
- line: "alias ls='ls lah'"
|
- line: "alias ls='ls lah'"
|
||||||
state: present
|
state: present
|
||||||
|
bash_blocks:
|
||||||
|
- content: |
|
||||||
|
#testing
|
||||||
|
#multiline
|
||||||
|
state: present
|
||||||
- name: test
|
- name: test
|
||||||
|
enable_sudo: false
|
||||||
keys:
|
keys:
|
||||||
- file: key2
|
- file: key2
|
||||||
state: absent
|
state: absent
|
||||||
|
@ -95,6 +106,9 @@ This role allows you to add or remove lines to a user's `.bashrc` or `cshrc` fil
|
||||||
|
|
||||||
Add items to the **shell_lines** key in the **users** variable. Each item exists of a _line_ and _state_ key.
|
Add items to the **shell_lines** key in the **users** variable. Each item exists of a _line_ and _state_ key.
|
||||||
|
|
||||||
|
**lines**
|
||||||
|
|
||||||
|
Use _lines_ if you want to make sure a single line is present or not.
|
||||||
Example:
|
Example:
|
||||||
```
|
```
|
||||||
shell_lines:
|
shell_lines:
|
||||||
|
@ -106,5 +120,16 @@ shell_lines:
|
||||||
state: present
|
state: present
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**blocks**
|
||||||
|
|
||||||
|
use blocks if you want to make sure a number of lines that belong together are
|
||||||
|
present or not.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
bash_blocks:
|
||||||
|
- content: |
|
||||||
|
if [ condition ]; then
|
||||||
|
do something
|
||||||
|
state: present
|
||||||
|
```
|
||||||
|
|
|
@ -1,4 +1,11 @@
|
||||||
---
|
---
|
||||||
|
- name: Check for required variables
|
||||||
|
fail:
|
||||||
|
msg: "Variable: 'users.name' or 'users.state' NOT defined!"
|
||||||
|
with_items: "{{ users }}"
|
||||||
|
when: item.state is not defined or item.name is not defined
|
||||||
|
|
||||||
|
|
||||||
- include_tasks: set_facts.yml
|
- include_tasks: set_facts.yml
|
||||||
- include_tasks: users.yml
|
- include_tasks: users.yml
|
||||||
- include_tasks: ssh_config.yml
|
- include_tasks: ssh_config.yml
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# Set default shell
|
||||||
- set_fact:
|
- set_fact:
|
||||||
default_shell: "{{ default_freebsd_shell }}"
|
default_shell: "{{ default_freebsd_shell }}"
|
||||||
when: ansible_os_family == 'FreeBSD'
|
when: ansible_os_family == 'FreeBSD'
|
||||||
|
@ -6,3 +7,20 @@
|
||||||
default_shell: "{{ default_linux_shell }}"
|
default_shell: "{{ default_linux_shell }}"
|
||||||
when: ansible_os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
|
# Set sudoers path
|
||||||
|
- set_fact:
|
||||||
|
sudoers_path: /usr/local/etc/sudoers.d
|
||||||
|
when: ansible_os_family == 'FreeBSD'
|
||||||
|
|
||||||
|
- set_fact:
|
||||||
|
sudoers_path: /etc/sudoers.d
|
||||||
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
|
# Set sudo config path
|
||||||
|
- set_fact:
|
||||||
|
sudo_config_path: /usr/local/etc/sudoers
|
||||||
|
when: ansible_os_family == 'FreeBSD'
|
||||||
|
|
||||||
|
- set_fact:
|
||||||
|
sudo_config_path: /etc/sudoers
|
||||||
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
- name: Ensure .ssh folder is created
|
- name: Ensure .ssh folder is created
|
||||||
file:
|
file:
|
||||||
path: "/home/{{item.name}}/.ssh"
|
path: "/home/{{item.name}}/.ssh"
|
||||||
|
@ -7,6 +8,7 @@
|
||||||
group: "{{ item.name }}"
|
group: "{{ item.name }}"
|
||||||
with_items:
|
with_items:
|
||||||
- "{{ users }}"
|
- "{{ users }}"
|
||||||
|
when: item.state == "present"
|
||||||
|
|
||||||
|
|
||||||
- name: Configure authorized_keys
|
- name: Configure authorized_keys
|
||||||
|
@ -17,4 +19,5 @@
|
||||||
with_subelements:
|
with_subelements:
|
||||||
- "{{ users }}"
|
- "{{ users }}"
|
||||||
- keys
|
- keys
|
||||||
|
when: item.0.state is defined and item.0.state == "present"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
- name: Ensure groups exist
|
- name: Add/Remove group
|
||||||
group:
|
group:
|
||||||
name: "{{ item.name }}"
|
name: "{{ item.name }}"
|
||||||
gid: "{{ item.gid | default(omit) }}"
|
gid: "{{ item.gid | default(omit) }}"
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
with_items: "{{ user_groups }}"
|
with_items: "{{ user_groups }}"
|
||||||
|
|
||||||
|
|
||||||
- name: Ensure users exist
|
- name: Add/Remove user
|
||||||
user:
|
user:
|
||||||
name: "{{ item.name }}"
|
name: "{{ item.name }}"
|
||||||
state: "{{ item.state | default('present') }}"
|
state: "{{ item.state | default('present') }}"
|
||||||
|
@ -15,12 +15,12 @@
|
||||||
groups: "{{ item.groups | default(omit) }}"
|
groups: "{{ item.groups | default(omit) }}"
|
||||||
uid: "{{ item.uid | default(omit) }}"
|
uid: "{{ item.uid | default(omit) }}"
|
||||||
shell: "{{ item.shell | default(default_shell) }}"
|
shell: "{{ item.shell | default(default_shell) }}"
|
||||||
append: yes
|
remove: yes
|
||||||
no_log: True
|
no_log: False
|
||||||
with_items: "{{ users }}"
|
with_items: "{{ users }}"
|
||||||
|
|
||||||
|
|
||||||
- name: Configure bashrc
|
- name: Configure bashrc lines
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "/home/{{ item.0.name }}/.bashrc"
|
path: "/home/{{ item.0.name }}/.bashrc"
|
||||||
line: "{{ item.1.line }}"
|
line: "{{ item.1.line }}"
|
||||||
|
@ -30,17 +30,84 @@
|
||||||
- "{{ users }}"
|
- "{{ users }}"
|
||||||
- bash_lines
|
- bash_lines
|
||||||
- skip_missing: true
|
- skip_missing: true
|
||||||
when: ansible_os_family == 'Debian'
|
when: ansible_os_family == 'Debian' and item.0.state == "present"
|
||||||
|
|
||||||
|
- name: Configure bashrc blocks
|
||||||
|
blockinfile:
|
||||||
|
path: "/home/{{ item.0.name }}/.bashrc"
|
||||||
|
content: "{{ item.1.content }}"
|
||||||
|
marker: "# {mark} ANSIBLE managed content. Block item #{{ listitem }}"
|
||||||
|
state: "{{ item.1.state | default('present') }}"
|
||||||
|
backup: yes
|
||||||
|
with_subelements:
|
||||||
|
- "{{ users }}"
|
||||||
|
- bash_blocks
|
||||||
|
- skip_missing: true
|
||||||
|
when: ansible_os_family == 'Debian' and item.0.state == "present"
|
||||||
|
loop_control:
|
||||||
|
index_var: listitem
|
||||||
|
|
||||||
- name: Configure cshrc
|
- name: Configure cshrc lines
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "/home/{{ item.0.name }}/.cshrc"
|
path: "/home/{{ item.0.name }}/.cshrc"
|
||||||
line: "{{ item.1.line }}"
|
line: "{{ item.1.line }}"
|
||||||
state: "{{ item.1.state | default('present')}}"
|
state: "{{ item.1.state | default('present')}}"
|
||||||
|
backup: yes
|
||||||
with_subelements:
|
with_subelements:
|
||||||
- "{{ users }}"
|
- "{{ users }}"
|
||||||
- csh_lines
|
- csh_lines
|
||||||
- skip_missing: true
|
- skip_missing: true
|
||||||
when: ansible_os_family == 'FreeBSD'
|
when: ansible_os_family == 'FreeBSD' and item.0.state == "present"
|
||||||
|
|
||||||
|
- name: Configure cshrc blocks
|
||||||
|
blockinfile:
|
||||||
|
path: "/home/{{ item.0.name }}/.cshrc"
|
||||||
|
content: "{{ item.1.conent }}"
|
||||||
|
marker: "# {mark} ANSIBLE managed content. Block item #{{ listitem }}"
|
||||||
|
state: "{{ item.1.state | default('present')}}"
|
||||||
|
backup: yes
|
||||||
|
with_subelements:
|
||||||
|
- "{{ users }}"
|
||||||
|
- csh_blocks
|
||||||
|
- skip_missing: true
|
||||||
|
when: ansible_os_family == 'FreeBSD' and item.0.state == "present"
|
||||||
|
loop_control:
|
||||||
|
index_var: listitem
|
||||||
|
|
||||||
|
- name: Ensure sudo is installed (Debian)
|
||||||
|
apt:
|
||||||
|
name: sudo
|
||||||
|
update_cache: yes
|
||||||
|
cache_valid_time: "{{ apt_cache_valid | default('86400') }}"
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- name: Ensure sudo is installed (FreeBSD)
|
||||||
|
portinstall:
|
||||||
|
name: sudo
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "FreeBSD"
|
||||||
|
|
||||||
|
- name: Enable sudo for user
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ sudoers_path }}/{{ item.name }}"
|
||||||
|
line: "{{ item.name }} ALL=(ALL) NOPASSWD:ALL"
|
||||||
|
state: present
|
||||||
|
create: true
|
||||||
|
when: item.enable_sudo is defined and item.enable_sudo == true
|
||||||
|
with_items: "{{ users }}"
|
||||||
|
|
||||||
|
- name: Disable sudo for user
|
||||||
|
file:
|
||||||
|
path: "{{ sudoers_path }}/{{ item.name }}"
|
||||||
|
state: absent
|
||||||
|
when: item.enable_sudo is defined and item.enable_sudo == false
|
||||||
|
with_items: "{{ users }}"
|
||||||
|
|
||||||
|
- name: Include sudoers.d
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{ sudo_config_path }}"
|
||||||
|
state: present
|
||||||
|
regexp: '^\#includedir {{ sudoers_path }}'
|
||||||
|
line: '#includedir {{ sudoers_path }}'
|
||||||
|
validate: 'visudo -cf %s'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue