What Is Ansible?
A task could be Installing NGINX webserver, for example.
In Ansible, we name a task and write down the command we want it to execute.
A task can be part of bigger thing like bringing up our e-commerce website.
Other tasks like applying updates, adding our custom config file can also be added.
The bigger thing or a group of tasks is grouped in what we call a Playbook.
A Playbook is just a file where we tell Ansible the tasks we want it to execute in an orderly fashion.
Ansible doesn't depend on additional daemons, client or servers.
The mechanics of Ansible
A Control node (that has Ansible installed) reads a Playbook file and executes the tasks listed in the playbook.
We also mention in the playbook the host or group of hosts where such tasks should be executed.
The inventory file is where we have a list of individual hosts.
We can group individual hosts into groups within the Inventory file.
In the example below, we execute ansible-playbook <playbook_name> command on Ansible control node (10.10.10.100).
It then reads a Playbook file that has 2 tasks.
Task1 is executed on DBServers group of hosts and Task2 on WebServers group:
Ansible Terms:
- Controller Machine: The machine where Ansible is installed, responsible for running the provisioning on the servers you are managing.
- Inventory: An initialization file that contains information about the servers you are managing.
- Playbook: The entry point for Ansible provisioning, where the automation is defined through tasks using YAML format.
- Task: A block that defines a single procedure to be executed, e.g. Install a package.
- Module: Ansible modules are discrete units of code which can be used from the command line or in a playbook task.
- Role: A pre-defined way for organizing playbooks and other files in order to facilitate sharing and reusing portions of a provisioning.
- Play: A provisioning executed from start to finish is called a play. In simple words, execution of a playbook is called a play.
- Facts: Global variables containing information about the system, like network interfaces or operating system.
- Handlers: Used to trigger service status changes, like restarting or stopping a service.
ANSIBLE ARCHITECTURE
Ansible installation on linux AWS
Step1:
Launch a new Two Linux 2 Aws instance(one will be the controller, the other will be the Target host)
Step 2:
On The Target host machines Set password Authentication:
Switch to root user
sudo su -
Then edit the sshd_config file to enable password authentication
vi /etc/ssh/sshd_config
look for the below line and change the entry from no to yes
PasswordAuthentication yes
#PermitEmptyPasswords no
#PasswordAuthentication no
Next Create a password for ec2-user
passwd ec2-user
#then enter the password twice and press enter(you can use admin123)
Next Edit the sudoers file to enable ec2-user have full previledges
vi /etc/sudoers
Insert the below line in the editor and save
ec2-user ALL=NOPASSWD: ALL
Next restart the ssh service with below command
systemctl restart sshd
Step 3:On Ansible Controller machine Install Ansible
Switch to root
sudo su -
Install Ansible
sudo yum update -y
amazon-linux-extras install ansible2 -y
ansible --version
Next edit the hosts file which will contain inventory of all ur target hosts and add ur target host ip
vi /etc/ansible/hosts
Uncomment [webservers] delete the entries under it and Add ip of Target host under it
Save then switch to ec2-usersu - ec2-user
Generate a keypair
ssh-keygen
#Press enter four times to generate ssh key to connect the hosts machine
Next send the public key of the Ansible Controller to the target machine by executing this command
ssh-copy-id -i ec2-user@ipofansiblehost
eg ssh-copy-id -i ec2-user@192.168.25.1
You will be prompted for password. Enter ur password: admin123
Now try and connect to the target host
ssh ec2-user@ipofansiblehost
eg ssh ec2-user@192.168.25.1
Then exitexit
#check for remote connection to your hosts machine with below commandansible -m ping webservers
#Ansible Module: A module is a command or set of similar Ansible commands meant to be executed on the client-side
#example of module commandansible -m user -a "name=paul password=paul" webservers --become#yum moduleansible -m yum -a "name=httpd state=present" webservers --become
#check with httpd is started with below command in the hosts machinesystemctl status httpd
#use service module to start the hosts machine
ansible -m service -a "name=httpd state=started" webservers --become
Let's use some playbooksudo vi playbook.ymlInsert the below lines into the playbook---- hosts: webservers become: true become_user: root tasks: - name: Install httpd yum: name=httpd state=present - name: start httpd service: name=httpd state=startedSave with :wq!#check for syntax errors with below commandansible-playbook playbook.yml --syntax-check
#do a dry run with below command
ansible-playbook playbook.yml --check
sudo vi playbook02.yml
Paste the below lines into the editor and save---- hosts: webservers become: true become_user: root tasks: - name: Install tomcat yum: name=tomcat state=present - name: start tomcat service: name=tomcat state=started - name: Deploy war file get_url: url=https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war dest=/usr/share/tomcat/websapps notify: restart tomcat handlers: - name: restart tomcat service: name=tomcat state=restarted
#Now run the playbookansible-playbook playbook02.yml
ansible -m service -a "name=httpd state=started" webservers --become
No comments:
Post a Comment