Ansible : Roles - First Steps
Roles allow us to split Ansible playbooks into more manageable chunks, rather than having one monolithic playbook. They also aid in code reusability.
oracle miscconfigurationintermediate
by OracleDba
12 views
Roles allow us to split Ansible playbooks into more manageable chunks, rather than having one monolithic playbook. They also aid in code reusability.
1234
mkdir -p roles/base/tasks
mkdir -p roles/appservers/tasks
mkdir -p roles/appservers/files
mkdir -p roles/databases/tasks12345678910111213141516171819
- name: Update all packages (DNF)
dnf:
name: "*"
update_cache: yes
state: latest
when: ansible_distribution in ["OracleLinux", "Red Hat Enterprise Linux", "CentOS"]
register: dnf_update
- name: Update all packages (APT)
dnf:
name: "*"
update_cache: yes
state: latest
when: ansible_distribution in ["Ubuntu", "Debian"]
register: atp_update
- name: Reboot server
reboot:
when: (dnf_update.changed or atp_update.changed) and inventory_hostname != "ansible-server.localdomain"12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
- name: Install NGINX package (DNF)
dnf:
name: nginx
state: present
update_cache: yes
when: ansible_distribution in ["OracleLinux", "Red Hat Enterprise Linux", "CentOS"]
- name: Install NGINX package (APT)
apt:
name: nginx
state: present
update_cache: yes
when: ansible_distribution in ["Ubuntu", "Debian"]
- name: Enable and start NGINX service
service:
name: nginx
enabled: yes
state: started
- name: Allow SSH traffic through the firewall
firewalld:
service: "{{ item }}"
permanent: yes
state: enabled
with_items:
- ssh
- https
- name: Enable the firewall
service:
name: firewalld
enabled: yes
state: started
- name: Copy default web page
copy:
src: default_page.html
dest: /usr/share/nginx/html/index.html
owner: root
group: root
mode: 0644
<html>
<title>Default Page</title>
<body>
<p>This is the default page!</p>
</body>
</html>12345678910111213141516171819
- name: Create database groups
group:
gid: "{{ item.group_id}}"
name: "{{ item.group_name}}"
state: present
with_items:
- { group_name: oinstall , group_id: 54321}
- { group_name: dba, group_id: 54322}
- { group_name: oper, group_id: 54323 }
- name: Create oracle user
user:
uid: 54321
name: oracle
password: "{{ 'DummyPassword123' | password_hash('sha512', 'mysecretsalt') }}"
groups: oinstall,dba,oper
append: yes
state: present
update_password: on_create1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
---
- name: Base role for all servers
hosts: all
become: true
roles:
- base
- name: Base role for application servers
hosts: appservers
become: true
roles:
- appservers
- name: Base role for database servers
hosts: databases
become: true
roles:
- databases
$ ansible-playbook site.yml
PLAY [Base role for all servers] ***************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************
ok: [database1.localdomain]
ok: [appserver1.localdomain]
ok: [appserver2.localdomain]
ok: [ansible-server.localdomain]
TASK [base : Update all packages (DNF)] ********************************************************************************************************
ok: [appserver1.localdomain]
ok: [appserver2.localdomain]
ok: [database1.localdomain]
ok: [ansible-server.localdomain]
TASK [base : Update all packages (APT)] ********************************************************************************************************
skipping: [database1.localdomain]
skipping: [appserver1.localdomain]
skipping: [ansible-server.localdomain]
skipping: [appserver2.localdomain]
TASK [base : Reboot server] ********************************************************************************************************************
skipping: [ansible-server.localdomain]
skipping: [appserver1.localdomain]
skipping: [appserver2.localdomain]
skipping: [database1.localdomain]
PLAY [Base role for application servers] *******************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************
ok: [appserver2.localdomain]
ok: [appserver1.localdomain]
TASK [appservers : Install NGINX package (DNF)] ************************************************************************************************
ok: [appserver1.localdomain]
ok: [appserver2.localdomain]
TASK [appservers : Install NGINX package (APT)] ************************************************************************************************
skipping: [appserver1.localdomain]
skipping: [appserver2.localdomain]
TASK [appservers : Enable and start NGINX service] *********************************************************************************************
ok: [appserver1.localdomain]
ok: [appserver2.localdomain]
TASK [appservers : Allow SSH traffic through the firewall] *************************************************************************************
ok: [appserver2.localdomain] => (item=ssh)
ok: [appserver1.localdomain] => (item=ssh)
ok: [appserver2.localdomain] => (item=https)
ok: [appserver1.localdomain] => (item=https)
TASK [appservers : Enable the firewall] ********************************************************************************************************
ok: [appserver1.localdomain]
ok: [appserver2.localdomain]
PLAY [Base role for database servers] **********************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************
ok: [database1.localdomain]
TASK [databases : Create database groups] ******************************************************************************************************
ok: [database1.localdomain] => (item={'group_name': 'oinstall', 'group_id': 54321})
ok: [database1.localdomain] => (item={'group_name': 'dba', 'group_id': 54322})
ok: [database1.localdomain] => (item={'group_name': 'oper', 'group_id': 54323})
TASK [databases : Create oracle user] **********************************************************************************************************
ok: [database1.localdomain]
PLAY RECAP *************************************************************************************************************************************
ansible-server.localdomain : ok=2 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
appserver1.localdomain : ok=7 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
appserver2.localdomain : ok=7 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
database1.localdomain : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
$12345678910111213141516171819
cat > roles/base/README.md <<EOF
# Base Role
This role contains tasks we expect to run on all servers.
EOF
cat > roles/appservers/README.md <<EOF
# Appservers Role
This role contains tasks we expect to run on all application servers.
EOF
cat > roles/databases/README.md <<EOF
# Databases Role
This role contains tasks we expect to run on all database servers.
EOFPlease to add comments
No comments yet. Be the first to comment!