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

Turn on JavaScript to leave a comment.

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

Please turn AdBlock off
Social Media Icons Powered by Acurax Web Design Company
Exit mobile version
%%footer%%