Python – Hizlica *args ve **kwargs

Cok gorup ne olduguna bakarim dedigim *args ve **kwargs hakkinda bir iki ornek
# Fonksiyonun alacagi deger sayisi belli 2
def toplama1(deger1,deger2):
    return int(deger1) + int(deger2)

print toplama1("3","3")

# Fonksiyonun alacagi deger sayisi belli degil ise
def toplama2(*args):
    return sum(args)

print toplama2(2,3,6,7,8,9,0,1,24,6,7)

# args burada ozel degil asagidaki gibi farkli sekildede yazilabilir onemli olan yildiz
def toplama3(*zasfdfdf):
    return sum(zasfdfdf)

print toplama3(1,1)

# Farkli bir kullanim yapar isek * ayni zamanda ikideger olarak set edilen degiskeni bolerek fonksiyona verebiliyor
def toplama1ustu(deger1,deger2):
    return int(deger1) + int(deger2)

ikideger = [10,20]

print toplama1ustu(*ikideger)

"""
Yildiz sayisini ikiye cikarinca bu kez key value almaya basliyoruz
Python da dictionary olarak geciyor
Bu arada genel orneklerde anlasilsin diye key, value diye tanimlaniyr , ondan bagimsiz kullanabilecegimizi gostermek
icin ahmet i key olarak mehmeti value olarak kullandim
Bu arada *** ise yaramiyor farki birsey yapmiyor :)
"""

def degiskenleribas(**kwdegisken):
    for ahmet, mehmet in kwdegisken.items():
        print (ahmet,mehmet)

print degiskenleribas(a=5,b=6,c=8)

Kolay Gelsin
VM

Hizli git :) Referans/Baslangic

Hizlica gitelim :)

sudo apt-get install git

mkdir /home/noroot/ansible
cd /home/noroot/ansible

# Degisiklikleri takip edebilmek icin gerekli araclari yukluyor git !

noroot@acc:~/ansible$ git init 

Initialized empty Git repository in /home/noroot/ansible/.git/

Working Directory : Dosya yaratma , editleme , silme gibi islemlerin tumu burada olacak

Staging Area : Burada working directory’de ne degismis ise veya bir sonra commit’de veya Repo’ya ne aktarilacak ise o var. Kendisi bir snapshot.

Repository : Kalici olarak ve versionlanarak saklanacagi yer.

Burada commit ve Git Repo onemli , degisiklikler kalici saklanabilmesi icin commit edilmeli , saklanacak yerde Git Repo.

Durumu Gorelim 

iki tane dosya ekledim /home/noroot/ansible dizinine , git status ile bakalim ne gorecek

noroot@acc:~/ansible$ git status

On branch master

Initial commit

Untracked files:

(use “git add <file>…” to include in what will be committed)

hosts

ubuntu_update.yml

nothing added to commit but untracked files present (use “git add” to track)

Git derki benim takip edemedigim iki dosya var bilgine , eger bunlari takip etmemi istiyor isen git add dosya.adi yap ki izleyeyim.

noroot@acc:~/ansible$ git add hosts ubuntu_update.yml 

noroot@acc:~/ansible$ git status

On branch master

Initial commit

Changes to be committed:

  (use “git rm –cached <file>…” to unstage)

new file:   hosts

new file:   ubuntu_update.yml

Simdi hosts dosyasini editledim 

noroot@acc:~/ansible$ vi hosts 

Bu kez status komutuna -s parametresi ekleyelim , M bize bisiylerin degistirildigini gosteriyor

noroot@acc:~/ansible$ git status -s

AM hosts

A  ubuntu_update.yml

Acaba ne degisti , bakiniz –> +[webservers] <– bu satiri eklemisim

noroot@acc:~/ansible$ git diff

diff –git a/hosts b/hosts

index e69de29..173b9c3 100644

— a/hosts

+++ b/hosts

@@ -0,0 +1 @@

+[webservers]

noroot@acc:~/ansible$ git add hosts diyerek tekrardan degisiklikleri staging alanina ekliyoruz …

Simdi degisiklikleri “commit” edelim , oncesinde kim oldugumuzu bir tanitalim

