Sangfor SCP’yi Ansible ile Yönetmek: erelbi.sangfor_scp Collection
Modern altyapı yönetiminde otomasyon artık bir tercih değil, zorunluluk. Sunucu kurma, yeniden adlandırma, disk ekleme gibi tekrarlayan…
Sangfor SCP’yi Ansible ile Yönetmek: erelbi.sangfor_scp Collection
Modern altyapı yönetiminde otomasyon artık bir tercih değil, zorunluluk. Sunucu kurma, yeniden adlandırma, disk ekleme gibi tekrarlayan işlemleri elle yapmak hem zaman kaybı hem de hata riski demek. Sangfor SCP (Sangfor Cloud Platform), özellikle HCI (Hyper-Converged Infrastructure) kullanan kurumsal ortamlarda yaygın bir sanallaştırma platformu. Ancak bu platform için hazır bir Ansible entegrasyonu yoktu — ta ki bugüne kadar.
Bu yazıda, Sangfor SCP altyapısını Ansible ile nasıl yönetebileceğinizi ve bunun için geliştirdiğimiz açık kaynaklı koleksiyonu nasıl kullanabileceğinizi anlatacağım.
Temel Zorluk: Resmi Bir Client Yoktu
Sangfor SCP’nin REST API’si var, ancak Python için resmi bir istemci kütüphanesi bulunmuyor. Bu yüzden her şey sıfırdan başladı.
İlk adım olarak sangfor-scp adlı bir Python kütüphanesi geliştirdik. Bu kütüphane:
— SCP’nin EC2 (AWS4-HMAC-SHA256) ve Token tabanlı kimlik doğrulama yöntemlerini destekliyor — Sayfalı API yanıtlarını otomatik olarak işleyerek lazy iterator döndürüyor — VM, disk, ağ, EIP, imaj, tenant gibi tüm kaynakları kapsıyor
pip install sangfor-scp
from sangfor_scp import SCPClient
client = SCPClient(
host="https://10.x.x.x",
access_key="AK...",
secret_key="SK...",
region="cn-south-1",
)
for vm in client.servers.list_all(status="running"):
print(vm["name"], vm["status"])
Gerçek Ortam Sürprizleri
API dokümantasyonuyla gerçek ortam her zaman örtüşmüyor. SCP 6.11.2 üzerinde test ederken karşılaştığımız bazı durumlar:
— GET /servers/{id} gibi tekil kaynak endpoint’leri zaman zaman 404 dönüyor. Çözüm: list_all() üzerinden client-side filtreleme. — volumes endpoint’i server_id filtresi kabul etmiyor. Çözüm: VM detayındaki disks alanı kullanıldı. — Bazı host interface endpoint’leri farklı API versiyonlarında (20180725 vs 20190725) çalışıyor.
Bu bulguların hepsi kütüphanede düzgünce ele alındı.
Ansible Koleksiyonu
Python kütüphanesi hazır olunca Ansible modülleri yazmak çok daha kolay oldu. erelbi.sangfor_scp koleksiyonu 13 modül içeriyor:
┌────────────────────────┬───────────────────────────────────────────────────────────┐
│ Modül │ Görev │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_server │ VM oluştur, güncelle, yeniden adlandır, sil, güç yönetimi │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_server_info │ VM sorgula │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_server_action │ Çoklu VM'de toplu işlem │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_volume │ Disk yönetimi (oluştur, sil, boyutlandır, ekle, çıkar) │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_volume_info │ Disk sorgula │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_vpc / scp_subnet │ Ağ yönetimi │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_eip / scp_eip_info │ Elastik IP yönetimi │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_image_info │ İmaj sorgula │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_resource_pool_info │ Resource pool bilgisi │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_tenant_info │ Tenant sorgula │
├────────────────────────┼───────────────────────────────────────────────────────────┤
│ scp_system_info │ Sistem bilgisi │
└────────────────────────┴───────────────────────────────────────────────────────────┘
Tüm modüller idempotent — yani playbook’u kaç kez çalıştırırsanız çalıştırın, sistem zaten istenilen durumdaysa changed: false döner.
Gerçek Dünya Örneği: IP’ye Göre VM Yeniden Adlandırma
Klasik bir senaryo: elinizde IP adresi var, bu IP’deki VM’i yeniden adlandırmak istiyorsunuz. Sunucu ID’sini bilmek zorunda değilsiniz.
- name: Rename SCP VM by IP address
hosts: localhost
gather_facts: false
tasks:
- name: Fetch all VMs from SCP
erelbi.sangfor_scp.scp_server_info:
scp_host: "{{ scp_host }}"
scp_access_key: "{{ scp_ak }}"
scp_secret_key: "{{ scp_sk }}"
scp_region: "{{ scp_region }}"
register: all_vms
- name: Find VM whose networks contain target_ip
ansible.builtin.set_fact:
target_vm: "{{ item }}"
loop: "{{ all_vms.servers }}"
when: target_ip in (item.networks | default([]) | to_json)
no_log: true
- name: Rename VM
erelbi.sangfor_scp.scp_server:
scp_host: "{{ scp_host }}"
scp_access_key: "{{ scp_ak }}"
scp_secret_key: "{{ scp_sk }}"
scp_region: "{{ scp_region }}"
state: present
server_id: "{{ target_vm.id }}"
name: "{{ new_name }}"
wait: true
when: target_vm.name != new_name
Çalıştırmak için tek satır yeterli:
ansible-playbook rename_server_by_ip.yml -e "target_ip=10.101.34.36 new_name=web-prod-01"
erelbi.sangfor_scp koleksiyonu ile Sangfor SCP altyapınızı artık Ansible’ın güçlü otomasyon yetenekleriyle yönetebilirsiniz. VM oluşturma, yeniden adlandırma, disk işlemleri, ağ yapılandırması — hepsi idempotent playbook’larla, elle müdahaleye gerek kalmadan.
Kurulum (2 adım):
pip install sangfor-scp
ansible-galaxy collection install erelbi.sangfor_scp
Kaynaklar:
Ansible Galaxy: ansible-galaxy collection install erelbi.sangfor_scp
[embed]Ansible Galaxy Edit descriptiongalaxy.ansible.com
Python kütüphanesi (PyPI): pip install sangfor-scp
[embed]sangfor-scp Sangfor Cloud Platform (SCP) Open-API Python Client Librarypypi.org
GitHub (koleksiyon): github.com/erelbi/sangfor-scp-collection
GitHub (Python kütüphanesi): github.com/erelbi/sangfor-scp
Sangfor SCP kullanan bir kurumda çalışıyorsanız ve altyapı otomasyonuna adım atmak istiyorsanız bu koleksiyon tam size göre. Katkı ve geri bildirimler her zaman memnuniyetle karşılanır.
메타데이터
- post_id
- 09ba1d8b6dab
- slug
- sangfor-scpyi-ansible-ile-yönetmek-erelbi-sangfor-scp-collection-09ba1d8b6dab
- url
- https://medium.com/@bilselergun/sangfor-scpyi-ansible-ile-y%C3%B6netmek-erelbi-sangfor-scp-collection-09ba1d8b6dab
- canonical_url
- https://medium.com/@bilselergun/sangfor-scpyi-ansible-ile-y%C3%B6netmek-erelbi-sangfor-scp-collection-09ba1d8b6dab
- author_url
- https://medium.com/@bilselergun
- status
- ok
- fetched_at
- 2026-07-13 22:13:33