Lets see a demonstration for template.
Step 1: Create a template file
[oracle@oel01db ansible-project]$ ls -lrt
total 4
drwxr-xr-x 2 oracle oinstall 19 Dec 5 20:31 inventory
drwxr-xr-x 2 oracle oinstall 4096 Dec 6 00:29 playbooks
[oracle@oel01db ansible-project]$ cat ./inventory/hosts
[db_servers]
192.168.0.156
[oracle@oel01db ansible-project]$ cd template/
[oracle@oel01db template]$ vi init.ora.j2
[oracle@oel01db template]$ cat init.ora.j2
# Oracle Initialization Parameter File
db_name={{ item.name }}
memory_target={{ item.memory_target }}
processes={{ item.processes }}
audit_file_dest={{ item.audit_file_dest }}
[oracle@oel01db template]$
Step 2: Create a playbook
[oracle@oel01db ansible-project]$ vi ./playbooks/create_oracle_init.yml
[[oracle@oel01db ansible-project]$ cat ./playbooks/create_oracle_init.yml
---
- name: Deploy Oracle init.ora files
hosts: db_servers
become: yes
vars:
databases:
- name: PRODDB
memory_target: 2G
processes: 300
audit_file_dest: /u01/app/oracle/admin/PRODDB/adump
- name: TESTDB
memory_target: 1G
processes: 150
audit_file_dest: /u01/app/oracle/admin/TESTDB/adump
tasks:
- name: Create admin directories for each database
ansible.builtin.file:
path: "/u01/app/oracle/admin/{{ item.name }}"
state: directory
owner: oracle
group: oinstall
mode: 0755
loop: "{{ databases }}"
- name: Generate init.ora from template
ansible.builtin.template:
src: ../template/init.ora.j2
dest: "/u01/app/oracle/admin/{{ item.name }}/init.ora"
owner: oracle
group: oinstall
mode: 0644
loop: "{{ databases }}"
loop_control:
label: "{{ item.name }}"
[oracle@oel01db ansible-project]$
Ansible's template module, by default, expects to find your template file (e.g., init.ora.j2) in one of two locations relative to the playbook file you are executing:
Inside a dedicated
templatessubdirectory:ansible-project/playbooks/templates/init.ora.j2In the same directory as the playbook:
ansible-project/playbooks/init.ora.j2
Note: The key point is that the template's location is resolved relative to the playbook file, not the root of the Ansible project.
[oracle@oel01db ansible-project]$ ansible-playbook -i ./inventory/hosts ./playbooks/create_oracle_init.yml
PLAY [Deploy Oracle init.ora files] *********************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [192.168.0.156]
TASK [Create admin directories for each database] *******************************************************************************************************************************************************************************************
changed: [192.168.0.156] => (item={u'processes': 300, u'memory_target': u'2G', u'audit_file_dest': u'/u01/app/oracle/admin/PRODDB/adump', u'name': u'PRODDB'})
changed: [192.168.0.156] => (item={u'processes': 150, u'memory_target': u'1G', u'audit_file_dest': u'/u01/app/oracle/admin/TESTDB/adump', u'name': u'TESTDB'})
TASK [Generate init.ora from template] ******************************************************************************************************************************************************************************************************
changed: [192.168.0.156] => (item=PRODDB)
changed: [192.168.0.156] => (item=TESTDB)
PLAY RECAP **********************************************************************************************************************************************************************************************************************************
192.168.0.156 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[oracle@oel01db ansible-project]$
No comments:
Post a Comment