discover

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 3, 2026 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Overview

Package discover, sanallaştırma platformundan makine keşfi.

⚠️ KAYNAK ARAYÜZ ARKASINDA ve bu ilk günden böyle. Bugün tek uygulaması Proxmox; vSphere aynı arayüzü dolduracak. Arayüzü sonradan çıkarmak, Proxmox'a özel varsayımların keşif mantığının içine dağılmasından SONRA olurdu — ve o noktada ikinci kaynağı eklemek, birinciyi yeniden yazmak demek olurdu.

⚠️ KEŞİF ERİŞİM VERMEZ, HEDEF VE ROL YARATIR. Bir makinenin postern'de hedef olması, kimsenin oraya girebildiği anlamına gelmiyor: erişim yalnızca rolden geliyor ve rolü insanlara bağlamak ayrı, bilinçli bir adım. Keşif o adımı yapmıyor.

Index

Constants

View Source
const UnknownRole = "unknown"

* UnknownRole, rol etiketi olmayan makinelerin düştüğü rol. * * ⚠️ model.UnknownGroup ile AYNI KELİME ve bu kasıtlı: operatör aynı * anlamı iki farklı adla öğrenmek zorunda kalmasın. Orada "kaynak * cevap verdi ama grup söylemedi", burada "makine var ama rolü * söylenmemiş" — ikisi de "bilmiyoruz, ama sakladık" demek.

Variables

This section is empty.

Functions

func RoleFromTags

func RoleFromTags(tags []string, key string) (role string, tagged bool)

* RoleFromTags, etiketlerden rol adını çıkarır. * * ⚠️ ANAHTAR ETİKETİN İÇİNDE, ayrı bir alan değil. Proxmox etiketleri * anahtar/değer çifti DEĞİL, düz dizeler ("prod", "role=ops"). Bu * yüzden operatörden bir "etiket anahtarı" istiyoruz ve onu etiketin * içinde arıyoruz: `role=ops` ya da `role:ops`. * * İki ayraç da kabul ediliyor çünkü ikisi de yaygın ve hangisinin * kullanıldığını keşif sırasında öğrenmek, kurulumu yeniden * etiketlemekten ucuz. * * ⚠️ ANAHTARSIZ MAKİNE HATA DEĞİL. Etiketi olmayan ya da anahtarı * taşımayan makine `unknown` rolüne düşüyor — kaynağın hiçbir grup * söylemediği kullanıcının düştüğü yerin aynısı (model.UnknownGroup). * Sebebi aynı: "bilmiyorum" ile "hiçbiri" ayrı şeyler ve bilmediğimiz * makineyi sessizce dışarıda bırakmak, onu envanterden düşürürdü.

* ⚠️ EŞLEŞME ÖN EKLE, "İLK AYIRICIDA BÖL" DEĞİL. * * Alt çizgi hem anahtarın hem değerin İÇİNDE geçebiliyor: * "role_name_os-admins" etiketi, anahtar "role_name" iken değer * "os-admins" demek. İlk ayırıcıda bölen bir uygulama burada anahtarı * "role" sanır, eşleşmez, ve makine sessizce unknown'a düşer — yani * alt çizgiyi desteklemek TEK BAŞINA yetmiyor. * * Anahtar bilindiği için doğru olan onu ön ek olarak aramak; geriye * kalan her şey değerdir ("role_web_prod" + anahtar "role" = * "web_prod").

func SortOutcomes

func SortOutcomes(out []Outcome)

SortOutcomes, raporu okunur bir sıraya koyar: önce atlananlar (asıl bakılacak olan onlar), sonra rol, sonra ad.

func ValidRoleName

func ValidRoleName(name string) error

* ValidRoleName, etiketten gelen değerin rol adı olarak kullanılabilir * olduğu. * * ⚠️ ETİKET GÜVENİLMEYEN GİRDİ. Hipervizöre makine ekleyebilen herkes * etiket yazabiliyor ve o değer burada bir ROL ADINA dönüşüyor — * yani erişim modelinin bir parçasına. Boşluk, virgül ya da yol * ayracı taşıyan bir ad, sonradan liste ayrıştıran her yerde * belirsizlik üretir.

Types

type Machine

type Machine struct {
	// Name, platformdaki adı. Hedef adı olarak kullanılıyor.
	Name string

	/*
	 * Host, SSH için kullanılacak adres.
	 *
	 * Boş olabilir: Proxmox'ta adresi öğrenmek konuk aracısına
	 * (guest agent) bağlı ve o her makinede kurulu değil. Boşken
	 * makinenin ADI adres olarak deneniyor — kurumların çoğunda
	 * makine adı zaten çözülüyor. Çözülmezse makine ATLANIYOR ve
	 * sebebi raporda yazıyor; uydurma bir adres yazmak, bir gün
	 * başka bir makineye açılan bir hedef bırakırdı.
	 */
	Host string

	// Tags, platformdaki etiketler. Rol bunlardan çıkarılıyor.
	Tags []string

	// Running, makine çalışıyor mu. Kapalı makinenin host anahtarı
	// taranamaz; rapor bunu ayrı bir sebep olarak söylüyor.
	Running bool

	// Ref, platformdaki kimliği (teşhis için: "qemu/101").
	Ref string
}

Machine, bir kaynağın bildirdiği tek bir makine.

type Outcome

