Blame README-user.md

Packit Service 0a38ef
User module
Packit Service 0a38ef
===========
Packit Service 0a38ef
Packit Service 0a38ef
Description
Packit Service 0a38ef
-----------
Packit Service 0a38ef
Packit Service 0a38ef
The user module allows to ensure presence, absence, disablement, unlocking and undeletion of users.
Packit Service 0a38ef
Packit Service 0a38ef
The user module is as compatible as possible to the Ansible upstream `ipa_user` module, but additionally offers to preserve delete, enable, disable, unlock and undelete users.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Features
Packit Service 0a38ef
--------
Packit Service 0a38ef
* User management
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Supported FreeIPA Versions
Packit Service 0a38ef
--------------------------
Packit Service 0a38ef
Packit Service 0a38ef
FreeIPA versions 4.4.0 and up are supported by the ipauser module.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Requirements
Packit Service 0a38ef
------------
Packit Service 0a38ef
Packit Service 0a38ef
**Controller**
Packit Service 0a38ef
* Ansible version: 2.8+
Packit Service 0a38ef
Packit Service 0a38ef
**Node**
Packit Service 0a38ef
* Supported FreeIPA version (see above)
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Usage
Packit Service 0a38ef
=====
Packit Service 0a38ef
Packit Service 0a38ef
Example inventory file
Packit Service 0a38ef
Packit Service 0a38ef
```ini
Packit Service 0a38ef
[ipaserver]
Packit Service 0a38ef
ipaserver.test.local
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure a user is present:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Ensure user pinky is present
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky
Packit Service 0a38ef
      first: pinky
Packit Service 0a38ef
      last: Acme
Packit Service 0a38ef
      uid: 10001
Packit Service 0a38ef
      gid: 100
Packit Service 0a38ef
      phone: "+555123457"
Packit Service 0a38ef
      email: pinky@acme.com
Packit Service 0a38ef
      passwordexpiration: "2023-01-19 23:59:59"
Packit Service 0a38ef
      password: "no-brain"
Packit Service 0a38ef
      update_password: on_create
Packit Service 0a38ef
Packit Service 0a38ef
  # Ensure user brain is present
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: brain
Packit Service 0a38ef
      first: brain
Packit Service 0a38ef
      last: Acme
Packit Service 0a38ef
```
Packit Service 0a38ef
`update_password` controls if a password for a user will be set in present state only on creation or every time (always).
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
These two `ipauser` module calls can be combined into one with the `users` variable:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Ensure users pinky and brain are present
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      users:
Packit Service 0a38ef
      - name: pinky
Packit Service 0a38ef
        first: pinky
Packit Service 0a38ef
        last: Acme
Packit Service 0a38ef
        uid: 10001
Packit Service 0a38ef
        gid: 100
Packit Service 0a38ef
        phone: "+555123457"
Packit Service 0a38ef
        email: pinky@acme.com
Packit Service 0a38ef
        passwordexpiration: "2023-01-19 23:59:59"
Packit Service 0a38ef
        password: "no-brain"
Packit Service 0a38ef
      - name: brain
Packit Service 0a38ef
        first: brain
Packit Service 0a38ef
        last: Acme