noroot@acc:~/ansible$ git config –global user.email “vahric@gmail.com”
noroot@acc:~/ansible$ git config –global user.name “vahric”

noroot@acc:~/ansible$ git commit -m “hosts ve ubuntu_update.yml olsuturuldu”

[master (root-commit) d4f6a53] hosts ve ubuntu_update.yml olsuturuldu

2 files changed, 1 insertion(+)

create mode 100644 hosts

create mode 100644 ubuntu_update.yml

Commit History Gorelim

noroot@acc:~/ansible$ git log

commit d4f6a539a0d03ed2042d7f4e61e3e8dca00610d1

Author: vahric <vahric@gmail.com>

Date:   Wed Jan 20 15:59:36 2016 +0200

hosts ve ubuntu_update.yml olsuturuldu

Hersey nerede 

Bakiniz --> .git/objects

Su ana kadar herkez local repo’da idi , sunlari Github’a basip guzelleselim

Oncelikle public bir repo yaratiyorum ansible_tests adinda

Cli> da asagidaki komutu girelim ve

noroot@acc:~/ansible$ git remote add origin https://github.com/vahric/ansible_tests.git

noroot@acc:~/ansible$ git push -u origin master

Username for ‘https://github.com&#8217;: vahric

Password for ‘https://vahric@github.com&#8217;:

Counting objects: 4, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (4/4), 286 bytes | 0 bytes/s, done.

Total 4 (delta 0), reused 0 (delta 0)

To https://github.com/vahric/ansible_tests.git

* [new branch]      master -> master

Branch master set up to track remote branch master from origin.

Bukadar simdilik

 

Esitliklerle Ansible – Variables/Degerler Kontrol ve Moduller

Degiskenler , her yazilimi dilinde oldugu gibi playbook icersinde, Inentory icersinde birtakim degiskenler kullanma ihtiyacimiz olacaktir.

Ansible ile once dogru degisken nasil kullanilmali ona bakalim ;

  • degisken1 –> olur
  • degisken_1 –> olur
  • 1234 –> olmaz, rakamla baslayamaz
  • ahmet abi –> olmaz, bosluk yok
  • en.guzel –> olmaz
  • Birde python ile gelistirildiginden kullandiginiz key’ler python rezerve edilmis ozel anlamli seyler olmazin mesela –> islower , split , encode gibi gibi , aksi taktirde olasi bir degiskene erisimde eger “.” notasyonu kullaniyorsaniz problem yaratacaktir

Inventory ve Variables 

Buna en guzel ornek gurupladigimiz hostlar olabilir , ornegin

 

noroot@ansible:~$ cat /etc/ansible/hosts

[testsunucular]

sunucu1 ansible_user=noroot

Mesela yukarida sunucu1 hostuna ansible_user degiskeni noroot olacak sekilde set edilmis

noroot@ansible:~$ cat /etc/ansible/hosts

[testsunucular]

sunucu1 ansible_user=noroot

sunucu2 ansible_user=noroot

[testsunucular:vars]

ntp_server_adresi=NTP1.ULAKBIM.GOV.TR

Yukarda ise tum testsunucular gurubuna uye olan sunucu1 ve sunucu2 icin ntp_server_adresi diye bir deger atadik bunu playbook’da kullanilabilir olacak.

Simdi bunu test etmenin kolay bir yolu var bir onceki makaledeki playbook a ufak bir eklenti yapalim , eklentiyi task altindaki ilgili name girdisinin altina ayni esitlikte koyalim, yani

– hosts: sunucu1

tasks:

– name: Apache kurulumuna baslayalim

apt: name=apache2 state=latest

become: yes

       – debug: var=ntp_server_adresi

Cikti olarak asagidaki gibi gormeniz lazim

TASK [debug] *******************************************************************

ok: [sunucu1] => {

“ntp_server_adresi”: “NTP1.ULAKBIM.GOV.TR”

}

Playbook ve Variables 

– hosts: sunucu1

    vars:

    cok_guzel: cidden_guzel

tasks:

– name: Apache kurulumuna baslayalim

