Classes: Post Installation on Ansible
Managing many servers is not an easy job; we need to plan and create a good and manageable Ansible Playbook to implement Ansible properly.
Since then, we all agree that it is hard to manage a lot of servers at once. For example, you have installed 50 VMs/Servers with fresh OS and need to add some users to it.
Thus, In this class, we will learn how to add some users to the servers using Ansible Playbook.
How to Add users using Ansible Playbook
First, create a folder called ansible_try
Under folder ansible_try, create files for inventory and YML master playbook.
For the inventory file, please fill in the lists of the IP address server.
[allserver]192.168.20.183192.168.20.184
Then, create a YML file for the master playbook
- usergroup.yml
hosts: allserversgather_facts: falseroles:- usergroup
- after that, create 3 folders called tasks, files, and vars.
- The tasks folder, will be filled with the Ansible automation code
- Files folder will be filled with the SSH_Key_Pub and sudoers config file
- The Vars folder will be filled with variables files for Ansible automation code
Then, go to the Task folder and create a file as below:
main.ym
import_tasks: configureSudoers.ymlimport_tasks: configureUsers.yml__________________________________________________
configureSudoers.yml
name: Create Engineer Groupgroup: name=engineer state=presentignore_errors: yesbecome: truetags:- sudoersgroupname: Engineer Group As Sudoerscopy: src=sudoers.d/00-engineer.j2 dest=/etc/sudoers.d/00-engineerowner=rootgroup=rootmode=440backup=noignore_errors: yesbecome: truetags:- sudoersgroup_________________________________________________
configureUsers.yml
name: Manage Users SAuser:name: "{{ item.key }}"state: "{{ item.value.state }}"groups: "{{ item.value.groups }}"shell: "{{ item.value.shell }}"with_dict: '{{users_sa}}'become: truetags:- usergroupname: Manage User Keys SAauthorized_key:user: "{{ item.key }}"state: presentkey: "{{ lookup('file', item.value.authkey) }}"with_dict: '{{users_sa}}'become: truetags:- usergroupname: Remove inactive Useruser:name: "{{ item.key }}"state: "{{ item.value.state }}"remove: "{{ item.value.remove }}"with_dict: '{{ inactiveUsers }}'become: truetags:- usergroup- remove
- After creating the task code, then go to the vars folder and create main.yml file
main.ymlusers_sa:
user1:
name: user1
state: present
groups: engineer
shell: /bin/bash
authkey: authkeys/user1.pub
users_noc:
user2:
name: user2
state: present
groups: engineer
shell: /bin/bash
authkey: authkeys/user.pubinactiveUsers:alfian:
state: absent
remove: yes
- Then, goes to the Files Folder and create two subfolders “authkeys” and “sudoers.d”
- Under the folder “authkeys”, put the SSH_Key_Public according to it’s username, for example, user1.pub, user2.pub
- Next, under the “sudoers.d”, put the jinja file about the sudoers file configuration that will be copied to the server as below
- Create a file with name 00-engineer.j2
- Fill with below sudoers configuration
 “%engineer ALL=NOPASSWD: ALL”
 
- Back to the top of folder ansible_try and run this command
ansible-playbook -i inventory usergroup.yml -u ubuntu- ansible-playbook is a command for running a playbook
- -i is for variable inventory
- -u is for the username used for SSH
 
- The Output will go like this
PLAY [allserver] *************************************************************************************************************************************
TASK [usergroup : Create Engineer Group] *************************************************************************************************************
ok: [192.168.20.184]
ok: [192.168.20.183]
TASK [usergroup : Engineer Group As Sudoers] *********************************************************************************************************
changed: [192.168.20.183]
changed: [192.168.20.184]
TASK [usergroup : Manage Users SA] *******************************************************************************************************************
ok: [192.168.20.183] => (item={'key': 'user1', 'value': {'name': 'user1', 'state': 'present', 'groups': 'engineer', 'shell': '/bin/bash', 'authkey': 'authkeys/user1.pub'}})
ok: [192.168.20.184] => (item={'key': 'user1', 'value': {'name': 'user1', 'state': 'present', 'groups': 'engineer', 'shell': '/bin/bash', 'authkey': 'authkeys/user1.pub'}})
ok: [192.168.20.183] => (item={'key': 'user2', 'value': {'name': 'user2', 'state': 'present', 'groups': 'engineer', 'shell': '/bin/bash', 'authkey': 'authkeys/user2.pub'}})
ok: [192.168.20.184] => (item={'key': 'user2', 'value': {'name': 'user2', 'state': 'present', 'groups': 'engineer', 'shell': '/bin/bash', 'authkey': 'authkeys/user2.pub'}})
TASK [usergroup : Remove inactive User] **************************************************************************************************************
ok: [192.168.20.183] => (item={'key': 'alfian', 'value': {'name': 'alfian', 'state': 'absent', 'remove': True}})
ok: [192.168.20.184] => (item={'key': 'alfian', 'value': {'name': 'alfian', 'state': 'absent', 'remove': True}})
PLAY RECAP *******************************************************************************************************************************************
192.168.20.183             : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.20.184             : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
- If you want just to send a command to get the output, like checking the OS version, just execute this command
ansible allserver -m shell -a "lsb_release -a" -i inventory -u ubuntu
- The output will go like this
192.168.20.184 | CHANGED | rc=0 >>
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenialNo LSB modules are available.
192.168.20.183 | CHANGED | rc=0 >>
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenialNo LSB modules are available.
- So with this Ansible command, you don’t need to sign in to every single server to check the OS version, and it will make your action faster, especially if the server you manage is quite a large scale.
Summary
To manage many servers, you need to learn how to run Ansible post the installation. Eager to know more? Visit our site.
 
								