Como excluir atributos de nó persistente no Chef

Você definiu acidentalmente node.normal[:foo][:bar] = 'something bad'sua receita do chef?

Então você descobriu que os atributos normais do nó persistiam entre as execuções do chef e realmente queria usar o nível de precedência de atributo padrão no attributes/default.rbarquivo do seu livro de receitas ?

Knife exec é seu amigo:

knife exec -E "nodes.transform(:all) {|n| n.normal_attrs[:foo].delete(:bar) rescue nil }"

Exemplo:

Eu precisava excluir alguns atributos padrão, normais e de substituição para o livro de receitas sudo em todos os nós, então usei:

knife exec -E "nodes.transform(:all) {|n| n.default_attrs['authorization']['sudo'].delete('groups') rescue nil }"
knife
exec -E "nodes.transform(:all) {|n| n.normal_attrs['authorization']['sudo'].delete('groups') rescue nil }"
knife
exec -E "nodes.transform(:all) {|n| n.override_attrs['authorization']['sudo'].delete('groups') rescue nil }"

Se eu quisesse fazer isso apenas em um determinado nó, passaria uma consulta Solr para node.transform():

knife exec -E "nodes.transform('name:dfw-mynode-01') {|n| n.default_attrs['authorization']['sudo'].delete('groups') rescue nil }"

Nota: Knife exec é poderoso … com grande poder vêm grandes responsabilidades