← Back to list

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…

ergün elvan bilsel · 2026-03-22 12:42 · 2 claps · 2.5 min read
#ansible #ansible-playbook #sangfor #hci #python
Open on Medium ↗
Wiki topics: ☁️ · DevOps & Cloud

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

[embed]GitHub - erelbi/sangfor-scp-collection Contribute to erelbi/sangfor-scp-collection development by creating an account on GitHub.github.com

GitHub (Python kütüphanesi): github.com/erelbi/sangfor-scp

[embed]GitHub - erelbi/sangfor-scp-collection Contribute to erelbi/sangfor-scp-collection development by creating an account on GitHub.github.com

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