using ADHOC command
Do one task in ONE MACHINE(localhost)
Do one task in ONE REMOTE MACHINE
Do one task in MULTIPLE REMOTE MACHINES using Inventory
Do one task in MULTIPLE REMOTE MACHINES using group in Inventory
using Playbook(Program)
Do Multiple tasks(Playbook) in ONE MACHINE(localhost)
Do Multiple tasks(Playbook) in ONE REMOTE MACHINE
Do Multiple tasks(Playbook) in MULTIPLE REMOTE MACHINE using Inventory
Do Multiple tasks(Playbook) in MULTIPLE REMOTE MACHINE using group in Inventory
Do Multiple tasks(Playbook) in MULTIPLE REMOTE MACHINE using group of group in Inventory
Do Multiple tasks(Playbook) in MULTIPLE REMOTE MACHINE using environment directory Inventory
using Role(Program)
Do One Role in in ONE MACHINE(localhost)
Do Multiple Roles in ONE REMOTE MACHINE
Do Multiple Roles in MULTIPLE REMOTE MACHINE using Inventory
Do Multiple Roles in MULTIPLE REMOTE MACHINE using group in Inventory
Do Multiple Roles in MULTIPLE REMOTE MACHINE using group of group in Inventory
Do Multiple Roles in MULTIPLE REMOTE MACHINE using environment directory Inventory
Install Package in Local host using using adhoc command
Using ad-hoc Ansible commands
- Install Apache in Ubuntu
- Use the
aptmodule to install theapache2package.
- Use the
- Copy
index.htmlin Ubuntu- Use the
copymodule to copyindex.htmlto the web server’s document root.
- Use the
- Start the Web Service
- Use the
servicemodule to start theapache2service.
- Use the
Install Apache using apt module:
official – https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html
ansible localhost -m apt -a "name=apache2 state=present"
Copy index.html using copy module:
official – https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html
ansible localhost -m copy -a "src=/path/to/local/index.html dest=/var/www/html/index.html"
Start Apache service using service module:
official – https://docs.ansible.com/ansible/latest/collections/ansible/builtin/service_module.html
ansible localhost -m service -a "name=apache2 state=started"
Install Package in remote machine using adhoc command
Inventory
Inventory is a list of IP addresses or hostnames of the Ansible Remote Servers (ARS) that Ansible will manage.
Correct IP List:
- The correct format separates IP addresses with commas, without spaces
18.208.198.47,172.22.240.232
uthentication and Authorization
- Authentication: How to log in to the remote servers.
- Authorization: What actions you are allowed to perform on the remote servers.
Ansible Commands
Ad-hoc Commands with IP Addresses
- Install Apache using
aptmodule:
ansible -i "18.208.198.47,172.22.240.232," -m apt -a "name=apache2 state=present" -u jami -k -b
Copy index.html using copy module:
ansible -i "18.208.198.47,172.22.240.232," -m copy -a "src=index.html dest=/var/www/html/index.html" -u jami -k -b
Start Apache service using service module:
ansible -i "18.208.198.47,172.22.240.232," -m service -a "name=apache2 state=started" -u ubuntu -k -b
To install in all server at single run, please add ‘all’ instead of ‘-i’
ansible all -i 4.227.160.192,20.42.101.46, -m apt -a "name=apache2 state=present" -u jami -k -b
ansible all -i 4.227.160.192,20.42.101.46, -m copy -a "src=/home/jami/index.html dest=/var/www/html/index.html" -u jami -k -b
ansible all -i 4.227.160.192,20.42.101.46, -m service -a "name=apache2 state=started" -u jami -k -b
Explanation of the Command Options
-i: Specifies the inventory file or inline list of hosts.-m: Specifies the module to use (e.g.,apt,copy,service).-a: Provides arguments to the module.-u: Specifies the user to log in as (e.g.,ubuntu).-k: Prompts for the SSH password.-b: Usesbecometo execute commands with elevated privileges (sudo).
Getting below error on first run
4.227.160.192 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}
20.42.101.46 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."

Two things missing
Commands to Run on Each ARS
Update the package list:
Install sshpass
enable sshpass in both ansible remote server
apt-get update
apt install sshpass
Modifying the Ansible Configuration File
The image suggests modifying the Ansible configuration file located at /etc/ansible/ansible.cfg. Here are the steps to modify this file to disable host key checking, which can help avoid SSH-related issues.
Open the Ansible configuration file:
sudo nano /etc/ansible/ansible.cfg
Find the [defaults] section and add or modify the following line:
[defaults]
host_key_checking = False
- Save and close the file.
- Press
Ctrl + Xto exit. - Press
Yto confirm changes. - Press
Enterto save.
- Press
modify ansible config file
/etc/ansible/ansible.cfg (using this config file we can overwrite the behavior of executable)
root@Jami2:/home/jami# vim /etc/ansible/ansible.cfg
copy configuration file and search in google from ansible.cfg
https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg


add section and host_key_checking = False
[defaults]
host_key_checking = False
Now run all the command
ansible all -i 4.227.160.192,20.42.101.46, -m apt -a "name=apache2 state=present" -u jami -k -b
ansible all -i 4.227.160.192,20.42.101.46, -m copy -a "src=/home/jami/index.html dest=/var/www/html/index.html" -u jami -k -b
ansible all -i 4.227.160.192,20.42.101.46, -m service -a "name=apache2 state=started" -u jami -k -b
Go to google and hit the ip address, if getting below page it means https not enable in VM

alternate check from VM using
curl http://localhost
its working

enable http inbound security rule from network setting to access from internet
Example: Allowing Port 80 (HTTP)
Here is an example of allowing port 80 for HTTP traffic:
- Source: Any
- Source port ranges: *
- Destination: Any
- Destination port ranges: 80
- Protocol: TCP
- Action: Allow
- Priority: 100 (or an appropriate value based on your existing rules)
- Name: Allow-HTTP


Install Package in Multiple remote machine using Inventory
Inventory File
The inventory file lists the IP addresses of the remote servers (Ansible Remote Servers – ARS).
Inventory File (inventory):
18.208.198.47
172.22.240.232
Ansible Commands
The commands provided in the image use the inventory file to run tasks on the remote servers.
Install Apache using apt module:
ansible all -i inventory -m apt -a "name=apache2 state=present" -u ubuntu -k -b
- all: Targets all hosts listed in the inventory.
- -i inventory: Specifies the inventory file.
- -m apt: Uses the
aptmodule. - -a “name=apache2 state=present”: Arguments for the
aptmodule, ensuring Apache (apache2) is installed. - -u ubuntu: Specifies the remote user (
ubuntu). - -k: Prompts for the SSH password.
- -b: Uses
becometo run the command with elevated privileges (sudo).
Copy index.html using copy module:
ansible all -i inventory -m copy -a "src=index.html dest=/var/www/html/index.html" -u ubuntu -k -b
- -m copy: Uses the
copymodule. - -a “src=index.html dest=/var/www/html/index.html”: Arguments for the
copymodule, copyingindex.htmlto/var/www/html/index.html.
Start Apache service using service module:
ansible all -i inventory -m service -a "name=apache2 state=started" -u ubuntu -k -b
- -m service: Uses the
servicemodule. - -a “name=apache2 state=started”: Arguments for the
servicemodule, ensuring the Apache service (apache2) is started.
Putting It All Together
Create Inventory File: Create a file named inventory with the following content:
18.208.198.47
172.22.240.232
- Run Ansible Commands:
Install Apache:
ansible all -i inventory -m apt -a "name=apache2 state=present" -u ubuntu -k -b
Copy index.html to Web Server:
ansible all -i inventory -m copy -a "src=index.html dest=/var/www/html/index.html" -u ubuntu -k -b
Start Apache Service:
ansible all -i inventory -m service -a "name=apache2 state=started" -u ubuntu -k -b
ansible all -i inventory -m apt -a "name=apache2 state=present" -u jami -k -b
ansible all -i inventory -m copy -a "src=/home/jami/index.html dest=/var/www/html/index.html" -u jami -k -b
ansible all -i inventory -m service -a "name=apache2 state=started" -u jami -k -b
Install Package in MULTIPLE REMOTE MACHINES using group in Inventory
Inventory File with Groups
The inventory file defines groups of hosts. Here, there are two groups: web and db.
Inventory File (inventory):
[web]
18.208.198.47
172.22.240.232
[db]
18.208.198.4
172.22.240.2d
Ansible Commands Using Groups
The commands provided in the image target the web group to install Apache, copy a file, and start the Apache service.
Install Apache using apt module:
ansible web -i inventory -m apt -a "name=apache2 state=present" -u ubuntu -k -b
Copy index.html using copy module:
ansible web -i inventory -m copy -a "src=index.html dest=/var/www/html/index.html" -u ubuntu -k -b
Start Apache service using service module:
ansible web -i inventory -m service -a "name=apache2 state=started" -u ubuntu -k -b
Explanation of the Commands
web: Specifies the group of hosts to target (webgroup).-i inventory: Specifies the inventory file.-m apt: Uses theaptmodule.-a "name=apache2 state=present": Arguments for theaptmodule, ensuring Apache (apache2) is installed.-m copy: Uses thecopymodule.-a "src=index.html dest=/var/www/html/index.html": Arguments for thecopymodule, copyingindex.htmlto/var/www/html/index.html.-m service: Uses theservicemodule.-a "name=apache2 state=started": Arguments for theservicemodule, ensuring the Apache service (apache2) is started.-u ubuntu: Specifies the remote user (ubuntu).-k: Prompts for the SSH password.-b: Usesbecometo run the command with elevated privileges (sudo).

Leave a Reply