2015-04-14 32 views
5

Tamam, bu yüzden başladım çünkü Şef'le otomatik olarak kayıt yaptırmak için otomatik ölçeklendirilmiş düğümler almaya çalışıyordum.İstemciyi newline ismiyle sil

node_name "some_prefix-#{`hostname`}" 

fikri her düğüm aynı öneki ama bir ana makine adı temelli soneki olurdu oldu: Benim client.rb dosyasında aşağıdaki vardı. Ne yazık ki, hostname sonunda bir \n ile bir dize döndürür. Şef mutlu bir şekilde bu müşteriyi yaratmama izin verir, ancak aslında hiçbir şekilde ona erişemez. Bir 404

knife client list 

yılında

knife client show some_prefix-myHostname 
knife client show "some_prefix-myHostname\n" 
knife client show "some_prefix-myHostname%0A" 

her üç sonuç istemci ve ondan sonra boş bir yeni satır göstermektedir.

Ben client.rb şablonumu düzelttim, ancak kendi adlarında yeni satır ile oluşturduğum düğümlerden kurtulamıyorum. Bıçağı kullanarak, webui kullanmayı denedim ve hatta el ile Chef :: REST kütüphanesini kullanarak denedim, ancak her şey bir 404'te sonuçlanıyor.

Herhangi bir fikrin var mı?

DÜZENLEME: Ayrıca knife client bulk delete da denedim, ancak bu da başarısız olur. REST kitaplığı, URL'yi dezenfekte eder ve isteği göndermeye çalışmadan önce yeni satırı kaldırır.

+0

Başımın üst kısmındaki fikirler: '' blade client show '' some_prefix-myHostname \ n'' (kitaplıktaki enterpolasyonu önlemek için tek tırnak). Ya da "bıçak müşteri şovu" gibi kaçış etmeye çalışıyorsun bazı_prefix-myHostname \\ n''? – Tensibai

+0

Başka bir şeyden kopar mısın? Örneğin, \ $ $ her türlü boşlukta biten herşeyle eşleşeceğine inanıyorum. İstemcileri bu boşlukta tutmak istediğin müşterin var mı? –

+2

Hayır, bunlar kurtulmak istemediğim bir kazaydı. Ancak hiçbir eşleşme yardımı olmaz. Kod listeyi alacak, bir eşleşme olup olmadığını kontrol etmek için yineleyin ve ardından her bir düğümü silmek için bir REST isteği göndermeye çalışın. Eşleşen tüm istemci tarafı olur ve gerçekten silmek için son istek başarısız olur. URI ayrıştırıcısının yeni satırı şeritleyeceğinden şüpheleniyorum. –

cevap

0

Bu, bilinen bir sunucuda bug bilinmektedir.

Chef::Exceptions::ValidationFailed: Option name's value test\n does not match regular expression /^[\-[:alnum:]_\.]+$/ 

Ama (açıklandığı gibi, elle bu dönmek chef-API kullanmak mümkün olabilir: - Ben bunu doğrulamak mümkün değildi benim şimdiki sunucu sürümü (12) bir hata tetiklendiğinde yukarıdaki hata raporunda tersi):

chef > api.get("/clients").keys 
=> ["acme-validator", "some_prefix-myHostname\n"] 
chef > api.put("/clients/some_prefix-myHostname\n", name: "some_prefix-myHostname"); nil 
=> nil 
chef > api.get("/clients").keys 
=> ["acme-validator", "some_prefix-myHostname"] 

zaten ifadeleri yeniden düzenlemek ve "some_prefix-myHostName" tarafından "foobar" yerine özgür hissettim.

ben elle müşteri silmek izin vermelisiniz API kullanarak, ayrıca tahmin:

api.delete("/clients/some_prefix-myHostname\n") 
+0

Fikir için teşekkürler. Ne yazık ki, diğer yol çalışmıyor. Geri kalan son nokta bir '/ n' içeremez, sadece json verisi olabilir. :( –

+0

Huhm .. thats sad .. :( – florianb

+0

@TejayCardon - bıraktığım tek fikir: tutmak istediğiniz tüm şeyleri bir "bıçak indirme" işlemi yapmak, bir "chef-server-ctl cleanse" yapmak Tüm verileri kaldırmak için (bu adım, daha sonra yeniden yapılandırmayı gerektirecektir - bunu şimdiye kadar kullanmıyorum), ve daha sonra "bıçak yüklemesi" ile çevrimiçi olarak geri gönderin. Barındırılan şeften topluluk sürümüne geçmek için bu adımları kullandım. – florianb

1

Sen şef Sunucu API

knife raw /nodes/<node-name> 
knife raw delete -m /nodes/<node-name> 

doğrudan istekleri göndermek sağlayan knife raw kullanmayı deneyebilirsiniz Bu benim için geçersiz bir rol adıyla benzer bir konuda çalıştı.