Smartstate

Smartstate, uç birimlerin yapılandırmalarını periyodik olarak çekmesi için tasarlanan playbook’tur. “/etc/ansible/playbooks/” dizini altında bulunan “smartstate.yml” dosyasına bakıldığında, “hosts” satırında ansible’a ait “/etc/ansible/” altında bulunan “hosts” dosyasında “[smartstate]” satırı altına yazılmış tüm sunucularda bu playbookun oynatılacağı belirtilir. “sudo” satırı ile çalışacak komutların sudo yetkisi ile çalışması belirlenir. “vars_files” satırı smartstate playbookunun değişken dosyalarını belirtmektedir. “roles” satırı altında bulunan satırlarda ise bu playbook çalıştığında “smartstate” rolünün çalışacağı belirtilmektedir.

- hosts: smartstate  
  sudo: yes  
  vars_files:  
  - /etc/ansible/roles/smartstate/vars/main.yml  
  roles:  
  - role: smartstate

Smartstate Rolü Değişkenleri

Bu roldeki değişkenler “/etc/ansible/roles/smartstate/vars/” dizini altında bulunan main.yml dosyasında belirtilmiştir. Değişken bilgileri aşağıdaki gibidir;

  • ansible_git_url” değişkeni uç birimin pull ediceği ansible reposunu belirtir. “gdys_git_url” değişkeni uç birimin pull ediceği gdys reposunu belirtir. Firewall cihazları bu repodan değişiklik kontrolu yapmaktadır. Uç birim ile git reposu arasında ssh yapılandırılması yapılmalıdır. “gitlab_api_url” değişkeni gitlaba ssh key deploy etmek amacıyla kullanılacaktır. “gitlab_access_token” değişkeni gitlab’a baglanabilmek icin kullanılacak tokendır. Kullanıcı bunu arayüzden yaratıp buraya ekler.
    gitlab_ssh_private_key_file” değişkeni gitlaba baglanti icin kullanilan anahtardir. “branch” değişkeni hangi git branch’ının kullanılacağını belirtir. “ansible_directory” ve “gdys_directory“değişkenleri ansible ve gdys repolarının nereye kaydedilmesi gerektiğini belirtir. Anbible için bu klasörun MYS cihazındaki ile aynı olması gerektiğine dikkat ediniz. “log_file” değişkeni smartstate betiginin loglarını yazacağı dosyayı belirtir. “script_file” değişkeni smartstate betiginin nereye deploy edileceğini belirtir. “max_delay” ve “min_delay” pull komutunun çalışmadan önce bu iki süre arasında rastgele olarak beklemesini sağlar. Dakika cinsinden girilmelidir. “cron_file” cron yapılandırmalarının kaydedileceği dosyayı belirtir. “mys_push”, “mys_trigger”, “host_pull”, “mys_smartpush”, “mys_smarttrigger”, “host_smartpull” değişkenlerinin altından pull, push, trigger, smartpull, smartpush ve smarttrigger komutları için cron yapılandırması yapılır. Pull host cihazlarda, push ve trigger ise mys üzerinde çalışır. Cron zamanlarının çakışmamasına dikkat edilmelidir. “not_pull_hosts”” pull komutundan harici tutulacak hostları, “not_trigger_host” trigger komutundan harici tutulacak hostları, “not_smartpull_hosts”” smart pull komutundan harici tutulacak hostları, “not_smarttrigger_hosts”” smart trigger komutundan harici tutulacak hostları belirtir.
smartstate:
  ansible_git_url: "git@10.0.0.200:labris/ansible.git"
  gdys_git_url: "git@10.0.0.200:labris/gdys.git"
  gitlab_api_url: "http://192.168.0.16/api/v3"
  gitlab_access_token: "szsYsEShyAx_UZL7s9X2"
  gitlab_ssh_private_key_file: "/home/ahtapotops/.ssh/id_rsa"
  branch: "master"
  ansible_directory: "/etc/ansible"
  gdys_directory: "/home/ahtapotops/gdys"
  log_file: "/var/log/ahtapot/smartstate.log"
  script_file: "/opt/ahtapot/smartstate.py"
  max_delay: "60"
  min_delay: "0"
  cron_file: "/etc/cron.d/smartstate"
  mys_push:
    cron_minute: "0"
    cron_hour: "5"
    cron_day: "*"

  mys_trigger:
    cron_minute: "0"
    cron_hour: "3"
    cron_day: "*/7"

  host_pull:
    cron_minute: "0"
    cron_hour: "6"
    cron_day: "*/7"

  mys_smartpush:
    cron_minute: "20"
    cron_hour: "*/5"
    cron_day: "*"

  mys_smarttrigger:
    cron_minute: "0"
    cron_hour: "*/4"
    cron_day: "*"

  host_smartpull:
    cron_minute: "15"
    cron_hour: "*/7"
    cron_day: "*"


  #not_pull_hosts:
    #- host1
    #- host2
    #- host3

  #not_trigger_hosts:
    #- host1
    #- host2
    #- host3

  #not_smartpull_hosts:
    #- host1
    #- host2
    #- host3

  #not_smarttrigger_hosts:
    #- host1
    #- host2
    #- host3

Smartstate betigi

Smartstate playbooku host cihazlara ve mys üzerine deploy ettiği /opt/ahtapot/smartstate betiği ile calışır. Yardım menüsü aşağıdaki gibidir.

~$ /opt/ahtapot/smartstate.py --help
usage: smartstate.py [-h] [--host HOST] [--smart-pull] [--pull] [--smart-push]
                     [--push] [--smart-trigger] [--trigger]
                     [--check-inventory] [--delay]

optional arguments:
  -h, --help         show this help message and exit
  --host HOST        fqdn of host that playbook will run on. Needed when pull
                     is used
  --smart-pull       Pull playbooks and run if needed. It should be run on
                     remote device
  --pull             Pull playbooks and run regardless it changes or not
  --smart-push       Push changed playbooks. It should be used on post-commit
                     hook
  --push             Push all playbooks
  --smart-trigger    Trigger host to run smart pull
  --trigger          Trigger host to run pull
  --check-inventory  Check inventory file too on smart pull and push
  --delay            Delay random time before run