type Outcome struct {
	Machine Machine
	Role    string
	// Tagged: rol etiketten mi geldi (yoksa unknown'a mı düştü).
	Tagged bool

	// Skipped doluysa makine için hiçbir şey yazılmadı ve sebebi bu.
	Skipped string

	/*
	 * KeyUnchecked doluysa makine ZATEN KAYITLIYDI ama host anahtarı bu
	 * turda doğrulanamadı (ağ). Rol bağı yine de yenilendi.
	 *
	 * ⚠️ SESSİZ GEÇMİYOR: "kontrol ettim ve aynıydı" ile "kontrol
	 * edemedim" farklı şeyler, ve ikincisini birincisi gibi göstermek
	 * değişmiş bir makineyi değişmemiş sanmaya yol açar.
	 */
	KeyUnchecked string

	// Aşağıdakiler yalnızca uygulama (apply) turunda dolar.
	CreatedRole   bool
	CreatedTarget bool
	Granted       bool
	// Existing: hedef zaten vardı ve DOKUNULMADI.
	Existing bool
}

Outcome, tek bir makine için keşfin sonucu.

type Planner

type Planner struct {
	DB *store.Store
	// TagKey, rol adını taşıyan etiket anahtarı ("role").
	TagKey string
	// Port, hedeflerin SSH portu.
	Port int
	// Actor, denetim kaydına yazılacak kim.
	Actor string
}

Planner, keşfi postern'e uygular.

func (Planner) Run

func (p Planner) Run(ctx context.Context, machines []Machine, apply bool) ([]Outcome, error)

* Run, makineleri işler. * * apply=false ise HİÇBİR yazma yapılmıyor; dönen Outcome listesi yine * de "ne olurdu"yu tam olarak anlatıyor — host anahtarı taraması dahil, * çünkü taramanın başarısız olması bir makinenin atlanmasının en sık * sebebi ve onu önizlemede göstermemek, önizlemeyi yalancı yapardı.

type Proxmox

type Proxmox struct {
	// contains filtered or unexported fields
}

Proxmox, ProxmoxConfig ile konuşan Source.

func NewProxmox

func NewProxmox(cfg ProxmoxConfig) (*Proxmox, error)

NewProxmox, yapılandırmayı doğrular ve istemciyi kurar.

func (*Proxmox) Machines

func (p *Proxmox) Machines(ctx context.Context) ([]Machine, error)

Machines, kümedeki sanal makineleri ve konteynerleri döner.

func (*Proxmox) Name

func (p *Proxmox) Name() string

Name, Source arayüzü.

type ProxmoxConfig

type ProxmoxConfig struct {
	// BaseURL, "https://pve.example:8006" biçiminde.
	BaseURL string

	/*
	 * TokenID ve TokenSecret, API jetonu ("user@pam!keşif").
	 *
	 * ⚠️ PAROLA/TICKET YOLU BİLEREK YOK. Jeton kapsamı daraltılabiliyor
	 * ve iptali tek tıklık; kullanıcı parolası ise hipervizörün tamamına
	 * açılan bir anahtar. postern'in kendi kapısında verdiği kararın
	 * aynısı: makine işi için makine kimliği.
	 */
	TokenID     string
	TokenSecret string

	// CAFile, hipervizörün sertifikasını doğrulayacak kök. Boşsa
	// sistemin kök deposu.
	CAFile string

	/*
	 * Insecure, TLS doğrulamasını KAPATIR.
	 *
	 * ⚠️ VARSAYILAN DEĞİL VE OLMAYACAK. Proxmox kurulumlarının çoğu
	 * kendi imzaladığı sertifikayla geliyor, dolayısıyla bunu tamamen
	 * yasaklamak özelliği kullanılamaz yapardı. Ama açık olduğunda
	 * araya giren biri hipervizörün cevabını — yani hangi makinenin
	 * hangi role gideceğini — yazabilir. Bu yüzden açan kişi bunu
	 * komut satırında yazmak zorunda ve denetim kaydına düşüyor.
	 * Doğru yol CAFile.
	 */
	Insecure bool

	// Node boşsa küme genelinde arıyor.
	Node string

	Timeout time.Duration
}

ProxmoxConfig, Proxmox'a bağlanmak için gerekenler.

type Source

type Source interface {
	// Name, raporda ve denetim kaydında görünen ad ("proxmox").
	Name() string
	// Machines, platformdaki makineleri döner.
	Machines(ctx context.Context) ([]Machine, error)
}

Source, makineleri sayabilen bir platform.

type VSphere

type VSphere struct {
	// contains filtered or unexported fields
}

VSphere, VSphereConfig ile konuşan Source.

func NewVSphere

func NewVSphere(cfg VSphereConfig) (*VSphere, error)

NewVSphere, yapılandırmayı doğrular ve istemciyi kurar.

func (*VSphere) Close

func (v *VSphere) Close(ctx context.Context)

Close, vCenter oturumunu kapatır.

func (*VSphere) Machines

func (v *VSphere) Machines(ctx context.Context) ([]Machine, error)

Machines, vCenter'daki sanal makineleri döner.

func (*VSphere) Name

func (v *VSphere) Name() string

Name, Source arayüzü.

type VSphereConfig

type VSphereConfig struct {
	// BaseURL, "https://vcenter.example" biçiminde.
	BaseURL string

	/*
	 * Username ve Password.
	 *
	 * ⚠️ PROXMOX'TAN FARKLI OLARAK JETON YOK ve bu bir tercih değil:
	 * vCenter'ın API jetonu diye ayrı bir kavramı yok, oturum kullanıcı
	 * kimliğiyle açılıyor. Karşılığında kullanılacak hesabın
	 * YALNIZCA OKUMA yetkisi olmalı — bu koddaki hiçbir çağrı
	 * değiştirmiyor, ama yetkiyi daraltmak koda değil operatöre bağlı.
	 */
	Username string
	Password string

	CAFile string
	// Insecure, TLS doğrulamasını kapatır. Gerekçesi ProxmoxConfig'te.
	Insecure bool

	Timeout time.Duration
}

VSphereConfig, vCenter'a bağlanmak için gerekenler.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL