What is Ansible
Ansible interacting with machines via SSH. So nothing need to be installed in client machines. Only prerequisite is ansible need to be installed in controller machine with python and ssh enabled.
Inventory:
Inventory file:
Inventory file is an simple text file which contains List of machines going to interact with it. We can mention single machines or group of machines going to use it. We can pass direct commands to modules in cmd line using ansible cli.
Cmd: ansible group-name -i <inventory-filename> -m <module-name> <module-params>
ansible group-name -i <inventory-filename> -m <module-name> <module-params>
Inventory:
server1.mycomp.comserver2.mycomp.com
[clients] #group nameserver3.mycomp.comserver4.mycomp.com
Ex:
ansible clients -i inventory -m pingansible clients -i inventory -m apt -a "name=mysql-server state=present"
Inventory file can also be an executable file. For example if you don’t know the number of instances running in AWS means we can simple write a script to return running instances name from AWS.
Ansible play books:
Ansible playbook is an simple YAML file which contains list of tasks that need to be performed in client machines which we mentioned in inventory file.
playbook.yaml
---
- hosts: alltasks:- name: updating package listapt: update_cache=yes cache_valid_time=3600- hosts: clientstasks:- name: installing mysql serverapt: name=mysql-server state=present
In above code snippet, we used apt module for updating and installing packages. Host all specifies perform the task to all the host machines which we mentioned in inventory file.
And also we can perform task to specific group of hosts. “hosts: client” specifies perform below mentioned tasks only to client group which we created in inventory file. “-name” of each tasks contains some human readable message which will print while performing the tasks. This will be very helpful while monitoring the execution
Running playbook:
ansible-playbook -i inventory playbook.yaml
Vaiables in playbook:
Ansible using jinja2 templating system for dealing with varibles.
playbook.yaml
---- hosts: alltasks:- name: updating package listapt: update_cache=yes cache_valid_time=3600- hosts: clientsvars:init_script: "create_db.sql"tasks:- name: installing mysql serverapt: name=mysql-server state=present- name: coping init sql files
copy: src=/tmp/{{init_script}} dest=/tmp/mysql/{{init_script}}
Variable loops in playbook:
playbook.yaml
---- hosts: alltasks:- name: updating package listapt: update_cache=yes cache_valid_time=3600- hosts: clientsvars:init_script: “create_db.sql"tasks:- name: installing mysql serverapt: name={{item}} state=presentwith_items:- python- python-pip- vim- name: coping init sql files
copy: src=/tmp/{{init_script}} dest=/tmp/mysql/{{init_script}}
Other way - we can combine the variables based on hosts vise
playbook.yaml
---
- hosts: alltasks:- name: updating package listapt: update_cache=yes cache_valid_time=3600- hosts: clientsvars:packages:- python- python-pip- vimtasks:- name: installing mysql serverapt: name={{item}} state=presentwith_items: {{packages}}- name: coping init sql filescopy: src=/tmp/{{init_script}} dest=/tmp/mysql/{{init_script}}
Directory Group variables:
In default ansible will look directory called “group_vars” and “host_vars” in same location which playbook located. If you define any variables under the group_vars directory it will automatically applied to that specific group.
My folder structure:
- inventory
- playbook.yml
- group_vars
- all
- clients
- host_vars
In above folder structure, variable defined in the file called “all” under the group_vars directory which will be available for all hosts defined in inventory hosts. If you want to define variables for specific host create file with same hostname under the “host_vars” directory.
Inventory directory:
Normally inventory file will be simple test file but it can also be an directory.
ansible-playbook -i <inventory-dirctory> playbook.yml
- ansible-playbook -i uat deploy.yml
- ansible-playbook -i dev deploy.yml
- ansible-playbook -i prod deploy.yml
Directory structure of inventory folder:
dev
- hosts
- group_vars
- host_vars
uat
- hosts
- group_vars
- host_vars
Prod
- hosts
- group_vars
- host_vars
deploy.yml
Is there any text files available in your inventory directory, ansible will treat it as inventory file.
Roles in ansible:
You can use single playbook file for managing entire tasks of your infrastructure. But once in a stage your playbook file will be more bigger and hard to manage. For this ansible has the “role” feature, so you can split your playbook yaml file into more moduler way.
You can create a directory called “roles” and create playbook modules.
Roles directory structure:
dev
- hosts
- group_vars
- host_vars
roles
- common
- defaults
- main.yml # variable values
- tasks
- main.yml # list of tasks need to be execute
- files
- server.py # file need to be copy
- templates
- config.py.j2 # template file used for template module
- meta
- main.yml # list the dependency task before perform
- webserver
- defaults
- main.yml # variable values
- tasks
- main.yml # list of tasks
- db
- tasks
- main.yml # list of tasks
deploy.yml
Deploy.yaml
- hosts: database-serverroles:- common- db- hosts: web-serverroles:- common
- webserver
Here we can break down the roles folder into more modules. It has documented in ansible documentation site.
- Defaults folder contains the variable need to be register
- Task folder contains task need to be perform for that group
- Files folder contains the files need to be transferred
- Templates folder is for template module
- Meta folder contains the dependency list for That specific group
Ex:
main.yml
---
Dependencies:
- common
- db
kayseriescortu.com - alacam.org - xescortun.com
ReplyDeleteüsküdar lg klima servisi
ReplyDeletekadıköy bosch klima servisi
maltepe arçelik klima servisi
kadıköy arçelik klima servisi
kartal samsung klima servisi
kartal mitsubishi klima servisi
ümraniye mitsubishi klima servisi
beykoz vestel klima servisi
beykoz bosch klima servisi