apt: name=apache2 state=latest

become: yes

               – debug: msg=”ilk deger ve ciktisi {{ntp_server_adresi}} sonrada ikinci deger ve ciktisi {{cok_guzel}}”

Yukarda cok_guzel diye bir degisken hazirladik , deger olarak cidden_guzel dedik yanliz burada Inventory de oldugu gibi esitlikle degil bir key/value cifti olarak girdik, vars key’i eger devam edilir ise bir array halinde birden fazla deger tutacak, ek olarak debug icinde farkli bir yazilim koyduk buraya, ekrana belirttigimiz mesaji donuyor.

Burada degiken illa cok_guzelcidden_guzel seklinde degil, mesela dosya yolu ve kendisi olabilir ;

vars:

dosya_1/etc/network-scripts/ifcfg-eth0 

Degiskenler istenir ise disarida bir YAML dosyasi olarak yuklenebilir ;

  • task disinda
    • – hosts: sunucu1
    •   vars_files:
    •       – dosya_adi.yml

Burada dosya_adi.yml icersinde sadece asagidaki key/value degerini tutuyor olabilir

dosya_1/etc/network-scripts/ifcfg-eth0

  • task icinde
    • include_vars: dosya_adi.yml

Istenir ise bir YAML dosyasi bir playbook’a include edilebilir , ornegin ;

– include : deneme.yml

Bu arada birde normalde programa dillerinde return ile bir fonksiyon veya class’in degerini nasil donebiliyorsaniz , buradada register ile ilgili komut ciktisini bir degiskene atayabilirsiniz, ornegin ;

-name Ben Kimim

command: whoami

register: ben_kimim_degiskeni

Bu arada calisan tum task icerindeki komutlar olumlu sonlayabilir bu durumda playbook durur , eger durmasini istemiyor iseniz ignore_errors: True degiskenini ilgili task altina koyabilirsiniz .

– hosts: sunucu1

tasks:

– name: Apache kurulumuna baslayalim

apt: name=apache2 state=latest

become: yes

ignore_error: True

       – debug: var=ntp_server_adresi

Playbook interactive’de olabilir , disardan deger alabilir ve bunu size sorabilir ;

– name: Neyi kuralim usta ?

pause: prompt=”Paket Adi ne olacak ?”

register: paket_adi

Kontrol kismina gecmeden once “facts” olayindan basedelim , daha once yaptigimiz gibi komut satirina asagidaki gibi yazip calistirin.

noroot@ansible:~/playbooks$ ansible sunucu1 -m setup

veya

noroot@ansible:~/playbooks$ ansible sunucu1 -m setup -a ‘filter=ansible_distribution’

Size bir suru degisken ve degiskenlere karsilik degerler gelecek , iste bunlari playbook’da kullanabiliriz , mesela apache kurulumu yapacagiz ve ubuntu icin farkli centos icin farkli paket adlari mevcut bu durumda iste facts’leri kullanarak bu isi yapabiliriz mesela ;

- set_fact package_name=httpd
  when: ansible_os_family == "Redhat"
- set_fact package_name=apache2
  when: ansible_os_family == "Debian"
- name: Apache Kur Redhat
  yum: name=httpd state=latest
  when: ansible_os_family == "Redhat"
- name: Apache Kur Ubuntu
  apt: name=apache2 state=latest
  when: ansible_os_family == "Debian"
Not : Ubuntu -> Debian olarak gozukuyor ciktida

Bunla beraber istenir ise command prompt’da degerler set edilebilir , ornegin

noroot@ansible:~$ ansible/ansible-playbook localhost ……. –extra-vars “”package_name=apache2”

Ansible ile islem yaparken paralel islem yapabilirsiniz bunu icin -f 10 mesela ayni anda 10 islem yapilabilir , diyelim host dosyasina bir gurup altinda 10 sunucu koydunuz , calistirdginiz playbook 10 host da birden paralel calistirilabilir, varsayili deger 5

