Ansible Kullanarak Dell iDRAC LifeCycle Controller Güncelleme

Mehmet Can Batu
Turk Telekom Bulut Teknolojileri
3 min readDec 27, 2023

--

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")

--

--