Saturday, August 21, 2021

Ansible 11 The uri module with examples

 Hey DevSecOps Automation specialist, Welcome back to the DevOps Hunter blog. In this post, I made it for learning more about all possible parameters that we can use when an application validation is done with the Ansible 'uri' module. 

Why uri module?

Web Application returns status HTTPCode 200 for success, 404 for failures, and also for 503 for Server internal issues. When you work on the restart of a web application we need to know the status of the application to proceed with the next move. So this uri module is most important for reboot and restart of web applications using ansible.



The uri module parameters

Supported parameters include: attributes, backup, body, body_format, client_cert, client_key, content, creates, delimiter, dest, directory_mode, follow, follow_redirects, force, force_basic_auth, group, headers, http_agent, method, mode, owner, regexp, remote_src, removes, return_content, selevel, serole, setype, seuser, src, status_code, timeout, unix_socket, unsafe_writes, url, url_password, url_username, use_proxy, validate_certs

The Ansible uri module return the following parameters while working with given URL


headers add headers to your requests

body - insert a body in your request 

body_format - format of the body in JSON or raw

creates - doesnot run the task if a file exists

dest: where to create the new file 

follow_redirects - when https redirects to http returns 301 

force_basic_auth - you need to provide username, password to chedk url

method - REST api possible methods it will supports GET POST DELETE PUT HEAD PATCH TRACE 

Prerequisites

Ansible installed and managed nodes with application up and running

Alternatively, application test URL we can take this blog URL as well.

Usecase 1: Let's check out blog URL does the Ansible uri module can test?

- name: Check public domain URL
  hosts: localhost
  gather_facts: no
  tasks:
  - name: uri
    uri:
      url: https://devopshunter.blogspot.com
      method: GET
      validate_certs: False
Execute the playbook as
ansible-playbook urlcheck.yml

Ansible uri module with GET method


Usecase 2: Now we can test our project related application urls with the following playbook

- name: test apache url
  hosts: web
  gather_facts: no
  tasks:
  - name: uri
    uri:
      url: http://{{ansible_host}}
      method: GET
      validate_certs: False
      status_code: 200
Testing the above web application testing test run as follows:
Image

Ansible uri module with GET method and status_code checking
Ansible uri module with GET method and status_code checking

Usecase 3: Checking for the multiple status code values 200, 201, 301
- name: Check status code public domain URL
  hosts: localhost
  gather_facts: no
  tasks:
    - name: Check uri in 200,201,301
      uri:
        url: https://httpbin.org/status/500
        method: POST
        status_code: [200,201,301]
        validate_certs: False
Execute the play and check what does 
ansible-playbook uri_multi_status_code.yml

Image: 

Ansible uri module check for multiple HTTP codes
Ansible uri module multiple status code



Usecase 4: Getting the content of the given url

- name: Check content
  hosts: db
  gather_facts: no
  tasks:
  - name: Show content of a given uri
    uri:
      url: http://httpbin.org/get
      return_content: yes
      method: GET
    register: __content

  - name: debug
    debug:
      var: __content.content

Execute play as follows:
ansible-playbook check_content.yml
Image
Ansible uri module content
Content of given url usibng ansible uri module

Usecase 5: HTTP Application return body
# Filename uri_body.yml
- name: Get the body of the url
  hosts: db
  gather_facts: false
  tasks:
  - name: Get the status, url from body from uri
    uri:
      url: http://httpbin.org/get
      method: GET
      return_content: yes
      validate_certs: False
      body_format: json
    register: __body
  - name: debug status, url
    debug:
      var: __body.status, __body.json.url
  - name: debug json block
    debug:
      var: __body.json
Execute play as follows:
ansible-playbook uri_body.yml
Note that URL passed here is the test URL, whereas in projects we need to pass this value of web applications that provide the REST service that can be used with the HTTP Get request object.

Ansible uri module body parameter
Ansible uri module example to get body parameter


Usecase 6: Basic authentication with user and password  parameters passing

# File: uri_basic_auth.yml
- name: Get the body of the url
  hosts: localhost
  gather_facts: false
  tasks:
  - name: uri module using user password
    uri:
      url: https://httpbin.org/basic-auth/vybhava/technologies
      user: "vybhava"
      password: "technologies"
      method: GET
      validate_certs: False  
  
Execution

ansible-playbook uri_basic_auth.yml
Image
Ansible uri basic auth
Ansible uri module basic auth parameters user, password

interesting facts:

Basic auth testing on browser 




Have fun and enjoy experimenting with this uri module.

Good references on the get_url module
 

No comments:

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create deployment (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)