Ornek Birkac Modul Kullanimi ;

  • command: /sbin/shutdown -r now
  • raw: yum -y install vim-common
  • script: list_number_of_directories.sh /etc
  • shell: /bin/ls -l /tmp > /tmp/list
  • file: path=/etc/httpd/conf/httpd.conf owner=root group=root mode=0644
  • copy: src=test2.conf dest=/etc/test2.conf owner=root group=root mode=0644
  • git: repo=https://github.com/github/gitignore.git dest=/opt/gitignore

Tum Modullere http://docs.ansible.com/ansible/modules_by_category.html adresinden ulasabilirsiniz , inanilmaz.

Bu arada https://galaxy.ansible.com mutlaka ziyaret edin !

Ayni zamanda http://www.ansible.com/tower managed bu servisi kullanmak isteyenler icin

Esitliklerle Ansible – Playbook

Playbook = {

  • Olayin kalbi
  • Ansible’ye ne veya neleri calistiracagini soyluyor
  • to-do list diyebiliriz
  • her task bir module dedigimiz bir code tarafindan isleniyor
  • module herhangi bir dille yazilmis olabilir
  • YAML :)
  • Birden fazla task olabilir ve bunlari ansible seri olarak calistirabilir

}

Konu gecmeden once YAML dogrulama icin http://yaml-online-parser.appspot.com bu link i kullanin

Ornek hosts 

Burada hangi kullanici ile baglanabilecegini /etc/ansible/hosts dosyasinda belirttik

noroot@ansible:~/playbooks$ cat /etc/ansible/hosts

[testsunucular]

sunucu1 ansible_user=noroot

Yukarida daha oncesindan farkli olarak [testsunucukar] gurubuna uye olan sunucu1’e noroot kullanicisi ile baglanilacagini belirttik.

ansible_user disinda tanimlarda gorebilirsiniz bu ansible 2.0 sonrasi degisikliklerden biri.

Ornek Playbook

apache_kur.yml

#Ansible YAML file “—” ile baslar

– hosts: sunucu1

# – seviye gibi dusunebilirsiniz, – isaretinden sonra mutlaka bir bosluk verinki algilansin

# – xxx dediginiz anda bir list haline donusuyor tum YAML dosyasi ve – bir dictionary yaratmaya basliyor yani key and value cift araligi (bakiniz python dict ve list)

# Asagidaki satir hemen “hosts” un “h” harfinin seviyesinde baslamali aksi taktirde parse error ile karsilasabilirsiniz

#  remote_user: noroot

#[testsunucular]

#sunucu1 ansible_user=noroot

#Normalde remote_user ile playbook’un hangi kullanici ile sisteme login olacak iken, host dosyasinda yapilacak bir degisiklikle buna gerek kalmiyor. Bakiniz ansible_user

tasks:

# Task icinde birden fazla islem yapacagiz burada yeni bir girdi ve dictinary yaratiyoruz

# Task name -> task hakkinda yardimci olabilecek aciklama

– name: Apache kurulumuna baslayalim

# apt module , mesela asagidaki komut apt-get install apache2 gibi

# Dikkat apt  direk “name” in “n” harfinin hizasindan baslamali

apt: name=apache2 state=latest

# sudo:yes artik ansible 2.0 dan sonra become olarak kullanilmali

become: yes

# Bu arada ansible-playbook apache_kur.yml –list-hosts debug gibi :))

# Uc nokta ile biter

Aslinda asagidaki komut ilgili playbook’un hangi hostlarda calisacagini gosteriyor ama ben parse/hata check icin kullandim.

noroot@ansible:~/playbooks$ ansible-playbook apache_kur.yml –list-hosts

playbook: apache_kur.yml

play #1 (sunucu1): TAGS: []

pattern: [u’sunucu1′]

hosts (1):

sunucu1

Not : pattern deki u –> unicode oldugunu gosteriyor

noroot@ansible:~/playbooks$ ansible-playbook apache_kur.yml –ask-become-pass

SUDO password:

PLAY ***************************************************************************

TASK [setup] *******************************************************************

ok: [sunucu1]

TASK [Apache kurulumuna baslayalim] ********************************************

changed: [sunucu1]

PLAY RECAP *********************************************************************

