DevOps Classroom notes 13/Nov/2026

Ansible Role:

  • a role is standard , self contained folder layout that bundles tasks, varibales, handlers, templates and files.

keypoints:

  • Reusable: same role we can use manay projects
  • Organised:
    • no lone lines playbook
    • managed playbook limits
    • manin files separately
  • shareable: Publish on Ansible Galaxy or Git
  • Testable: test a role independently

Create role by cmd

ansible-galaxy role init tomcat
# out put
- Role tomcat was created successfully
tomcat/
├── README.md  # this added information role 
├── defaults
│   └── main.yml # overide values
├── files # like service file , any kind file static files
├── handlers # notified task need run when dependancy
│   └── main.yml
├── meta # information playbook , author, details version
│   └── main.yml
├── tasks # what cmd or excute in playbook 
│   └── main.yml
├── templates # .j2 (dynamic files)
├── tests  # basic validate playbook
│   ├── inventory
│   └── test.yml
└── vars # varibales file (inputs to playbook)
    └── main.yml

Tomcat playbook smaple

# Tomcat 
- name: tomcat
  hosts: all
  become: true
  vars:
    tomcat_group: tomcat
    tomcat_app_version: tomcat-10
    java_package: default-jdk
    tomcat_version: 10.1.61
    tomcat_user: tomcat
    home: /opt/tomcat
    url: "https://dlcdn.apache.org/tomcat/{{ tomcat_app_version }}/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz"
  tasks:
    - name: java installation
      ansible.builtin.apt:
        name: "{{ java_package }}"
        state: present
      cache_update: yes

    - name: create tomcat group
      ansible.builtin.group:
        name: "{{ tomcat_group }}"
        system: yes
        state: present

    - name: create tomcat user
      ansible.builtin.user:
        name: "{{ tomcat_user }}"
        group: "{{ tomcat_group }}"
        home : "{{ home }}"
        shell: /bin/false
        system: yes
        state: present

    - name: download tomcat
      ansible.builtin.get_url:
        url: "{{ url }}"
        dest: /tmp/apache-tomcat-{{ tomcat_version }}.tar.gz

    - name: extract tomcat
      ansible.builtin.unarchive:
        src: /tmp/apache-tomcat-{{ tomcat_version }}.tar.gz
        dest: /opt/tomcat
        remote_src: yes

    - name: change ownership of tomcat directory
      ansible.builtin.file:
      path: /opt/tomcat
      state: directory
      recurse: yes
      owner: "{{ tomcat_user }}"
      group: "{{ tomcat_group }}"

    - name: provide execute permission to tomcat scripts
      ansible.builtin.file:
        path: /opt/tomcat/bin
        state: directory
        recurse: yes
        mode: u+x
    
    - name: update java alternatives
      ansible.builtin.shell: 
        cmd: update-java-alternatives -l

    # - name: create tomcat service file
    #   ansible.builtin.copy:
    #     src: files/tomcat.service
    #     dest: /etc/systemd/system/tomcat.service

    - name: create tomcat service file
      ansible.builtin.copy:
      dest: /etc/systemd/system/tomcat.service
      content: |
        [Unit]
        Description=Tomcat
        After=network.target

        [Service]
        Type=forking

        User=tomcat
        Group=tomcat

        Environment="JAVA_HOME=/usr/lib/jvm/java-1.25.0-openjdk-amd64"
        Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
        Environment="CATALINA_BASE=/opt/tomcat"
        Environment="CATALINA_HOME=/opt/tomcat"
        Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
        Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

        ExecStart=/opt/tomcat/bin/startup.sh
        ExecStop=/opt/tomcat/bin/shutdown.sh

        RestartSec=10
        Restart=always

        [Install]
        WantedBy=multi-user.target
      notify:
        - reload systemd daemon
        - start tomcat service

  handlers:
    - name: reload systemd daemon
      ansible.builtin.systemd:
        daemon_reload: yes
    
    - name: start tomcat service
      ansible.builtin.systemd:
        name: tomcat
        state: started
        enabled: yes

Task

  1. use above playbook and validate
  2. create github account https://github.com/

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Please turn AdBlock off
Plugin for Social Media by Acurax Wordpress Design Studio
Visit Us On FacebookVisit Us On LinkedinVisit Us On Youtube