Smartstate Kurulum Yönergesi¶
Bu dökümanda uç birimlerin periyodik olarak yapılandırmaları çekmesini sağlayan smartstate rolünün kurulumu anlatılmaktadır.
Smartstate Sistemi Kurulum İşlemleri¶
- NOT: Dökümanda yapılması istenilen değişiklikler gitlab arayüzü yerine terminal üzerinden yapılması durumunda playbook oynatılmadan önce yapılan değişiklikler git’e push edilmelidir.
$ cd /etc/ansible
git status komutu ile yapılan değişiklikler gözlemlenir.
$ git status
$ git add --all
$ git commit -m "yapılan değişiklik commiti yazılır"
$ git push origin master
-
Gitlab adresine bir web tarayıcı vasıtası ile girilerek Gitlab web arayüzüne “https://gitlabsunucuadresi” ile erişilir.
-
Gitlab arayüzünden mys resposundaki “hosts” dosyasında “[smartstate]” fonksiyonu altına smartstate sunucusunun FQDN bilgisi girilir.
[smartstate]
smartstate.gdys.local
- Gitlab arayüzünden mys reposundaki “roles/base/vars/host.yml” dosyasına smartstate sunucusunun ip adresi, FQDN bilgisi ve hostname’i yeni bir server bloğu oluşturularak yazılır.
serverN:
ip: "X.X.X.X"
fqdn: "smartstate.gdys.local"
hostname: "smartstate"
Ardından smartstate sistemi ile ilgili aşağıda tanımlanmış değişkenler açıklamalarda belirtilen şekilde uygun değerlerle doldurulur.
Uç Sistemlere Değişen Yapılandırmaların Otomatik Olarak Yollaması¶
- Her bir commit sonrası değişen yapılandırmalar uç sistemlere merkezden aktarılmak isteniyorsa aşağıdaki komut MYS makinasında .git/hooks/post-commit dosyasına eklenerek her commit sonrası otomatik bir şekilde çağırılır.
/opt/ahtapot/smartstate.py --smart-push
- Her push sonrası smartstate hostlarının yapılandırmalarını çekmesi isteniyorsa aşağıdaki gibi bir alias eklenerek bu işlem yapılabilmektedir.
$ git config alias.xpush '!git push $1 $2 && /opt/ahtapot/smartstate.py --smart-trigger'
Daha sonra push yapılmak istendiğinde git push yerine git xpush çağırılarak sistemler uyarılır ve yapılandırmaları çekerler.
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
İlgili değişkenler ayarlandıktan sonra aşağıdaki komut ile smartstate yapılandırması aktarılır.
ansible-playbook /etc/ansible/playbooks/smartstate.yml