sunucu1                    : ok=2    changed=1    unreachable=0    failed=0

Not : –ask-become-pass bize sudo sifresini sormasini belirtiyor 

Double Check

noroot@ansibleclient01ubuntu:~$ ps -fe | grep apache

root      2273     1  0 16:42 ?        00:00:00 /usr/sbin/apache2 -k start

www-data  2276  2273  0 16:42 ?        00:00:00 /usr/sbin/apache2 -k start

www-data  2277  2273  0 16:42 ?        00:00:00 /usr/sbin/apache2 -k start

noroot    2401  1231  0 16:47 pts/0    00:00:00 grep –color=auto apache

Ayni komutu tekrar calistirabilirsiniz , bu durumda dikkat ettiyseniz change=0 olacak yani degistirilecek birsey yok anlaminda.

Bu arada task’larin basit tutulmasi oneriliyor , KISS principle –> Keep It Simple Stupid

Playbook debug icin -v sayisini -vv artirmakta -vvv her zaman fayda var :)

Bir playbook icersindeki tasklari listeleyebilir  

noroot@ansible:~/playbooks$ ansible-playbook apache_kur.yml –list-task

playbook: apache_kur.yml

play #1 (sunucu1): TAGS: []

tasks:

Apache kurulumuna baslayalim TAGS: []

Sonra start-at ile oradan baslatabilir

noroot@ansible:~/playbooks$ ansible-playbook apache_kur.yml –start-at=’Apache kurulumuna baslayalim’

veya –step parametresi ile (y/n) seklinde soru sordurulabiliriz

Bu arada akliniza playbook calisirken ya task’lardan birini calistirirken takilsa ?  Ne oludur ? Vallaha cevap basit orada kalirdi ama devam ettirmek isterseniz bunu bir yolu var ;

 

VM

Esitliklerle Ansible – Giris

Ansible  = orchestration engine

Ansible gelistirilmistir = python

Calisir = Windows / Mac / Unix-like

Baska toollarla beraber calisabilir mi = Ansible ile birseyler yonetip/kurarken ayni zamanda puppet ile konfigrasyon yonetimi yapabilirsiniz

Ansible = agentless / ajan yok = SSH var ise hersey tamam

Ansible = merkezi bir kurulum sunucusu yok

puppet/Chef = agent-based ama ayni zamanda Serverless Chef ve Masterless Puppet ile merkeziyetden uzakta calisabilirler.

Ansible varsayili olarak = push mode calisir / up to 500 makine diyorlar / merkezden yonetim sekli

Ansible ayni zamanda = pull mode‘da calisabilir playbook dedikleri (ki bu powershell kullaniyorsaniz oradada benzer deyim var) scriptler local’e cekilip oradan calistiriliyor

Ansible module = mesela ping

Install Ansible = GitHub source code / pip / system package manager (apt-get)

Ansible gerektirmez = database veya herhangi bir deamon calismasina gerek yok (Yoda tarzi dusuk cumle :) )

Ornek Kurulum / Command Center veya Ansible Workstation = ilk kurulum yapacagimiz makineyi bu sekilde adlandiracagiz.

Ornek Kurulum / pip ile deneyelim = {

Oncesinde” :

"sudo apt-get install build-essential autoconf libtool pkg-config python-opengl python-imaging python-pyrex python-pyside.qtopengl idle-python2.7 qt4-dev-tools qt4-designer libqtgui4 libqtcore4 libqt4-xml libqt4-test libqt4-script libqt4-network libqt4-dbus python-qt4 python-qt4-gl libgle3 python-dev"

anis “Sonrasinda” : [

“noroot@ansible:~$ sudo pip install ansible” ,

noroot@ansible:~$ sudo pip install markupsafe

” ]

Ref : http://python-packaging-user-guide.readthedocs.org/en/latest/pip_easy_install/

Belkide apt-get ile kurmak daha iyi :)

}

Kurulumu kontrol edelim = {

noroot@ansible:~$ ansible –version

ansible 2.0.0.2

config file =

configured module search path = Default w/o overrides

}

