Kurulum
sudo apt install ansible
Master/Worker Kurulumu
/etc/ansible/hosts Dosyası
Bilgisayar grupları bu dosyada tanımlanır
Örnek
workers isimli bir grup tanımlamak için şöyle
yaparız[workers]
10.24.0.1
10.24.0.2
Kullanmak için şöyle yaparız
-hosts: workers
remote_user: root
Bağlantı Ayarları
Ansible normalde uzaktaki bilgisayara bağlanmak için ssh kullanır. Eğer kendi Linux sistemimizde bir şey çalıştıracaksak şöyle
yaparız
If you are connecting to localhost you shouldn't even need to use ssh, just make sure ansible_connection=local is set in your inventory for your localhost entry
[mylocalhost]
localhost ansible_connection=local
Eğer localhost yerine farklı bir isim kullanmak istersek bir örnek
burada.
Windows İçin Bağlantı
Windows uzak bağlantı için winrm kullanır.
Örnek
[windows]
13.233.160.153
[windows:vars]
ansible_user=LocalUsername
ansible_password=Password
ansible_connection=winrm
ansible_winrm_transport=basic
ansible_winrm_server_cert_validation=ignore
Bir başka örnek
şöyle. Burada port numarası da belirtiliyor.
[windows]
13.233.160.153
[windows:vars]
ansible_port=5985
ansible_connection=winrm
ansible_winrm_transport=basic
ansible_user=<<ansible_user>>
ansible_password=<<ansible_password>>
Playbook Nedir?
Yaml formatında yazılırlar. Açıklaması
şöyle. Playbokk asenkron da çalışabilir.
So rather than chaining ad-hoc commands together, you can set up a Playbook to run multiple commands at once.
...
Ansible provides the Asynchronous feature to allow an operation to run asynchronously such that the status may be checked. This can prevent interruption from SSH timeouts for long running operations.
Playbook Çıktısı
Çıktı olarak şuna benzer bir şey
alırız
PLAY RECAP ******************************************************************************
: ok=2 changed=1 unreachable=0 failed=0
Here changed=1 means, playbook made a change in worker nodes. If we run the playbook again, you would see this changed=0 . Which means there is no state change.
Modules
Module one small specific task içindir. Playbook module'leri çalıştırır
Değişkenler
Örnek
Şöyle yaparız
-hosts: databases
remote_user: root
vars:
tablename: foo
tableowner: someuser
tasks:
-name Rename table {{ tablename }} to bar
postgresql_table
table: {{ tablename }}
rename: bar
-name Set owner to someuser
postgresql_table
table: {{ tablename }}
owner: someuser
Kubernetes
Roles
Büyük bir playbook'un daha küçük parçalara bölünmüş hali gibi düşünülebilir. Yani roles içinde birden fazla playbook bulunur. Şöyle yaparız
ansible-galaxy init /etc/ansible/roles/apache --offline
Şeklen şöyle
defaults
-- main.yml
files
handlers
-- main.yml
meta
-- main.yml -- Role ile ilgili açıklamalar
tasks
-- main.yml
templates
tests
-- inventory
-- test.yml
vars
-- main.yml
tasks/main.yml
Diğer dosyaları çağırmak için şöyle yaparız
- include_tasks: install-docker-registry.yml
run_once: true
when: internal_registry == "docker_registry"
ansible-playbook komutu
Örnek
Şöyle yaparız
ansible-playbook komutu runsetup.yml
Örnek
Şöyle yaparız
ansible-playbook komutu runsetup.yml --syntax-check
Module Kullanımları
"become:true" hedef bilgisayarda "root" olmak istediğimizi belirtir.
apt module
tasks:
- name: Install VLC Media Player
apt: # the package manager
name: vlc-bin
state: latest
To remove a package, we just have to use the same syntax as the installation playbook. But
state: absent
command module
---
- name: "Check if User exists sample"
hosts: localhost
connection: local
vars:
users:
- nginx
- root
- user4
- user3
tasks:
- name: "check for user in /etc/passwd"
command: getent passwd {{ item }}
register: check_user
ignore_errors: yes
loop: "{{ users }}"
register: all_checks
- name: "iterate over checks"
debug:
msg:
- "{{ item.rc }}"
- "{{ item.item }}"
when:
- item.rc == 0
loop: "{{ all_checks.results }}"
copy module
The copy module is often used in writing playbooks when we want to copy a file from a remote server to destination nodes.
Örnek
Şöyle yaparız
- name : Copy configuration file
copy: src=/data/httpd.original dest=/etc/httpd/conf/httpd.conf
Örnek
ansible test-servers -m copy -a 'src=/home/knoldus/Personal/blogs/blog3.txt dest=/tmp'
-u ec2-user
ping module
workers grubundaki tüm bilgisayarlara ping atmak için şöyle
yaparız | SUCCESS => {
"changed": false,
"ping": "pong"
}
Örnek
---
- name: installvlc # name of the playbook
hosts: workers # where we need to install
become: true # run as sudo user
shell module
When we want to run UNIX commands then we use shell module
Örnek
ansible test-servers -m setup -u ec2-user
service module
When we want to ensure the state of a service that is service is running we use the service module.
Örnek
ansible test-servers -m service -a 'name=httpd state=started' -become -u ec2-user
setup module
The setup module is used when we want to see the information of all the hosts, their configuration, and detailed information.
Örnek
ansible test-servers -m shell -a 'ls -la' -u ec2-user
yum module
Örnek
Şöyle
yaparız. Burada -become seçeneği -u seçeneğinden önce kullanılmalı
ansible test-servers -m yum -a 'name=httpd state=present' -become -u ec2-user
Örnek
Şöyle yaparız
- name : Install httpd
yum: name=httpd state=latest