Ansible variable
- variables are store values that can be reuse across playbook, task, role.
variables define in directly on playbook
- name: "Scholar Website"
hosts: all
vars:
app_name: "Scholar Website"
depend_packages:
- wget
- unzip
- httpd
package_name: "httpd"
service_name: "httpd"
template_name: "templatemo_586_scholar"
website_url: "https://templatemo.com/tm-zip-files-2020/{{ template_name }}.zip"
username: "apache"
file_permissions: "0755"
become: yes
tasks:
- name: "Install depend packages"
ansible.builtin.dnf:
name: "{{ depend_packages }}"
state: present
update_cache: yes
- name: "Install Apache2"
ansible.builtin.dnf:
name: "{{ package_name }}"
state: present
notify: "Restart Apache2"
- name: "Download website template"
ansible.builtin.get_url:
url: "{{ website_url }}"
dest: /tmp/{{ template_name }}.zip
mode: "{{ file_permissions }}"
- name: "Unzip website template"
ansible.builtin.unarchive:
src: /tmp/{{ template_name }}.zip
dest: /tmp/
remote_src: yes
- name: "Ensure Apache document root exists"
ansible.builtin.file:
path: /var/www/html
state: directory
owner: "{{ username }}"
group: "{{ username }}"
mode: "{{ file_permissions }}"
- name: "Copy website files to deploy {{ app_name }}"
ansible.builtin.copy:
src: /tmp/{{ template_name }}/
dest: /var/www/html/
remote_src: yes
owner: "{{ username }}"
group: "{{ username }}"
mode: "{{ file_permissions }}"
notify: "Restart Apache2"
handlers:
- name: "Restart Apache2"
ansible.builtin.systemd_service:
name: "{{ service_name }}"
state: restarted
run playbook
ansible-playbook -i hosts redhat-school.yaml -e "ansible_user=ansible"
Override variable in cmd line
nsible-playbook -i hosts redhat-school.yaml -e "ansible_user=ansible" -e "app_name=devops-schools"
define separate variable file
# Vars/main.yaml
app_name: "Scholar Website"
depend_packages:
- wget
- unzip
- httpd
package_name: "httpd"
service_name: "httpd"
template_name: "templatemo_586_scholar"
website_url: "https://templatemo.com/tm-zip-files-2020/{{ template_name }}.zip"
username: "apache"
file_permissions: "0755"
ansible-playbook -i hosts redhat-school.yaml -e "ansible_user=ansible" -e "app_name=devops-schools" -e "@vars/main.yaml"
-e @pathofvariablefile.yaml this way we need pass variable
want to define variable file in yaml file
- name: "Scholar Website"
hosts: all
vars_files:
- vars/main.yaml
vars_Prompt
- vars_Prompt will ask inputs when running playbook manual need to pass value
- name: "Scholar Website"
hosts: all
vars_prompt:
- name: "username"
prompt: "Enter the username to deploy the website"
private: no
Set_facts
- added variable to ansible facts
- added some value out from task and use same value in another tasks
- name: "Scholar Website"
hosts: all
vars_files:
- vars/main.yaml
vars:
application_port: "80"
become: yes
tasks:
- name: "Install depend packages"
ansible.builtin.dnf:
name: "{{ depend_packages }}"
state: present
update_cache: yes
- name: "Install Apache2"
ansible.builtin.dnf:
name: "{{ package_name }}"
state: present
notify: "Restart Apache2"
- name: "Download website template"
ansible.builtin.get_url:
url: "{{ website_url }}"
dest: /tmp/{{ template_name }}.zip
mode: "{{ file_permissions }}"
- name: "Unzip website template"
ansible.builtin.unarchive:
src: /tmp/{{ template_name }}.zip
dest: /tmp/
remote_src: yes
- name: "Ensure Apache document root exists"
ansible.builtin.file:
path: /var/www/html
state: directory
owner: "{{ username }}"
group: "{{ username }}"
mode: "{{ file_permissions }}"
- name: "Copy website files to deploy {{ app_name }}"
ansible.builtin.copy:
src: /tmp/{{ template_name }}/
dest: /var/www/html/
remote_src: yes
owner: "{{ username }}"
group: "{{ username }}"
mode: "{{ file_permissions }}"
notify: "Restart Apache2"
- name: set facts
ansible.builtin.set_fact:
full_url: "http://{{ ansible_hostname }}:{{ application_port }}"
- name: endpoint details
debug:
msg: "Endpoint is {{ full_url }}"
handlers:
- name: "Restart Apache2"
ansible.builtin.systemd_service:
name: "{{ service_name }}"
state: restarted
ansible_hostname is default facts value and full_url set facts
TASK [endpoint details] ********************************************************
ok: [172.31.23.92] => {
"msg": "Endpoint is http://ip-172-31-23-92:80"
}
Task:
- create Tomcat10 installation playbook
- make nop playbook re-use