Test = Simdi ufak bir test zaman’i fakat bu islemi gerceklestiremeden once bilinmesi gereken birkac konu var ;

  1. Inventory Nerede : Oncelikle ansible ile hangi hostlari yonetiyor olacagimiz onemli , default inventory yolu /etc/ansible/hosts veya komut calistiriken -i ile belirtebilirsiniz .
    • ansible testsunucular –inventory-file=/home/noroot/a -m ping -u noroot -vvvv
    • Inventory asagidaki gibi olmali [arasina] gurup adi , altina sunucu bilgisi
      [testsunucular]
      sunucu1
    • Inventory’de alt alta FQDN , hostname veya IP adresi verebilirsiniz
    • hostname[100:200] gibi hostname100 , hostname101,hostname199 anlaminda kullanabilirsiniz
    • Gurup olayinda birde master group olayi var , bir tag acip altina diger guruplari eklediginizde is tamam;
      1.  [kapsar_gurup:childeren]
      2. testsunucular
      3. dbsuncular
  2. DNS / Hosts Dosyasi : sunucu1 dosyasi /etc/hosts dosyasinda olmali veya FQDN kullanin
  3. SSH : Master node uzerinde ssh-keygen ile dosya olusuturup ilgili yonetilecek makine yayin (direkt login olabilsin command center / ansible workstation)noroot@ansible:~$ ssh-copy-id noroot@10.111.21.231

Simdi test edelim , ping module ile ve  noroot kullanicisini kullanaraktan . Burada yaptigimiz sey su , uzaktaki makineye SSH baglan , pyhton kullanimini kontrol et ve geriye pong don!

noroot@ansible:~$ ansible testsunucular -m ping -u noroot

sunucu1 | SUCCESS => {

“changed”: false,

“ping”: “pong”

}

Uzaktan komut calistiralim = Burada onemli olan -a (argument) -m ile birsey set etmedik cunku default -m command geliyor yani aagidaki komutu soyle yazabilirdiniz –> ansible testsunucular -m command -a ‘echo gecen yaz ne yaptigini biliyorum‘{

noroot@ansible:~$ ansible testsunucular -aecho gecen yaz ne yaptigini biliyorum

sunucu1 | SUCCESS | rc=0 >>

gecen yaz ne yaptigini biliyorum

}

ansible all = guzel komut , tum makinelerde calistirmak icin — > mesela;

noroot@ansible:~$ ansible all -a ‘echo vahric’

sunucu1 | SUCCESS | rc=0 >>

vahric

Double check yapalim , sunucu1 e baglanin ve syslog ciktisini kontrol edin = {

Jan 18 11:59:45 ansibleclient01ubuntu ansible-command: Invoked with warn=True executable=None chdir=None _raw_params=echo vahric removes=None creates=None _uses_shell=False

}

Kus bakisi Ansible = {

Screen Shot 2016-01-18 at 12.04.59

}

Playbook dedigimizde aklimiza = Plays

Play dedigimizde aklimiza = tasks

Task dedgimizde aklimiza = bir isi yaptirmak icin cagirdigimiz module ve argumanlar gelmeli

Uzaktaki sunucuda = python kurulu olmali , simplejson kutuphanesi olmali

Ad-Hoc Komutlar = Ad-hoc deyimi aslinda planlanmamis ama gerektiginde , sonradan ihtiyac olmayacak komutlara denir bu case icin meselaasagidaki komut bir ad-hoc komut olarak adlandirabiliriz ama devamli yapacagimiz ve playbook yaratacagimiz bir islem icin ad-hoc tanimini kullanmayiz

noroot@ansible:~$ ansible testsunucular -a ‘reboot’ -u noroot –sudo –ask-sudo-pass

veya

noroot@ansible:~/playbooks$ ansible localhost -m setup

SUDO password:

sunucu1 | SUCCESS | rc=0 >>

Tekrardan Playbook nedir dedigimizde = bir veya birden fazla task i calistiran , hatta bunu bir sarta baglayabilen , bildigimiz linux bash scripting aksine ansible script kullanan bir nevi script dosyasi diyebiliriz.

Ansible Script = YAML dosyasi , mesela cumulusnetworks switchleri icin yazmis

