Kurulum
Şöyle yaparız
sudo apt install ansible
Master/Worker Kurulumu
Master'da ssh-keygen ile üretilen public key, worker bilgisayara kopyalanır
/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
Bu durumda şöyle yaparız
[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
Şöyle yaparız
[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
Açıklaması şöyle
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
Bazı örnekler burada
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
Şöyle yaparız.
tasks:- name: Install VLC Media Playerapt: # the package managername: vlc-binstate: latest
Açıklaması şöyle
To remove a package, we just have to use the same syntax as the installation playbook. Butstate: absent
command module
Şöyle yaparız
---
- 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
Açıklaması şöyle
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
Şöyle yaparız
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
ansible workers -m ping
Çıktı olarak şunu alırız
| SUCCESS => {"changed": false,"ping": "pong"}
Örnek
Açıklaması şöyle
---- name: installvlc # name of the playbookhosts: workers # where we need to installbecome: true # run as sudo user
Şöyle yaparız
Açıklaması şöyle
The setup module is used when we want to see the information of all the hosts, their configuration, and detailed information.
Örnek
Şöyle yaparız
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
Hiç yorum yok:
Yorum Gönder