Dell OpenManage Ansible Collection (dellemc.openmanage), Ansible Galaxy üzerinden dağıtılan resmi Dell koleksiyonudur. 200'ü aşkın modül içerir: iDRAC yönetimi, BIOS yapılandırması, RAID/storage, ağ, kullanıcı yönetimi, firmware güncelleme ve OpenManage Enterprise (OME) entegrasyonu bu modüller arasında yer alır. Koleksiyon hem Redfish hem de WSMAN protokollerini destekler; 14G ve üzeri için Redfish kullanımı önerilir.
Bağlantı modeli açısından Dell modülleri delegated execution (hedef Ansible host değil, iDRAC IP'si üzerinden) çalışır. Bu nedenle inventory'de iDRAC IP adresleri kullanılır ve modüller doğrudan iDRAC API'sine bağlanır. İşletim sistemi içinde Ansible agent çalıştırılmasına gerek yoktur; bu, bare-metal deployment ve OS-independent yapılandırma için büyük avantaj sağlar.
ansible-galaxy collection install dellemc.openmanage
ansible-galaxy collection install dellemc.openmanage:==9.3.0
cat > requirements.yml <<'EOF'
collections:
- name: dellemc.openmanage
version: ">=9.0.0"
- name: community.general
version: ">=8.0.0"
EOF
ansible-galaxy collection install -r requirements.yml
pip3 install omsdk requests urllib3
all:
children:
dell_poweredge:
children:
prod_cluster:
hosts:
pe-r750-01:
ansible_host: 10.10.1.10
idrac_ip: 10.10.1.10
idrac_user: root
idrac_password: "{{ vault_idrac_password }}"
pe-r750-02:
ansible_host: 10.10.1.11
idrac_ip: 10.10.1.11
idrac_user: root
idrac_password: "{{ vault_idrac_password }}"
vars:
ansible_connection: local
validate_certs: false
ansible-vault encrypt_string 'SecureP@ss2026' --name 'vault_idrac_password'
⚙️
idrac_system_info
Sistem bilgisi ve envanter
model, seri no, versiyon
🔧
idrac_bios
BIOS attribute yönetimi
staged / immediate mod
💾
idrac_storage_*
RAID yapılandırması
volume, controller, disk
🔄
idrac_firmware
Firmware güncelleme
DUP, catalog, baseline
dellemc.openmanage koleksiyonunun temel taşları idrac_system_info, idrac_redfish_info ve idrac_lifecycle_controller_status_info modülleridir. Bu modüller, herhangi bir yapılandırma değişikliği yapmadan sistem durumunu, donanım envanterini ve LC durumunu sorgular. Yeni bir sunucu eklendiğinde bu modüllerle envanter playbook'u çalıştırmak iyi bir başlangıç noktasıdır.
Tüm dellemc.openmanage modülleri idrac_ip, idrac_user ve idrac_password parametrelerini alır. TLS doğrulaması için validate_certs: true ve kurumsal CA sertifikası belirtmek production ortamı için önerilir. Test ortamlarında validate_certs: false kabul edilebilir.
---
- name: Dell PowerEdge Envanter Toplama
hosts: dell_poweredge
gather_facts: false
connection: local
tasks:
- name: Sistem bilgisini al
dellemc.openmanage.idrac_system_info:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
register: system_info
- name: Lifecycle Controller durumunu kontrol et
dellemc.openmanage.idrac_lifecycle_controller_status_info:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
register: lc_status
- name: Envanter özeti göster
debug:
msg:
- "Host: {{ inventory_hostname }}"
- "Model: {{ system_info.system_info.System[0].Model }}"
- "Seri No: {{ system_info.system_info.System[0].ServiceTag }}"
- "BIOS: {{ system_info.system_info.System[0].BIOSReleaseDate }}"
- "LC Durum: {{ lc_status.lc_status_info.LCReady }}"
- name: Envanter sonuçlarını dosyaya yaz
copy:
content: "{{ system_info | to_nice_json }}"
dest: "/tmp/inventory_{{ inventory_hostname }}.json"
delegate_to: localhost
ansible-playbook -i inventory/hosts.yml playbooks/01_inventory.yml \
--ask-vault-pass
ansible-playbook -i inventory/hosts.yml playbooks/01_inventory.yml \
--limit pe-r750-01 --ask-vault-pass -v
ansible-playbook -i inventory/hosts.yml playbooks/01_inventory.yml \
--check --diff --ask-vault-pass
idrac_bios modülü, PowerEdge sunucularda BIOS attribute'larını Ansible ile idempotent biçimde yönetir. Modül, mevcut değeri hedef değerle karşılaştırır ve yalnızca fark varsa değişiklik uygular. Bu idempotency özelliği, aynı playbook'un defalarca çalıştırılmasını güvenli kılar.
BIOS değişikliklerinin büyük çoğunluğu staged modda çalışır, yani ayar bir sonraki yeniden başlatmada devreye girer. apply_time: OnNextBoot ile değişiklik kaydedilir; ardından ayrı bir task ile sunucu yeniden başlatılabilir. Bazı değişiklikler (örn. BIOS parola) ise apply_time: Immediate gerektirir.
---
- name: Dell PowerEdge BIOS Güvenlik Sertleştirme
hosts: dell_poweredge
gather_facts: false
connection: local
vars:
bios_hardening_attributes:
SecureBoot: "Enabled"
TpmSecurity: "On"
BootMode: "Uefi"
AcPwrRcvry: "Last" # Güç kesintisinden sonra önceki durum
PxeDev1EnDis: "Disabled" # PXE boot kapat
InternalSdCard: "Off" # SD kart boot kapat
SetupPassword: "{{ vault_bios_setup_password }}"
tasks:
- name: Mevcut BIOS değerlerini kontrol et
dellemc.openmanage.idrac_bios:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
attributes: "{{ bios_hardening_attributes }}"
apply_time: OnNextBoot
register: bios_result
notify: reboot_if_changed
- name: BIOS değişiklik özeti
debug:
msg: "{{ inventory_hostname }}: {{ bios_result.msg }}"
handlers:
- name: reboot_if_changed
dellemc.openmanage.idrac_os_deployment_info:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
register: deploy_info
when: bios_result.changed
---
- name: BIOS Profil Uygulama (Rol bazlı)
hosts: dell_poweredge
gather_facts: false
connection: local
vars_files:
- "vars/bios_profiles/{{ server_role | default('generic') }}.yml"
tasks:
- name: Rol profiline göre BIOS ayarlarını uygula
dellemc.openmanage.idrac_bios:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
attributes: "{{ bios_attributes }}"
apply_time: OnNextBoot
bios_attributes:
SysProfile: "PerfOptimized" # Performans profili
ProcVirtualization: "Enabled" # Sanallaştırma açık
ProcHyperThread: "Enabled" # HyperThreading
MemOpMode: "OptimizerMode" # Bellek optimizer
NumaNodesPerSocket: "1" # NUMA topolojisi
SubNumaClustering: "Disabled" # SNC kapat (DB için)
EnergyPerformanceBias: "MaxPerf"
ℹ️
BIOS attribute adları sunucu kuşağına göre farklılık gösterebilir. Bir sunucudaki geçerli attribute listesini idrac_bios_info modülü ile alın ve playbook'larınızı bu listeye göre yazın. Örneğin 13G sunucular ile 16G sunucular arasında bazı attribute isimleri değişmiştir.
Dell OpenManage Ansible koleksiyonu, idrac_storage_volume, idrac_redfish_storage_controller ve idrac_storage_virtual_disk modülleri ile kapsamlı storage yapılandırması sunar. RAID-1 (mirror) işletim sistemi diski, RAID-5 veya RAID-6 veri diskleri ve hot spare ataması bu modüllerle tamamen programatik olarak yönetilebilir.
Storage otomasyonunda en dikkat edilmesi gereken nokta idempotency: mevcut bir RAID volume silinmeden yeni bir volume oluşturulamaz. Bu nedenle playbook'larda önce mevcut yapılandırmayı kontrol eden bir task, ardından koşullu oluşturma mantığı kullanılmalıdır. check_mode: true ile yapılandırma önce simüle edilmeli, onaydan sonra gerçek değişiklik uygulanmalıdır.
---
- name: Dell PowerEdge RAID Yapılandırma
hosts: dell_poweredge
gather_facts: false
connection: local
tasks:
- name: Mevcut storage envanterini al
dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
state: view
register: storage_view
- name: OS diski için RAID-1 oluştur (2x SSD)
dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
state: create
span_depth: 1
span_length: 2
raid_reset_config: false
volume_type: RAID 1
volumes:
- drives:
location:
- controller: "RAID.Integrated.1-1"
slot: 0
- controller: "RAID.Integrated.1-1"
slot: 1
volume_name: "OS-Mirror"
media_type: SSD
protocol: SATA
requested_name: "VirtualDisk:OS-Mirror"
when: storage_view.storage_status is defined
register: raid1_result
- name: Veri için RAID-5 oluştur (4x HDD)
dellemc.openmanage.idrac_storage_volume:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
state: create
span_depth: 1
span_length: 4
volume_type: RAID 5
volumes:
- drives:
location:
- controller: "RAID.Integrated.1-1"
slot: 2
- controller: "RAID.Integrated.1-1"
slot: 3
- controller: "RAID.Integrated.1-1"
slot: 4
- controller: "RAID.Integrated.1-1"
slot: 5
volume_name: "Data-RAID5"
media_type: HDD
protocol: SAS
---
- name: PERC Controller Sıfırlama
hosts: "{{ target_host }}"
gather_facts: false
connection: local
tasks:
- name: Onay kontrolü
assert:
that:
- confirm_reset is defined
- confirm_reset | bool
fail_msg: "Bu task veri kaybına yol açar! confirm_reset=true ile çalıştırın."
- name: Controller'ı sıfırla
dellemc.openmanage.idrac_redfish_storage_controller:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
controller_id: "RAID.Integrated.1-1"
apply_time: Immediate
attributes:
ControllerMode: "RAID"
when: confirm_reset | bool
🚨
VERİ KAYBI RİSKİ: RAID yapılandırma playbook'larını önce --check modu ile test edin. Storage reset veya volume delete işlemleri geri alınamaz. Production'da çalıştırmadan önce ekstra onay mekanizması (assert task veya approval gate) ekleyin.
idrac_firmware modülü, Dell Update Package (DUP) veya catalog tabanlı firmware güncelleme işlemlerini Ansible ile yönetir. Güncelleme kaynağı olarak HTTP/HTTPS sunucu, NFS paylaşımı veya CIFS paylaşımı kullanılabilir. Modül, Lifecycle Controller job'u oluşturur ve job tamamlanana kadar bekler (job_wait: true).
Büyük filo güncellemelerinde seri güncelleme (serial) veya paralel güncelleme (parallel) stratejisi seçilebilir. VMware ESXi host'larında güncelleme öncesi bakım moduna alınması gerektiğinden, firmware playbook'ları OMIVV veya doğrudan vCenter API çağrıları ile koordine edilmelidir. Ansible serial: 1 yönergesi ile aynı anda tek host güncelleme yapılarak risk minimize edilebilir.
---
- name: Dell PowerEdge Firmware Güncelleme
hosts: dell_poweredge
gather_facts: false
connection: local
serial: 1 # Bir seferde tek host
pre_tasks:
- name: Mevcut firmware versiyonlarını kaydet
dellemc.openmanage.idrac_firmware_info:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
register: fw_before
- name: LC hazır mı?
dellemc.openmanage.idrac_lifecycle_controller_status_info:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
register: lc_check
- name: LC hazır değilse dur
fail:
msg: "Lifecycle Controller hazır değil: {{ lc_check.lc_status_info }}"
when: not lc_check.lc_status_info.LCReady
tasks:
- name: Catalog'dan firmware güncelle
dellemc.openmanage.idrac_firmware:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
share_name: "http://10.10.0.50/dell-catalog"
catalog_file_name: "Catalog.xml"
apply_update: true
reboot: true
job_wait: true
ignore_cert_warning: true
register: fw_update_result
post_tasks:
- name: Güncelleme sonrası firmware versiyonlarını al
dellemc.openmanage.idrac_firmware_info:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
register: fw_after
- name: Güncelleme özeti
debug:
msg: "{{ inventory_hostname }}: Güncelleme tamamlandı - {{ fw_update_result.update_status }}"
---
- name: BIOS DUP Güncelleme
hosts: "{{ target_hosts | default('dell_poweredge') }}"
gather_facts: false
connection: local
vars:
dup_file: "BIOS_XXXXX_LN64_2.18.2.BIN"
dup_source: "http://10.10.0.50/dup/{{ dup_file }}"
tasks:
- name: DUP dosyasını indir ve uygula
dellemc.openmanage.idrac_firmware:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
share_name: "http://10.10.0.50/dup"
reboot: true
job_wait: true
apply_update: true
register: dup_result
tags: [firmware, bios]
iDRAC kullanıcı yönetimi, idrac_user modülü ile yapılır. Bu modül kullanıcı oluşturma, parola güncelleme, rol atama ve kullanıcı silme işlemlerini destekler. Özellikle yeni sunucu provisioning sürecinde varsayılan root parolasının değiştirilmesi ve servis hesaplarının oluşturulması kritik öneme sahiptir.
iDRAC ağ ayarları için idrac_network modülü kullanılır. DNS, NTP, SNMP ve IPMI ayarları bu modülle yönetilebilir. Tüm yeni sunuculara aynı iDRAC ağ politikasını uygulamak için bu modül, provisioning playbook'unun ilk adımı olmalıdır.
---
- name: iDRAC Güvenlik Sertleştirme
hosts: dell_poweredge
gather_facts: false
connection: local
tasks:
- name: Varsayılan root parolasını değiştir
dellemc.openmanage.idrac_user:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "root"
idrac_password: "calvin" # Varsayılan parola
validate_certs: false
state: present
user_name: root
user_password: "{{ vault_idrac_password }}"
role_name: Administrator
authentication_protocol: SHA
privacy_protocol: AES256
ignore_errors: true # Zaten değiştirilmişse hata verme
- name: OMIVV servis hesabı oluştur
dellemc.openmanage.idrac_user:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
state: present
user_name: omivv-svc
user_password: "{{ vault_omivv_password }}"
role_name: Administrator
enable: true
- name: İzleme hesabı oluştur (salt okunur)
dellemc.openmanage.idrac_user:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
state: present
user_name: monitor-svc
user_password: "{{ vault_monitor_password }}"
role_name: ReadOnly
enable: true
---
- name: iDRAC Ağ ve NTP Yapılandırması
hosts: dell_poweredge
gather_facts: false
connection: local
vars:
ntp_servers:
- 10.10.0.1
- pool.ntp.org
dns_servers:
- 10.10.0.1
- 10.10.0.2
tasks:
- name: iDRAC NTP ayarlarını yapılandır
dellemc.openmanage.idrac_network:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
setup_idrac_nic_vlan: Disabled
register_idrac_on_dns: Enabled
dns_idrac_name: "idrac-{{ inventory_hostname }}"
auto_config: Disabled
static_dns_1: "{{ dns_servers[0] }}"
static_dns_2: "{{ dns_servers[1] }}"
setup_idrac_nic: Dedicated
- name: TLS minimum versiyonunu ayarla
dellemc.openmanage.idrac_attributes:
idrac_ip: "{{ idrac_ip }}"
idrac_user: "{{ idrac_user }}"
idrac_password: "{{ idrac_password }}"
validate_certs: false
attributes:
WebServer.TLSProtocol: TLS1.2_and_higher
WebServer.HttpsPort: "443"
IPMILan.Enable: "Disabled"
Telnet.Enable: "Disabled"
SSH.Enable: "Enabled"
Kurumsal ortamlarda playbook'ları doğrudan kullanmak yerine Ansible Role yapısı tercih edilmelidir. Role'lar, değişkenlerin default değerlerini, görev listelerini, handler'ları ve şablonları ayrı dizinlerde organize eder. Bu yapı, aynı role'ün farklı ortamlarda (dev/staging/prod) farklı parametrelerle kullanılmasını kolaylaştırır.
Aşağıdaki dizin yapısı, Dell PowerEdge sunucu provisioning için önerilen role mimarisini göstermektedir. Bu yapı, yeni bir sunucu eklendiğinde tek bir playbook çağrısı ile BIOS sertleştirme, RAID yapılandırması, firmware güncelleme ve iDRAC güvenlik ayarlarının sırayla uygulanmasını sağlar.
roles/
dell_poweredge_provision/
defaults/
main.yml # Değişken varsayılanları
tasks/
main.yml # Ana görev listesi
bios.yml # BIOS görevi
storage.yml # RAID görevi
firmware.yml # Firmware güncelleme
idrac_security.yml # iDRAC güvenliği
handlers/
main.yml # Reboot handler
vars/
main.yml # Role değişkenleri
templates/
bios_profile.json.j2 # Jinja2 şablon
meta/
main.yml # Bağımlılıklar
---
idrac_validate_certs: false
idrac_port: 443
bios_profile: generic
bios_settings:
SecureBoot: "Enabled"
TpmSecurity: "On"
BootMode: "Uefi"
raid_config:
os_disk:
type: "RAID 1"
slot_start: 0
slot_count: 2
volume_name: "OS-Mirror"
data_disk:
type: "RAID 5"
slot_start: 2
slot_count: 4
volume_name: "Data-RAID5"
firmware_catalog_url: "http://10.10.0.50/dell-catalog"
firmware_apply_update: false # Güvenli default: güncelleme kapalı
---
- name: iDRAC güvenlik yapılandırması
import_tasks: idrac_security.yml
tags: [always, idrac, security]
- name: BIOS güvenlik sertleştirme
import_tasks: bios.yml
tags: [bios, security]
- name: Storage/RAID yapılandırması
import_tasks: storage.yml
tags: [storage, raid]
when: configure_storage | default(false) | bool
- name: Firmware güncelleme
import_tasks: firmware.yml
tags: [firmware]
when: firmware_apply_update | bool
---
- name: Yeni Dell PowerEdge Sunucu Provisioning
hosts: "{{ target_hosts }}"
gather_facts: false
connection: local
vars_files:
- "vars/env/{{ env | default('prod') }}.yml"
- "vars/vault.yml"
roles:
- role: dell_poweredge_provision
vars:
configure_storage: true
firmware_apply_update: true
bios_profile: "{{ server_role | default('generic') }}"
Infrastructure as Code yaklaşımının tam anlamıyla hayata geçirilmesi için Ansible playbook'larının Git ile sürüm kontrolüne alınması ve CI/CD pipeline'ı ile otomatik doğrulama sürecine dahil edilmesi gerekir. GitLab CI/CD veya GitHub Actions üzerinde lint → test → staging deploy → prod approval → prod deploy akışı kurulabilir.
ansible-lint ile kod kalitesi kontrolü, molecule ile role testleri ve mock iDRAC ortamı üzerinde entegrasyon testleri CI pipeline'ına eklenmelidir. Prod ortamına geçiş için manuel onay kapısı (approval gate) zorunludur. Bu sayede altyapı değişiklikleri kod review sürecinden geçerek uygulanır ve değişiklik kaydı Git history'de tutulur.
stages:
- validate
- test
- staging
- production
variables:
ANSIBLE_FORCE_COLOR: "1"
ANSIBLE_STDOUT_CALLBACK: "yaml"
lint:
stage: validate
image: cytopia/ansible:2.15
script:
- pip install ansible-lint
- ansible-lint playbooks/ roles/
- ansible-playbook --syntax-check -i inventory/staging/hosts.yml
playbooks/provision_new_server.yml
only: [merge_requests, main]
molecule-test:
stage: test
image: cytopia/ansible:2.15
script:
- pip install molecule molecule-plugins[docker]
- cd roles/dell_poweredge_provision
- molecule test
only: [merge_requests]
staging-deploy:
stage: staging
image: cytopia/ansible:2.15
script:
- ansible-playbook
-i inventory/staging/hosts.yml
--vault-password-file .vault_pass
--check --diff
playbooks/provision_new_server.yml
environment: staging
only: [main]
production-deploy:
stage: production
image: cytopia/ansible:2.15
script:
- ansible-playbook
-i inventory/prod/hosts.yml
--vault-password-file .vault_pass
playbooks/provision_new_server.yml
environment: production
when: manual # Manuel onay gerekli
only: [main]
curl -s -u admin:TowerPass123 \
-X POST \
-H "Content-Type: application/json" \
-d '{
"name": "Dell PowerEdge - BIOS Hardening",
"description": "Tüm PowerEdge sunucularda BIOS güvenlik sertleştirme",
"job_type": "run",
"inventory": 3,
"project": 5,
"playbook": "playbooks/02_bios_harden.yml",
"ask_limit_on_launch": true,
"ask_variables_on_launch": false,
"extra_vars": "{\"env\": \"prod\"}",
"survey_enabled": false
}' \
"https://tower.example.com/api/v2/job_templates/" | python3 -m json.tool
- ✓ dellemc.openmanage koleksiyonu kuruldu, bağlantı testi başarılı
- ✓ Ansible Vault ile iDRAC parolaları şifrelendi
- ✓ BIOS sertleştirme playbook'u check modda test edildi
- ✓ RAID yapılandırma playbook'u staging'de doğrulandı
- ✓ Firmware güncelleme kataloğu erişilebilir
- ✓ Role yapısı oluşturuldu ve varsayılanlar tanımlandı
- ✓ CI/CD pipeline'ı lint ve test adımları içeriyor
- ✓ Prod deploy için manuel onay kapısı etkin
✅
IaC Olgunluk Hedefi: Bir PowerEdge sunucunun rack'ten çıkıp production'a alınması süreci, tek bir Ansible playbook çağrısı ile 30-45 dakikada tamamlanabilir hale getirilmelidir. Bu hedefe ulaşmak için BIOS, RAID, firmware ve iDRAC güvenlik adımlarının tek bir koordineli role altında toplanması gerekir.