{

cumulus@wbench:~$ cat sample-playbook.yml
---
- hosts: leaf1
  vars:
    description: “this is a leaf switch”
  remote_user: root
  tasks:
  - name: write the quagga config file
    template: src=quagga.j2 dest=/etc/quagga/Quagga.conf
    notify:
    - restart quagga
  - name: ensure quagga is running
    service: name=quagga state=started
  handlers:
    - name: restart quagga
      service: name=quagga state=restarted

}

Ansible PlayBook ise = Chef -> Cookbook , Puppet -> Manifest

Ansible API destekler = Python Api http://docs.ansible.com/ansible/developing_api.html

Provisioning = Ansible makine yaratmak icinde kullanilabilir

ansible.cfg = Benim kurulumumda herhangi bir inventory veya ansible.cfg dosyasi olusmadi , onun icin ekstra birsey diyemiyorum ama environment variable olarak ANSIBLE_CONFIG , bulundugunuz dizindeki ansible.cfg veya kullanici home diznindeki .ansible.cfg veya /etc/ansible/ansible.cfg ki bunu apt-get kurulumu yaratiyor olmaliyimis nuda gorecegiz.   Bu konfigrasyon dosyasi ;

  • hostfile yolu
  • kutuphane yolu
  • Ayni anda parallel islem sayisi
  • sudo kullanicisi
  • ssh default portu
  • timeout
  • log yolunu gosteriyor

Bu arada belki sonda olmasi kotu oldu ama ansible kullanicilari gordugum kadariyla kendi home dizinleri altina gerekli hosts ve ansible.cfg yaratarak devem ediyorlar

What will happen undeletable/unused vVOLs when you kick the ass of IBM Spectrum Control

Hello All

Actually all of them are my fault , sure %100

For to do a test vVOLs on IBM XIV IBM Spectrum Control installed , XIV added to it and related configurations done by it.

I dont know how but i made some mistakes about Service creation via IBM Spectrum Control and also after all test over destroyed all vCenter environment without clear something on IBM Spectrum Control and XIV but i know that i will be back (Terminator)

When i back and try to remove group pool from new installed IBM Spectrum Control, i faced an issue like below !

Screen Shot 2016-01-15 at 09.46.28

After long conversation with IBM support also find out another effect like in this link

To solve the problem the way is ;

First list the volumes from XIV (under root domain or new created domain)

vol_list managed=yes

Then delete such volumes in the error or you can delete whole vols which belong to same group pool if you will delete the group pool later

After all this i believe the instruction in link can be fallow but also another way

Login to IBM Spectrum Control , actually i restarted service of IBM Spectrum Control but i guess its no mandatory but like how Obi-Wan you should learn patience 

Then from IBM Spectrum Control remove the group pool

VM

Ceph Komutlar – 1

Kurulum sonrasi bizim icin komutlar cok onemli olacak, bu makalede ;

  • ceph version gorme
  • ceph cluster durmunu gorme
  • ceph disk pool listeleyelim
  • ceph cluster kullanimini gorme
  • ceph node uzerinde diskleri gorme
  • ceph cluster’a osd ekleme
  • ceph cluster osd listeleme
  • ceph cluster’a mon ekleme
  • ceph cluster monitor node state/quarom bilgisini gorme
  • ceph mon/osd/pg/crash/mds dump ile cluster map leri ayri ayri gorme
  • ceph recovery isleminin izleme
  • ceph osd devre disi birakma

 

ceph Version gorelim

root@cephadm:~# ceph -v

ceph version 9.2.0 (bb2ecea240f3a1d525bcb35670cb07bd1f0ca299)

Read the rest of this entry

Ceph – RBD Client’a Disk Verme

Amacimiz elimizdeki Ubuntu 14.04 Linux sunucuya Ceph uzerinden  uzerinden 20 GB’lik disk alani vermek. Block access yapacagiz yani RBD Client olacak Ubuntu.

Once Ceph Cluster’daki poollari listeleyelim 

root@cephadm:~# ceph osd lspools 

0 rbd,