Packit Service 0a38ef
      update_password: on_create
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
You can also alternatively use a json file containing the users, here `users_present.json`:
Packit Service 0a38ef
Packit Service 0a38ef
```json
Packit Service 0a38ef
{
Packit Service 0a38ef
  "users": [
Packit Service 0a38ef
    {
Packit Service 0a38ef
      "name": "user1",
Packit Service 0a38ef
      "first": "First 1",
Packit Service 0a38ef
      "last": "Last 1"
Packit Service 0a38ef
    },
Packit Service 0a38ef
    {
Packit Service 0a38ef
      "name": "user2",
Packit Service 0a38ef
      "first": "First 2",
Packit Service 0a38ef
      "last": "Last 2"
Packit Service 0a38ef
    },
Packit Service 0a38ef
    ...
Packit Service 0a38ef
  ]
Packit Service 0a38ef
}
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
And ensure the presence of the users with this example playbook:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Tests
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
  gather_facts: false
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  - name: Include users_present.json
Packit Service 0a38ef
    include_vars:
Packit Service 0a38ef
      file: users_present.json
Packit Service 0a38ef
Packit Service 0a38ef
  - name: Users present
Packit Service 0a38ef
    ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      users: "{{ users }}"
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Ensure user pinky is present with a generated random password and print the random password:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Ensure user pinky is present with a random password
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: brain
Packit Service 0a38ef
      first: brain
Packit Service 0a38ef
      last: Acme
Packit Service 0a38ef
      random: yes
Packit Service 0a38ef
    register: ipauser
Packit Service 0a38ef
Packit Service 0a38ef
  - name: Print generated random password
Packit Service 0a38ef
    debug:
Packit Service 0a38ef
      var: ipauser.user.randompassword
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Ensure users pinky and brain are present with a generated random password and print the random passwords:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Ensure users pinky and brain are present with random password
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      users:
Packit Service 0a38ef
      - name: pinky
Packit Service 0a38ef
        first: pinky
Packit Service 0a38ef
        last: Acme
Packit Service 0a38ef
        uid: 10001
Packit Service 0a38ef
        gid: 100
Packit Service 0a38ef
        phone: "+555123457"
Packit Service 0a38ef
        email: pinky@acme.com
Packit Service 0a38ef
        passwordexpiration: "2023-01-19 23:59:59"
Packit Service 0a38ef
        password: "no-brain"
Packit Service 0a38ef
      - name: brain
Packit Service 0a38ef
        first: brain
Packit Service 0a38ef
        last: Acme
Packit Service 0a38ef
    register: ipauser
Packit Service 0a38ef
Packit Service 0a38ef
  - name: Print generated random password of pinky
Packit Service 0a38ef
    debug:
Packit Service 0a38ef
      var: ipauser.user.pinky.randompassword
Packit Service 0a38ef
Packit Service 0a38ef
  - name: Print generated random password of brain
Packit Service 0a38ef
    debug:
Packit Service 0a38ef
      var: ipauser.user.brain.randompassword
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to delete a user, but preserve it:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Remove but preserve user pinky
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky
Packit Service 0a38ef
      preserve: yes
Packit Service 0a38ef
      state: absent
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
This can also be done with the `users` variable containing only names, this can be combined into one module call:
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to delete a user, but preserve it using the `users` variable:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Remove but preserve user pinky
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      users:
Packit Service 0a38ef
      - name: pinky
Packit Service 0a38ef
      preserve: yes
Packit Service 0a38ef
      state: absent
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
This can also be done as an alternative with the `users` variable containing only names.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to undelete a preserved user.
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Undelete preserved user pinky
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky
Packit Service 0a38ef
      state: undeleted
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
This can also be done as an alternative with the `users` variable containing only names.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to disable a user:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Disable user pinky
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky
Packit Service 0a38ef
      state: disabled
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
This can also be done as an alternative with the `users` variable containing only names.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to enable users:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Enable user pinky and brain
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky,brain
Packit Service 0a38ef
      state: enabled
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
This can also be done as an alternative with the `users` variable containing only names.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to unlock users:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Unlock user pinky and brain
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky,brain
Packit Service 0a38ef
      state: unlocked
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure users are absent:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Ensure users pinky and brain are absent
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      name: pinky,brain
Packit Service 0a38ef
      state: absent
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
This can also be done as an alternative with the `users` variable containing only names.
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Example playbook to ensure users are absent:
Packit Service 0a38ef
Packit Service 0a38ef
```yaml
Packit Service 0a38ef
---
Packit Service 0a38ef
- name: Playbook to handle users
Packit Service 0a38ef
  hosts: ipaserver
Packit Service 0a38ef
  become: true
Packit Service 0a38ef
Packit Service 0a38ef
  tasks:
Packit Service 0a38ef
  # Ensure users pinky and brain are absent
