28 Eylül 2020 Pazartesi

Ansible

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 Player
    apt:                            # the package manager
      name: vlc-bin
      state: latest
Açıklaması şöyle
To remove a package, we just have to use the same syntax as the installation playbook. But
state: 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 playbook
    hosts: workers        # where we need to install
    become: true          # run as sudo user
shell module
Açıklaması şöyle
When we want to run UNIX commands then we use shell module
Örnek
Şöyle yaparız
ansible test-servers -m setup -u ec2-user
service module
Açıklaması şöyle
When we want to ensure the state of a service that is service is running we use the service module.
Örnek
Şöyle yaparız
ansible test-servers -m service -a 'name=httpd state=started' -become -u ec2-user
setup module
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