Simdi hizlica 20 GB lik bir disk imaji yaratalim ve yarattigmizi gorelim

root@cephadm:~# rbd create ubuntuya-disk –size 20G

root@cephadm:~# rbd ls

ubuntuya-disk

Eger farkli bir pool kullanmak isterseniz -p ile pool adini be;irtebilirsiniz !!!

Daha ayrinti bilgi ister isek

root@cephadm:~# rbd –image ubuntuya-disk info

rbd image ‘ubuntuya-disk’:

size 20480 MB in 5120 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.12864b6bae7

format: 2

features: layering

flags:

Read the rest of this entry

Ceph – Performans (Gozu Kapali) (Referans Amacli)

Bu article tamamen referans niteligi tasiyor , hicbir bilindik benden birsery yok !

Performans

OSD -> cpu , CPU . 2 islemci iyi diyorlar

MDS kullaniyorsan yandin daha da fazal processing power (Bu arada millet ikinci cpu ekleyip compression ve dedup yapiyor ama Ceph bu konuda ilginc duruyor)

RAM olayida guzel avg OSD basina 1G , olmadi 2G iyi olur diyorlar

Networksel olarak public / internal network’u ayirin diyorlar (veri klasik :) :P )

Full SSD kullanmiyorsaniz , journal icin mutlaka SSD (eger performans ihtiyaciniz var ise)

Journal SSD icin OSD nin %10 diyenler var , her bir OSD icin 10GB ayiranlar var

Ama dedikleri su journal alani osd oldugu disk de olmasin

Birde bir SSD de 4 OSD ekleyin diyenler var , daha fazlasini koymayin diyorlar

OSD sayisini dusurmek istiyorsaniz bu arada o zaman arkada RAID kullanin derler , az OSD demek daha az deamon demek

Dokumanlari okurken insan diyor ki ah Btrfs production da olsa , ona gelinceyekadar XFS devam olmadi EXT4

RBD Client Side caching , devamli acik “rbd cache = true , rbd cache size = , rbd cache max dirty = , rbd cache max dirty age”

MAX OPEN FILE  olayina dikkat “/var/lib/ceph/osd/ceph-x/current” cunku hersey file ve directory den ibaret

Read the rest of this entry

Ceph Monitoring – CLI ve REST API

Ceph monitoring icin 3 sey kullanabiliriz ;

  1. cli
  2. api
  3. 3th party gui

 Cluster saglik durumu ;

root@cephadm:~# ceph health

HEALTH_WARN clock skew detected on mon.cephmon2; Monitor clock skew detected

Mesela yukarda komutu bize bisiylerin yolunda olmadigini gosteriyor. Ayni komutu “ceph health detail” seklinde verdiginizde daha fazla detaya sahip olacaksiniz

root@cephadm:~# ceph health detail

HEALTH_WARN clock skew detected on mon.cephmon2; Monitor clock skew detected

mon.cephmon2 addr 10.111.21.181:6789/0 clock skew 0.142183s > max 0.05s (latency 0.000532976s)

API icin ; 

Once ceph-rest-api uygulamasini calistirin , ceph-rest-api icin flask kullanilmis ve calistirdiginizda builtin WSGI devreye giriyor istekleriniz alip islemek icin -n de client name / adini belirtiyor , kullanacaginiz degeri ls -al /etc/ceph/ diyip ilgili keyring dosyasinin adindan edinebilirsiniz.

root@cephadm:~# ceph-rest-api -n client.admin

* Running on http://0.0.0.0:5000/

212.58.13.17 – – [12/Jan/2016 17:41:07] “GET /api/v0.1/health HTTP/1.1” 200 –

Tum Event’leri gormek “tail -f” ile dosyadan akarcasina

root@cephadm:~# ceph -w

Yukardaki komut Info/Warning/Error larin hepsini gercek zamanli olarak gosterir. Isterseniz cesitli parametreleri vererek ozellestirebilirsiniz , bunlar –watch-debug veya –watch-info veya –watch-sec/warn/error diyerekte izleyebilirsiniz

Read the rest of this entry

Follow

Get every new post delivered to your Inbox.

Join 117 other followers