Packit Service 0a38ef
  - ipauser:
Packit Service 0a38ef
      ipaadmin_password: SomeADMINpassword
Packit Service 0a38ef
      users:
Packit Service 0a38ef
      - name: pinky
Packit Service 0a38ef
      - name: brain
Packit Service 0a38ef
      state: absent
Packit Service 0a38ef
```
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Variables
Packit Service 0a38ef
=========
Packit Service 0a38ef
Packit Service 0a38ef
ipauser
Packit Service 0a38ef
-------
Packit Service 0a38ef
Packit Service 0a38ef
**General Variables:**
Packit Service 0a38ef
Packit Service 0a38ef
Variable | Description | Required
Packit Service 0a38ef
-------- | ----------- | --------
Packit Service 0a38ef
`ipaadmin_principal` | The admin principal is a string and defaults to `admin` | no
Packit Service 0a38ef
`ipaadmin_password` | The admin password is a string and is required if there is no admin ticket available on the node | no
Packit Service 0a38ef
`name` | The list of user name strings. `name` with *user variables* or `users` containing *user variables* need to be used. | no
Packit Service 0a38ef
**User variables** | Only used with `name` variable in the first level. | no
Packit Service 0a38ef
`users` | The list of user dicts. Each `users` dict entry can contain **user variables**.
There is one required option in the `users` dict:| no
Packit Service 0a38ef
  | `name` - The user name string of the entry. | yes
Packit Service 0a38ef
  | **User variables** | no
Packit Service 0a38ef
`preserve` | Delete a user, keeping the entry available for future use. (bool) | no
Packit Service 0a38ef
`update_password` | Set password for a user in present state only on creation or always. It can be one of `always` or `on_create` and defaults to `always`. | no
Packit Service 0a38ef
`preserve` | Delete a user, keeping the entry available for future use. (bool)  | no
Packit Service 0a38ef
`action` | Work on user or member level. It can be on of `member` or `user` and defaults to `user`. | no
Packit Service 0a38ef
`state` | The state to ensure. It can be one of `present`, `absent`, `enabled`, `disabled`, `unlocked` or `undeleted`, default: `present`. Only `names` or `users` with only `name` set are allowed if state is not `present`. | yes
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
**User Variables:**
Packit Service 0a38ef
Packit Service 0a38ef
Variable | Description | Required
Packit Service 0a38ef
-------- | ----------- | --------
Packit Service 0a38ef
`first` \| `givenname` | The first name string. | no
Packit Service 0a38ef
`last` \| `sn` | The last name string. | no
Packit Service 0a38ef
`fullname` \| `cn` | The full name string. | no
Packit Service 0a38ef
`displayname` | The display name string. | no
Packit Service 0a38ef
`homedir` | The home directory string. | no
Packit Service 0a38ef
`shell` \| `loginshell` | The login shell string. | no
Packit Service 0a38ef
`email` | List of email address strings. | no
Packit Service 0a38ef
`principal` \| `principalnam` \| `krbprincipalname` | The kerberos principal sptring. | no
Packit Service 0a38ef
`principalexpiration` \| `krbprincipalexpiration` | The kerberos principal expiration date. Possible formats: `YYYYMMddHHmmssZ`, `YYYY-MM-ddTHH:mm:ssZ`, `YYYY-MM-ddTHH:mmZ`, `YYYY-MM-ddZ`, `YYYY-MM-dd HH:mm:ssZ` or `YYYY-MM-dd HH:mmZ`. The trailing 'Z' can be skipped. | no
Packit Service 0a38ef
`passwordexpiration` \| `krbpasswordexpiration` | The kerberos password expiration date. Possible formats: `YYYYMMddHHmmssZ`, `YYYY-MM-ddTHH:mm:ssZ`, `YYYY-MM-ddTHH:mmZ`, `YYYY-MM-ddZ`, `YYYY-MM-dd HH:mm:ssZ` or `YYYY-MM-dd HH:mmZ`. The trailing 'Z' can be skipped. Only usable with IPA versions 4.7 and up. | no
Packit Service 0a38ef
`password` | The user password string. | no
Packit Service 0a38ef
`random` | Generate a random user password | no
Packit Service 0a38ef
`uid` \| `uidnumber` | The UID integer. | no
Packit Service 0a38ef
`gid` \| `gidnumber` | The GID integer. | no
Packit Service 0a38ef
`city` | City | no
Packit Service 0a38ef
`userstate` \| `st` | State/Province | no
Packit Service 0a38ef
`postalcode` \| `zip` | Postalcode/ZIP | no
Packit Service 0a38ef
`phone` \| `telephonenumber` | List of telephone number strings, | no
Packit Service 0a38ef
`mobile` | List of mobile telephone number strings. | no
Packit Service 0a38ef
`pager` | List of pager number strings. | no
Packit Service 0a38ef
`fax` \| `facsimiletelephonenumber` | List of fax number strings. | no
Packit Service 0a38ef
`orgunit` | The Organisation unit. | no
Packit Service 0a38ef
`title` | The job title string. | no
Packit Service 0a38ef
`manager` | List of manager user names. | no
Packit Service 0a38ef
`carlicense` | List of car licenses. | no
Packit Service 0a38ef
`sshpubkey` \| `ipasshpubkey` | List of SSH public keys. | no
Packit Service 0a38ef
`userauthtype` | List of supported user authentication types. Choices: `password`, `radius`, `otp` and ``. Use empty string to reset userauthtype to the initial value. | no
Packit Service 0a38ef
`userclass` | User category. (semantics placed on this attribute are for local interpretation). | no
Packit Service 0a38ef
`radius` | RADIUS proxy configuration  | no
Packit Service 0a38ef
`radiususer` | RADIUS proxy username | no
Packit Service 0a38ef
`departmentnumber` | Department Number | no
Packit Service 0a38ef
`employeenumber` | Employee Number | no
Packit Service 0a38ef
`employeetype` | Employee Type | no
Packit Service 0a38ef
`preferredlanguage` | Preferred Language | no
Packit Service 0a38ef
`certificate` | List of base-64 encoded user certificates. | no
Packit Service 0a38ef
`certmapdata` | List of certificate mappings. Either `data` or `certificate` or `issuer` together with `subject` need to be specified. Only usable with IPA versions 4.5 and up. 
Options: | no
Packit Service 0a38ef
  | `certificate` - Base-64 encoded user certificate, not usable with other certmapdata options. | no
Packit Service 0a38ef
  | `issuer` - Issuer of the certificate, only usable together with `usbject` option. | no
Packit Service 0a38ef
  | `subject` - Subject of the certificate, only usable together with `issuer` option. | no
Packit Service 0a38ef
  | `data` - Certmap data, not usable with other certmapdata options. | no
Packit Service 0a38ef
`noprivate` | Do not create user private group. (bool) | no
Packit Service 0a38ef
`nomembers` | Suppress processing of membership attributes. (bool) | no
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Return Values
Packit Service 0a38ef
=============
Packit Service 0a38ef
Packit Service 0a38ef
ipauser
Packit Service 0a38ef
-------
Packit Service 0a38ef
Packit Service 0a38ef
There are only return values if one or more random passwords have been generated.
Packit Service 0a38ef
Packit Service 0a38ef
Variable | Description | Returned When
Packit Service 0a38ef
-------- | ----------- | -------------
Packit Service a166ed
`user` | User dict with random password. (dict) 
Options: | If random is yes and user did not exist or update_password is yes
Packit Service 0a38ef
  | `randompassword` - The generated random password | If only one user is handled by the module
Packit Service 0a38ef
  | `name` - The user name of the user that got a new random password. (dict) 
Options:
  `randompassword` - The generated random password | If several users are handled by the module
Packit Service 0a38ef
Packit Service 0a38ef
Packit Service 0a38ef
Authors
Packit Service 0a38ef
=======
Packit Service 0a38ef
Packit Service 0a38ef
Thomas Woerner