style img div bootstrap attribute attributes persistence chef persistent-storage

attributes - img - title attribute wordpress



¿Por qué usar atributos normales(attribute.set[..]) en chef? (3)

Estoy trabajando en una implementación de chef donde a veces en el pasado se usó el atributo .set donde attribute.default lo habría hecho. Para desenredar esto, me he vuelto bastante cómodo con el paradigma de precedencia del atributo Chef. Entiendo que los atributos "Normal" (asignados usando attribute.set []) persisten entre las ejecuciones del cliente chef.

Esto me ha llevado a preguntarme ¿cuáles son las mejores y más comunes formas de usar attribute.set? ¿No entiendo el valor de tener asignaciones de atributos persistir en un nodo entre las ejecuciones del cliente chef?


Los lugares para usar node.set son cuando necesita algún estado pero no puede (fácilmente) almacenarlo en el sistema. Esto es común con las contraseñas de base de datos de autogeneración. Debe almacenarlo en algún lugar, generalmente porque otros nodos necesitan la contraseña, pero la base de datos solo la almacena en hash para que no pueda recuperarla desde allí. Usar el objeto nodo como almacenamiento con estado le da un lugar para poner los datos entre tanto.

También porque tengo que decirlo, almacenar contraseñas como esta es muy inseguro, por favor no lo haga.


Gestionar el cambio de estado

Por ejemplo, puede almacenar la función de un nodo en un atributo persistente y, si la función actual se cambia de db-slave a db-master eliminar la replicación unidireccional de db-master junto con la promoción y el anuncio de db-master actual.

Estado migratorio

Por ejemplo, su servidor Redis estaba en el nodo A y ahora está en el nodo B , puede mover sus datos del servidor A a B

Como otro ejemplo, se genera un par de claves SSH para cada servidor que al principio converge y el servidor de respaldo tiene sus huellas dactilares en authorized_keys . Su servidor de respaldo cambia. Puede mover authorized_keys al nuevo servidor y eliminarlo en el anterior.


Históricamente los atributos node.set y "normal" se introdujeron por primera vez. Simplemente eran atributos y eran cómo funcionaban los atributos.

Son útiles para las etiquetas, run_list, chef_environment y otros bits del estado ''deseado'': cosas que configura con un cuchillo en la línea de comando y esperan que el nodo recoja y consuma las recetas, pero no se configuren ellas mismas. Como los clientes de los chefs necesitan run_list para hacer cualquier cosa, este problema primero se resolvió, y los atributos normales son cómo se implementó.

A medida que el Chef evolucionó, se crearon los niveles de precedencia por omisión y anulación, que se eliminaron al comienzo de la ejecución del chef, lo que significa que las recetas pueden usarlas mucho más declarativamente. Así es como la gente generalmente quiere que los atributos en las recetas se comporten, razón por la cual se introdujo de esa manera.

El uso de ''node.set'' ahora es muy confuso, ya que parece que si desea establecer un nodo que usaría ''node.set'', en casi todos los casos para los usuarios ''node.default'' o ''node.override'' ''son preferidos. El uso de ''node.set / normal'' lleva a un comportamiento difícil de depurar cuando el código que establece atributos se elimina de los libros de cocina, pero persisten los atributos que conducen a la depuración de los tiempos de diversión hasta que se reconoce que el estado persiste en el objeto nodo.

Si bien se puede utilizar para almacenar información de contraseñas, como señala @coderanger, esto es completamente inseguro. Cada nodo en el servidor del chef puede leer la información del nodo de cada otro nodo, por lo que su contraseña se transmite esencialmente de forma global.

A menos que esté haciendo algo parecido a "etiquetar" el servidor (en cuyo caso, ¿por qué no utilizar la función node.tags que ya hemos construido sobre los atributos normales?), Entonces realmente no desea utilizar el nivel de precedencia normal. .

El sistema de atributos de Chef desafortunadamente creció orgánicamente y ahora nos queda la regla "no use node.set para establecer atributos de nodo".

Por esa razón, estamos haciendo para comenzar a desaprobar el uso de node.set a favor de node.normal para node.normal un poco la confusión ( https://github.com/chef/chef/pull/5029 )