Ansible Kullanarak Dell iDRAC LifeCycle Controller Güncelleme
Merhaba Arkadaşlar, bugünkü makalemde sizlere ansible ile dell sunucuların iDRAC Lifecycle Controller Firmware’i Linux işletim sistemi üzerinden nasıl güncellenir bunu anlatacağım.
Öncelikle playbookumuza isim vererek başlıyoruz. gather_facts’i sunucu modelini ve işletim sistemi versiyonları gibi gerekli kontrolleri yapabilmemiz için açmamız gerekiyor.
- name: idrac lifecycle controller guncelleme playbookuna hosgeldiniz
gather_facts: yes
become: yes
hosts: all
vars:
dell_idrac_9_firmware: iDRAC-with-Lifecycle-Controller_Firmware_KH4XX_LN64_7.00.00.00_A00.BIN
iDRAC 9 için 2023 aralık itibariyle en güncel versiyon iDRAC-with-Lifecycle-Controller_Firmware_KH4XX_LN64_7.00.00.00_A00.BIN olduğu için ben bunu değişken olarak tanımladım. Dell sunucunuz için güncel driverlara https://www.dell.com/support/home/en-us/products linkinden ulaşabilirsiniz.
Sonrasında bir task blok’u oluşturup altına sizler için uygun versiyonları ekleyebilirsiniz. Ben örnek olarak işletim sistemi Redhat 7 ve üstü versiyonlarda çalışmasını ve bir önceki adımda belirttiğimiz firmware Dell Poweredge 240–250–340–350-…940 versiyonlarını desteklediği için bu versiyonlara kısıtladım. Siz de kendi sunucularınızı bu şekilde bir regex formatıyla ekleyebilirsiniz.
tasks:
- name: idrac guncellemede kullanacagimiz task blokumuz
block:
##tasklarımızı bu kısma ekleyecegiz.
when:
- ansible_distribution == "RedHat"
- ansible_distribution_major_version|int > 6
- ansible_system_vendor == "Dell Inc."
- ansible_product_name | regex_search("PowerEdge R[2-9][4-5]0")
Task blokumuzun içindeki tasklara gelirsek ilk taskımızda file modülü kullanarak firmware’i kopyalayacağımız pathi oluşturuyoruz.
- name: idrac lifecycle kontrollerimizi kopyalayacagimiz pathi yaratiyoruz
file:
path: /tmp/dell-idrac
state: directory
mode: '0755'
2. taskımızda ansible host sunucumuzdan firmware’i geçeceğimiz remote sunucularımıza firmware dosyamızı ansible.builtin.copy modülü ile kopyalıyoruz. Bu adımda kopyaladığımız dosyanın çalıştırma yetkisi vererek kopyalamaya dikkat edilmesi gerek. Bu yüzden mode:’0755' parametresi kullandım.
- name: '"{{ dell_idrac_9_firmware }}" idrac lifecycle controller BIN kurulum dosyasini remote hostlara kopyaliyoruz.'
ansible.builtin.copy:
src: /tmp/dell-idrac/{{ dell_idrac_9_firmware }}
dest: /tmp/dell-idrac/{{ dell_idrac_9_firmware }}
mode: '0755'
3. taskımızda ise firmware’imizi shell modülü kullanarak -q parametresi ile çalıştırıyoruz. -q parametresi ile herhangi bir input istemeden quite mode da update’i gerçekleştirebiliyoruz. burdan aldığımız idrac_result register’ı ile de işlemin başarılı bitip bitmediğinden emin olabilirsiniz. Ansible sizlere failed_when ve changed_when koşulları sayesinde eğer başarılı bitmişse (rc=0) changed, eğer zaten sistem zaten aynı versiyonda veya daha güncelse (rc=3) OK, diğer durumlarda ise failed olarak dönüş sağlayacaktır.
- name: '"{{ dell_idrac_9_firmware }}" kurulumunu yapiyoruz'
shell: /tmp/dell-idrac/{{ dell_idrac_9_firmware }} -q
register: idrac_result
failed_when: idrac_result.rc != 3 and idrac_result.rc != 0
changed_when: idrac_result.rc == 0
Son taskımızda da firmware’imizin bulunduğu pathi siliyoruz.
- name: Delete idrac firmware directories
file:
path: /tmp/dell-idrac
state: absent
Playbookumuzun tamamlanmış hali de aşağıdaki şekilde. Kullanım öncesi firmware gereksinimlerinizi kontrol etmeyi unutmayın!
- name: idrac lifecycle controller guncelleme playbookuna hosgeldiniz
gather_facts: yes
become: yes
hosts: all
vars:
dell_idrac_9_firmware: iDRAC-with-Lifecycle-Controller_Firmware_KH4XX_LN64_7.00.00.00_A00.BIN
tasks:
- name: idrac guncellemede kullanacagimiz task blokumuz
block:
- name: idrac lifecycle kontrollerimizi kopyalayacagimiz pathi yaratiyoruz
file:
path: /tmp/dell-idrac
state: directory
mode: '0755'
- name: '"{{ dell_idrac_9_firmware }}" idrac lifecycle controller BIN kurulum dosyasini remote hostlara kopyaliyoruz.'
ansible.builtin.copy:
src: /tmp/dell-idrac/{{ dell_idrac_9_firmware }}
dest: /tmp/dell-idrac/{{ dell_idrac_9_firmware }}
mode: '0755'
- name: '"{{ dell_idrac_9_firmware }}" kurulumunu yapiyoruz'
shell: /tmp/dell-idrac/{{ dell_idrac_9_firmware }} -q
register: idrac_result
failed_when: idrac_result.rc != 3 and idrac_result.rc != 0
changed_when: idrac_result.rc == 0
- name: Delete idrac firmware directories
file:
path: /tmp/dell-idrac
state: absent
when:
- ansible_distribution == "RedHat"
- ansible_distribution_major_version|int > 6
- ansible_system_vendor == "Dell Inc."
- ansible_product_name | regex_search("PowerEdge R[2-9][4-5]0")