Puppet - RESTful API

Puppet, hem Puppet master hem de Puppet ajanları arasındaki iletişim kanalı olarak RESTful API'leri kullanır. Bu RESTful API'ye erişmek için temel URL aşağıdadır.

https://brcleprod001:8140/{environment}/{resource}/{key} 
https://brcleprod001:8139/{environment}/{resource}/{key}

REST API Güvenliği

Puppet genellikle güvenlik ve SSL sertifika yönetimiyle ilgilenir. Bununla birlikte, RESTful API'yi küme dışında kullanmak isterse, bir makineye bağlanmaya çalışırken sertifikayı kendi başına yönetmesi gerekir. Puppet için güvenlik politikası, kalan kimlik doğrulama dosyası aracılığıyla yapılandırılabilir.

REST API test ediliyor

Curl yardımcı programı, RESTful API bağlantısını geri almak için temel bir yardımcı program olarak kullanılabilir. Aşağıda, REST API curl komutunu kullanarak düğüm kataloğunu nasıl elde edebileceğimize bir örnek verilmiştir.

curl --cert /etc/puppet/ssl/certs/brcleprod001.pem --key 
   /etc/puppet/ssl/private_keys/brcleprod001.pem

Aşağıdaki komut setinde, SSL dizininin nerede olduğuna ve kullanılan düğümün adına bağlı olarak farklı olacak olan SSL sertifikasını ayarlıyoruz. Örneğin aşağıdaki komuta bakalım.

curl --insecure -H 'Accept: yaml' 
https://brcleprod002:8140/production/catalog/brcleprod001

Yukarıdaki komutta, sadece geri istediğimiz formatı veya formatları belirten bir başlık ve bir katalog oluşturmak için bir RESTful URL gönderiyoruz. brcleprod001 üretim ortamında aşağıdaki çıktıyı üretecektir.

--- &id001 !ruby/object:Puppet::Resource::Catalog 
aliases: {} 
applying: false 
classes: [] 
...

CA sertifikasını Puppet master'dan geri almak istediğimiz başka bir örnek varsayalım. Kimlik doğrulaması yapılmadan önce gerekli olduğu için kendi imzalı SSL sertifikasıyla doğrulanması gerekmez.

curl --insecure -H 'Accept: s' https://brcleprod001:8140/production/certificate/ca  

-----BEGIN CERTIFICATE----- 
MIICHTCCAYagAwIBAgIBATANBgkqhkiG9w0BAQUFADAXMRUwEwYDVQQDDAxwdXBw

Puppet Master ve Agent Paylaşılan API Referansı

GET /certificate/{ca, other}  

curl -k -H "Accept: s" https://brcelprod001:8140/production/certificate/ca 
curl -k -H "Accept: s" https://brcleprod002:8139/production/certificate/brcleprod002

Puppet Master API Referansı

Kimliği Doğrulanmış Kaynaklar (Geçerli, imzalı sertifika gereklidir).

Kataloglar

GET /{environment}/catalog/{node certificate name} 

curl -k -H "Accept: pson" https://brcelprod001:8140/production/catalog/myclient

Sertifika İptal Listesi

GET /certificate_revocation_list/ca 

curl -k -H "Accept: s" https://brcleprod001:8140/production/certificate/ca

Sertifika Talebi

GET /{environment}/certificate_requests/{anything} GET 
/{environment}/certificate_request/{node certificate name}  

curl -k -H "Accept: yaml" https://brcelprod001:8140/production/certificate_requests/all 
curl -k -H "Accept: yaml" https://brcleprod001:8140/production/certificate_request/puppetclient

Raporlar Bir Rapor Gönderin

PUT /{environment}/report/{node certificate name}  
curl -k -X PUT -H "Content-Type: text/yaml" -d "{key:value}" https://brcleprod002:8139/production

Düğüm - Belirli Bir Düğüme İlişkin Gerçekler

GET /{environment}/node/{node certificate name}  

curl -k -H "Accept: yaml" https://brcleprod002:8140/production/node/puppetclient

Durum - Test için Kullanılır

GET /{environment}/status/{anything}  

curl -k -H "Accept: pson" https://brcleprod002:8140/production/certificate_request/puppetclient

Puppet Agent API Referansı

Herhangi bir makinede yeni bir aracı kurulduğunda, Puppet aracısı varsayılan olarak HTTP isteğini dinlemez. Puppet.conf dosyasına "listen = true" eklenerek Puppet'ta etkinleştirilmesi gerekir. Bu, Puppet aracılarının, Puppet aracısı başlarken HTTP isteğini dinlemesini sağlayacaktır.

Gerçekler

GET /{environment}/facts/{anything}  

curl -k -H "Accept: yaml" https://brcelprod002:8139/production/facts/{anything}

Run - Müşterinin kukla turu veya kukla vuruşu gibi güncelleme yapmasına neden olur.

PUT  /{environment}/run/{node certificate name}  

curl -k -X PUT -H "Content-Type: text/pson" -d "{}" 
https://brcleprod002:8139/production/run/{anything}