SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Dani Gutiérrez Porset
dani@f4kt.com
para el Grupo SOPRA
Vitoria-Gasteiz, Dic-2013
Curso de Puppet:Curso de Puppet:
Lenguaje de configuración (2/2)Lenguaje de configuración (2/2)
Curso de Puppet – Lenguaje de configuración
2
Licencia y ReferenciasLicencia y Referencias
● Autor: Dani Gutiérrez
● Licencia: Copyright
● Imágenes referenciadas o diseñadas por el autor. Logotipos y
marcas pertenecientes a sus respectivas organizaciones
● Esta presentación se ha realizado gracias al software libre
GNU/Linux, KDE, LibreOffice, Firefox, Chromium, Inkscape,
Gimp, Gwenview, Ksnapshot
● Referencias:
● Libro "Pro Puppet" de James Turnbull y Jeffrey McCune – Ed.
2011
●
http://puppetlabs.com
Curso de Puppet – Lenguaje de configuración
3
ÍndiceÍndice
● Resumen de elementos de configuraciones
● Manifiestos y Catálogos
● Nodos
● Módulos
● Clases. Herencia. Definición y declaración
● Recursos. Recursos por defecto. Referencias a recursos.
Dependencias entre recursos. Tipos de recursos definidos.
Tipos de recursos custom. Recursos virtuales. Recolectores de
recursos. Recursos exportados
● Etiquetas
Curso de Puppet – Lenguaje de configuración
4
Resumen de ElementosResumen de Elementos
para definir configuracionespara definir configuraciones
● Elementos de lenguaje:
●
Recursos: elementos básicos de configuración
●
Clases: conjuntos de recursos relacionados
●
Nodos: especificación de la configuración de cada
nodo
● Ficheros y directorios:
●
Módulos: colecciones portables de manifests
●
Ficheros: se envían a los agentes
●
Plantillas: ficheros que se usan para generar otros
ficheros
Curso de Puppet – Lenguaje de configuración
5
ManifiestosManifiestos
● Son ficheros de código fuente con extensión .pp
● Formato:
● Es recomendable que lleven codificación UTF8
● Saltos de línea con LF o CR LF
● Pueden incluir otros ficheros de $confdir/manifests/:
import 'nombrefichero_con_o_sin_punto_pp'
import 'carpeta/*'
Curso de Puppet – Lenguaje de configuración
6
CatálogosCatálogos
● Un catálogo es uno o varios manifiestos compilados.
Manifestos y catálogos contienen recursos y relaciones
● Cada catálogo es válido para un nodo
● En los agentes se quedan cacheados
● Físicamente es un documento que no tiene una
especificación de formato concreta, pero puede estar:
● En memoria, como un objeto Ruby
● En la red en formato JSON
● En el disco duro en formato YAML
Curso de Puppet – Lenguaje de configuración
7
NodosNodos
● El tratamiento de un host o nodo se realiza asociando código
proveniente de dos orígenes:
● De la definición del nodo
● De código externo
● El elemento nodo establece un nuevo ámbito en el que se
pueden sobreescribir variables y valores por defecto del
ámbito superior
● Un nodo puede heredar de otros nodos, de forma idéntica a las
clases, pero no se recomienda
Curso de Puppet – Lenguaje de configuración
8
Nodos y fichero site.ppNodos y fichero site.pp
● Definición en fichero site.pp:
● La definición de nodos ha de estar en site.pp pero desde éste se pueden
importar, ej:
import super_nodo.pp
import nodos/*.pp
● Si site.pp contiene alguna definición de nodo, entonces todos los nodos han
de poder referenciarse desde dicho fichero. Útil para este caso: default
● Aunque el nombre de un nodo se encuentre en varias definiciones, sólo se aplica un
único caso en este orden:
● Búsqueda del nombre exacto
● Primera expresión regular encontrada
● Si es un fqdn, se va eliminando cada zona desde la derecha
● Uso de la definición default
Curso de Puppet – Lenguaje de configuración
9
Nodos: definiciónNodos: definición
● Sintaxis:
node 'identificador' {
... # declaración de clases, variables,...
}
● Se puede definir más de un nodo: node 'nodo1','nodo2',... {
● Notas sobre el identificador:
● Suele ser el fqdn, ej: nodo1.acme.com
● Se admiten además:
– Sentencias regulares, ej: node /^wwwd+$/ {...
– default: aplica a los nodos para los que no se encuentra
identificador
Curso de Puppet – Lenguaje de configuración
10
MódulosMódulos
● Agrupación independiente de recursos, clases, definiciones, ficheros
y plantillas
● Todos los manifiestos pertenecen a algún nodo a excepción del
site.pp que sería el global
● Los módulos se cargan de directorios indicados en la variable de
configuración $modulepath
● Modulos de interés en https://forge.puppetlabs.com/
● Reglas sobre el nombre:
● Comienza con minúscula y puede contener minúsculas, números y _
● El nombre puede hacer referencia a espacios de nombres con ::
Ej:
espacio1::espacio2:: ... ::clase1
Curso de Puppet – Lenguaje de configuración
11
Módulos:Módulos:
Carpetas típicasCarpetas típicas
● Carpeta de módulo tiene debajo unos subdirectorios estándar
● files
● manifests
● templates
● lib: contiene plugins (ej. Facts y tipos de recurso customizados)
● tests: ejemplos sobre cómo declarar las clases y los tipos definidos
de módulos
● spec: pruebas para los plugins de lib/
Curso de Puppet – Lenguaje de configuración
12
Espacios de nombresEspacios de nombres
● Hace referencia a los subdirectorios bajo la carpeta de
módulos en los que se encuentran las Clases y los Tipos
definidos
● Se usa :: para separar de forma análoga al /
● Aplica también a las variables definidas en clases
● Ejs:
class apache::mod::passenger {...}
define apache::vhost {...}
● En la versión 3 hay alguna incompatibilidad con versiones
anteriores. Ver
http://docs.puppetlabs.com/puppet/3/reference/lang_namespaces.html
Curso de Puppet – Lenguaje de configuración
13
Espacios de nombres:Espacios de nombres:
casoscasos
● Si el nombre no incluye :: (esto es, no hay espacio de
nombres) busca en
<modulepath>/nombre/manifests/init.pp
● Si el nombre incluye una o más veces :: de la forma
a::b::nombre (sí hay espacio de nombres) busca en
<modulepath>/a/manifests/b/nombre.pp
● Ejs:
class apache::mod::passenger {...}
buscaría en
<modulepath>/apache/manifests/mod/passenger.pp
Curso de Puppet – Lenguaje de configuración
14
ClasesClases
● Son bloques de código, agrupables en
módulos, para el tratamiento unificado de
recursos semejantes o relacionados
● Distinción:
● Definición: hace que esté disponible para un
uso posterior
● Declaración: añade los recursos una clase a
un catálogo
Curso de Puppet – Lenguaje de configuración
15
Clases: Definición (1)Clases: Definición (1)
● Sintaxis sin parámetros:
class nombreclase {
... #declaración de recursos,...
}
● Sintaxis con parámetros:
class nombreclase ($param1, $param2=valor,...,$paramN) {
... #declaración de recursos,...
}
Puede haber , antes del paréntesis de cierre
Los parámetros pueden llevar un valor por defecto (pero si falta y en
ejecución no hay valor, da error)
Curso de Puppet – Lenguaje de configuración
16
Clases: Definición (2)Clases: Definición (2)
● Reglas sobre el identificador:
● Comienza con minúscula y puede contener minúsculas,
números y _
● Puede hacer referencia a espacios de nombres con :: ej:
espacio1::espacio2:: ... ::clase1
● Lugar de definición:
● Preferentemente, en el directorio manifests/ de cada
módulo, con un fichero por cada clase
● Otras opciones: en site.pp o en manifests importados
● No recomendado: dentro de otra clase (anidamiento)
Curso de Puppet – Lenguaje de configuración
17
Clases: DeclaraciónClases: Declaración
● Formas de declaración:
● "Include-Like":
– Permite declarar una clase múltiples veces sin dar error
– No permite sobreescribir valores
● "Resource-Like":
– Una clase sólo se puede declarar una vez
– Permite sobreescribir valores
● Lugar de declaración:
● En definición de nodo
● En site.pp
● En otras clases o tipos definidos
Curso de Puppet – Lenguaje de configuración
18
Clases:Clases:
Declaraciones "Include-like"Declaraciones "Include-like"
● Principales:
● Función include: declara una o varias clases separadas por , o
en array, ej:
include base::linux, apache
● Función (no metaparámetro) require: declara una o más clases
estableciendo dependencias, pero cuidado con las relaciones
circulares
● Otras:
● contain: (v3.4): para incluir una clase en otra
● hiera_include: para el plugin de datos jerárquicos Hiera
Curso de Puppet – Lenguaje de configuración
19
Clases:Clases:
Declaraciones "Resource-like"Declaraciones "Resource-like"
● Se declaran con class, sin o con sobreescritura:
Ej:
class {'base::linux':}
class {'apache':
version => '2.2.21',
}
Curso de Puppet – Lenguaje de configuración
20
Clases: HerenciaClases: Herencia
● Se permite la herencia simple (de una sola clase), siempre
que la clase base no tenga parámetros.
● Sintaxis de definición con herencia:
class nombreclase inherits nombreclasebase {
... #declaración de recursos,...
}
● Se heredan variables y valores por defecto de recursos
● La clase derivada adquiere un nuevo ámbito: el de la
clase base
● La declaración (no definición) de una clase derivada hace
que automáticamente se declare antes la clase base
Curso de Puppet – Lenguaje de configuración
21
Clases: Herencia:Clases: Herencia:
SobreescrituraSobreescritura
● Se pueden sobrescribir (o eliminar con undef)
atributos de recursos usando referencias a los
recursos de la clase base
● Para añadir metaparámetros, la sintaxis en clases
derivadas es mediante el operador +>
ej:
class apache::ssl inherits apache {
Service['apache]{
require +> [ File['apache.pem'],
File['httpd.conf'] ],
}
}
Curso de Puppet – Lenguaje de configuración
22
RecursosRecursos
● Son el elemento básico para modelar configuraciones
● Hay unos 50 tipos predefinidos (paquete, servicio,
fichero,...) y además se pueden definir nuevos tipos
● Listados: puppet describe --list
http://docs.puppetlabs.com/references/stable/type.html
● Ayuda: puppet describe package | less
● Llevan un identificador ("title")
Curso de Puppet – Lenguaje de configuración
23
Recursos: AtributosRecursos: Atributos
● Cada recurso tiene unos atributos, según el tipo, que
describen su estado, ej. si ha de estar instalado un
paquete
● Cuando se aplica un catálogo, se compara el valor real de
cada atributo con el declarado, para hacer o no cambios.
Si se hacen, el orden es según dependencias y el más
eficiente
● Los cambios se auditan quedando registrados en el log
Curso de Puppet – Lenguaje de configuración
24
Recursos: Atributos especialesRecursos: Atributos especiales
● Name o Namevar:
● Nombre que identifica al recurso en el sistema destino (ej. el path de
un fichero)
● Es distinto del identificador para Puppet, pero a menudo coinciden. Ej:
identificador ntp y nombre ntpd en Red Hat, ntp en Debian,...
● ensure: hace referencia a aspectos dependientes del tipo y del sistema, ej.
asegurar que un servicio está en marcha. En general sus valores típicos son
present y absent
● provider: implementación del recurso en un sistema. Es sobreescribible,
ej. Instalación de librerías Ruby con apt-get o con gemas
● Metaparámetros
Curso de Puppet – Lenguaje de configuración
25
Recursos: MetaparámetrosRecursos: Metaparámetros
● Son atributos especiales que pueden usarse en
cualquier tipo de recurso (comunes al framework)
● No dan información sobre el estado sino cómo ha de
actuar Puppet con el recurso
● Referencia:
http://docs.puppetlabs.com/references/stable/metaparameter.html
● Ej:
puppet describe package -m | grep -A 20 "Meta Parameters"
Curso de Puppet – Lenguaje de configuración
26
Recursos: Metaparámetros (1)Recursos: Metaparámetros (1)
● alias: vale para establecer dependencias, ej:
file { '/etc/ssh/sshd_config':
...
alias => 'sshdcfg'
}
Uso:
subscribe => File['sshdcfg']
● audit: marca un atributo, un array de atributos o todos (all) para auditar
en el log y en informes de inspección
● loglevel: indica el nivel de log. Puede ser debug, info, notice,
warning, err, alert, emerg, crit, verbose
● noop: si está definido a true no se hace ninguna operación con el recurso
Curso de Puppet – Lenguaje de configuración
27
Recursos: Metaparámetros (2)Recursos: Metaparámetros (2)
● require: indica recursos requeridos o de los que depende el
objeto actual, de modo que los indicados se aplican antes del
actual
● before: referencia a otros objetos que dependen del actual,
el cual se aplica antes que los demás.
● notify: idem que before pero refrescando los objetos
dependientes cuando el objeto actual se modifica
● subscribe: opuesto a notify
Curso de Puppet – Lenguaje de configuración
28
Recursos: Metaparámetros (3)Recursos: Metaparámetros (3)
● schedule: indica la referencia a un objeto de tipo schedule, ej:
schedule { 'daily':
period => daily,
range => "2-4"
}
exec { "/usr/bin/apt-get update":
schedule => 'daily'
}
● stage: indica el entorno o etapa a la que corresponde una clase (no es aplicable en
recursos). Útil si se definen otras etapas aparte de la main, ej:
stage{['pre','post']}
● tag: añade etiquetas a un recurso, ej:
file {'/etc/hosts':
tag => ['importante', 'pendiente'],
Para ej. aplicar filtrando por tags:
puppet agent --test --tags pendiente
Curso de Puppet – Lenguaje de configuración
29
Recursos: DeclaraciónRecursos: Declaración
● Declaración de recurso: bloque de código que hace que se
incluya en un catálogo, para gestionar su estado en el
agente
● Son independientes de ámbito: pueden ser referenciados
desde donde sea
● Dónde se declaran y cuándo se compilan:
● Si están en una clase, cuando se declara
● Si están en un tipo de recurso definido, cuando se declara
su instancia
● Si son un recurso virtual, cuando se materializa
Curso de Puppet – Lenguaje de configuración
30
Recursos:Recursos:
Declaración: Sintaxis (1)Declaración: Sintaxis (1)
● Sintaxis para un recurso:
tipo_recurso { 'identificador':
atributo1 => valor1,
atributo2 => valor2,
...
}
● Sintaxis para varios recursos, mediante array:
tipo_recurso { ['id1','id2','id3',...]:
atributo1 => valor1,
atributo2 => valor2,
...
}
● Sintaxis para varios recursos, mediante zonas de recurso:
tipo_recurso {
'id1':
atributo1.1 => valor1.1,
...;
'id2':
atributo2.1 => valor2.1,
...;
}
Curso de Puppet – Lenguaje de configuración
31
Recursos:Recursos:
Declaración: Sintaxis (2)Declaración: Sintaxis (2)
● El identificador ha de ser único para cada tipo de recurso
● Atributos:
● Muchos tienen un valor por defecto
● Para los atributos que se declaren hay que asignarles
un valor
● Si son multivalor, éstos se asignan con un array
● Antes de } puede haber una ,
Curso de Puppet – Lenguaje de configuración
32
Recursos:Recursos:
Modificación de atributosModificación de atributos
● Mediante referencia: permite añadir atributos, o modificarlos en el
caso de clases heredadas, ej:
file {'/etc/passwd':
ensure => file,
}
File['/etc/passwd'] {
owner => 'root',
}
● Mediante recolector:
File <| tag == 'superuser' |> {
owner => 'root',
}
Curso de Puppet – Lenguaje de configuración
33
Recursos por defectoRecursos por defecto
● Especifican valores por defecto para determinados
atributos en un tipo concreto de recursos. Una
declaración de ese tipo usará los valores definidos
● En un ámbito dado se pueden sobreescribir los valores
por defecto de ámbitos superiores
● Sintaxis de definición:
Tipo_recurso {
atributo1 => valor1
...
}
Ej:
Contexto1::Contexto2::File {
group => 'all'
}
Curso de Puppet – Lenguaje de configuración
34
Referencias a recursosReferencias a recursos
● Identifican un recurso de configuración, según las sintaxis:
Tipo['id1']
Tipo['id2','id2',...,'idN']
Ejs:
File['/etc/sudoers']
Package['ldap-utils','slapd']
Espacio1::Package['sudo']
● La primera letra del nombre o nombres de espacio ha de ir en
mayúscula
● Es un tipo de datos. Internamente en Ruby el tipo es un
Puppet::Resource
Curso de Puppet – Lenguaje de configuración
35
Dependencias entre Recursos:Dependencias entre Recursos:
Metaparámetros de relaciones (1)Metaparámetros de relaciones (1)
● Válidos para relacionar recursos
● Aplicar un recurso después del aplicar el recurso destino: require
Ej: Procesar el fichero /etc/sudoers después de instalar el paquete
sudo:
file {'/etc/sudoers':
...
require => Package["sudo"],
}
● Idem que el anterior con notificación: subscribe
● Aplicar un recurso antes de aplicar el recurso destino: before
Ej: before => Exec["nagios-rebuid"]
● Idem que el anterior con notificación: notify
Curso de Puppet – Lenguaje de configuración
36
Dependencias entre Recursos:Dependencias entre Recursos:
Metaparámetros de relaciones (2)Metaparámetros de relaciones (2)
● Sintaxis:
tipo_recurso {'recurso':
...
metaparámetro => referencia_a_recurso_destino,
}
Ejemplo:
file {'/etc/sudoers':
...
require => Package["sudo"],
}
● Sintaxis en clases derivadas: operador +>
ej:
class apache::ssl inherits apache {
Service['apache]{
require +> [ File['apache.pem'],
File['httpd.conf'] ],
}
}
Curso de Puppet – Lenguaje de configuración
37
Dependencias entre Recursos:Dependencias entre Recursos:
Otros métodosOtros métodos
● Para relacionar recursos, uso de flechas:
● recurso1 => recurso2
Se aplica primero recurso1 y después recurso2
Ej: File['/etc/ntp.conf'] => Service['ntpd']
● recurso1 ~> recurso2
Se aplica primero recurso1 y después recurso2, y además se notifica a
recurso2 si recurso1 ha cambiado
● Para relacionar clases, función require:
● Ej:
class wordpress {
require apache
require mysql
...
}
Curso de Puppet – Lenguaje de configuración
38
Tipos de recursos definidosTipos de recursos definidos
● También llamados"Defined types" o "Defines"
● Bloque de código que actúa como un nuevo
tipo de recurso
● Al igual que en las clases, se distingue entre
definición y declaración. La declaración es la
instancia concreta, el recurso en sí
● Admiten metaparámetros y valores por
defecto
Curso de Puppet – Lenguaje de configuración
39
Tipos de recursos definidos:Tipos de recursos definidos:
DefiniciónDefinición
● Sintaxis sin parámetros:
define nombretipo {
... #declaración de recursos,...
}
● Sintaxis con parámetros:
define nombretipo ($param1, $param2=valor,...,$paramN) {
... #declaración de recursos,...
}
● Notas:
● Reglas para el nombre idem que para las clases
● Puede haber , antes del paréntesis de cierre
● Los parámetros pueden llevar un valor por defecto (si falta y en
ejecución no hay valor, da error)
Curso de Puppet – Lenguaje de configuración
40
Tipos de recursos definidos:Tipos de recursos definidos:
DeclaraciónDeclaración
● Idem que un recurso normal. Se definen dentro de cada módulo (un fichero por tipo
bajo el directorio manifests correspondiente) o bien en site.pp.
● Los parámetros que no tienen valores por defecto han de ser asignados con
notación de atributos (operador => y no =), ej:
tipo_recursoA {'identificadorA':
param1=>valor1,
...
}
tipo_recursoB {'identificadorB':}
● El identificador puede ser una combinación de atributos mientras sea único, ej:
file { "${vhost_dir}/${servername}.conf": ...
● Atributos extras, disponibles en la lista de parámetros de la definición
● $title: identificador de la instancia
● $name: por defecto el identificador, pero se puede especificar otro valor en la
declaración
Curso de Puppet – Lenguaje de configuración
41
Tipos de recursos CustomTipos de recursos Custom
● Semejantes a tipos definidos, pero con más
complejidad por incluir proveedores
● Relacionan:
● Tipo: parámetros, validación de entrada,
funcionalidades a proveer
● Proveedores: implementación de funcionalidades en
operaciones específicas de cada sistema
● Sintaxis: se usa newtype
● Se escriben en Ruby
Curso de Puppet – Lenguaje de configuración
42
Recursos virtualesRecursos virtuales
● Semejantes a recursos (identificador, tipo,...), establecen un
estado deseado para un recurso sin añadirlo al catálogo.
Posteriormente se puede añadir al catálogo incluyendo
("realize") el recurso virtual
● Se declaran una sola vez, y se pueden incluir múltiples veces
● Uso:
● Gestión de recursos dependiente de condiciones
● Uso de un recursos que se solapan en varias clases
● Semejantes a clases. Diferencia: Se pueden gestionar con
recolectores
Curso de Puppet – Lenguaje de configuración
43
Recursos virtuales:Recursos virtuales:
Sintaxis de declaración y usoSintaxis de declaración y uso
● Declaración:
@tipo {'identificador':
...
}
Ej:
@user { 'prueba':
uid => 1000,
tag => [desarrollo, pruebas],
}
● Inclusión mediante realize:
realize Tipo['identificador']
Ej:
realize User['desarrollo']
● Inclusión mediante un recolector:
Tipo <| condición |>
Ej:
User <|tag==desarrollo|>
Curso de Puppet – Lenguaje de configuración
44
Recolectores de recursosRecolectores de recursos
● Seleccionan recursos a partir de una búsqueda de atributos
definidos en manifests (no según el estado del recurso en el
destino).
● Utilidades:
● Listado de recursos
● Usar recursos virtuales
● Definir dependencias encadenadas
● Sintaxis: Tipo_recurso <| expresión_de_búsqueda |>
Ej:
User <| tag == 'local' |>
Curso de Puppet – Lenguaje de configuración
45
Recursos exportadosRecursos exportados
● Permiten compartir información entre nodos
● Especifica un estado deseado para un recurso,
no gestiona ese estado para el sistema
destino, y publica el recurso para ser usado en
otros nodos, los cuales pueden recoger el
recurso exportado y gestionar una copia local
● Requieren PuppetDB
Curso de Puppet – Lenguaje de configuración
46
EtiquetasEtiquetas
● Etiquetas o palabras clave a asignar a cada recurso
● Uso: obtener un conjunto de recursos con recolectores y en
expresiones de comparación:
● En aplicación de catálogos, ej:
sudo puppet agent --test --tags upgrade,holanda
● En informes, ej. de tipo "tagmail", para enviar mensajes cuando
recursos con determinadas etiquetas hayan variado
Curso de Puppet – Lenguaje de configuración
47
Etiquetas:Etiquetas:
AsignaciónAsignación
● Se asignan automáticamente etiquetas con:
● El tipo de recurso
● Para la clase o tipo definido correspondiente a la declaración del
recurso, el nombre completo y cada identificador del espacio de
nombres
Ej: si la clase es apache::ssl se crearían apache::ssl, apache,
ssl
● Para hacer una asignación manual:
● Uso del metaparámetro tag Ej: tag => ['etiq1','etiq2']
● Uso de la función tag en una definición de clase o de tipo de recurso,
para asignar la etiqueta a los recursos contenidos dentro. Ej:
class usuario {
tag 'importante', 'urgente'
recurso ...

Mais conteúdo relacionado

Mais procurados

Clean Lambdas & Streams in Java8
Clean Lambdas & Streams in Java8Clean Lambdas & Streams in Java8
Clean Lambdas & Streams in Java8Victor Rentea
 
Flutter Online Study jam 10-7-2019
Flutter Online Study jam 10-7-2019Flutter Online Study jam 10-7-2019
Flutter Online Study jam 10-7-2019Ahmed Abu Eldahab
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performanceintelliyole
 
Google flutter the easy and practical way IEEE Alazhar
Google flutter the easy and practical way IEEE AlazharGoogle flutter the easy and practical way IEEE Alazhar
Google flutter the easy and practical way IEEE AlazharAhmed Abu Eldahab
 
MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...
MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...
MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...I Putu Hariyadi
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in javakim.mens
 
Support formation vidéo: Android Kotlin : développez des applications mobiles
Support formation vidéo: Android Kotlin : développez des applications mobiles Support formation vidéo: Android Kotlin : développez des applications mobiles
Support formation vidéo: Android Kotlin : développez des applications mobiles SmartnSkilled
 
Flutter A year of creativity!
Flutter A year of creativity!Flutter A year of creativity!
Flutter A year of creativity!Ahmed Abu Eldahab
 
Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx Toma Velev
 
Unit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityUnit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityVictor Rentea
 
How to GraphQL: React Apollo
How to GraphQL: React ApolloHow to GraphQL: React Apollo
How to GraphQL: React ApolloTomasz Bak
 
Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKFabio Collini
 
Kotlin Basics & Introduction to Jetpack Compose.pptx
Kotlin Basics & Introduction to Jetpack Compose.pptxKotlin Basics & Introduction to Jetpack Compose.pptx
Kotlin Basics & Introduction to Jetpack Compose.pptxtakshilkunadia
 
Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Anshul Vinayak
 
laporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotiklaporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotikalesandro alansyah
 
Almacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudioAlmacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudioANGELLEON93
 

Mais procurados (20)

Clean Lambdas & Streams in Java8
Clean Lambdas & Streams in Java8Clean Lambdas & Streams in Java8
Clean Lambdas & Streams in Java8
 
Flutter Online Study jam 10-7-2019
Flutter Online Study jam 10-7-2019Flutter Online Study jam 10-7-2019
Flutter Online Study jam 10-7-2019
 
React & Redux
React & ReduxReact & Redux
React & Redux
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performance
 
Google flutter the easy and practical way IEEE Alazhar
Google flutter the easy and practical way IEEE AlazharGoogle flutter the easy and practical way IEEE Alazhar
Google flutter the easy and practical way IEEE Alazhar
 
MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...
MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...
MikroTik CHR sebagai server DHCP dan Internet Gateway bagi VM dan Container p...
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in java
 
Support formation vidéo: Android Kotlin : développez des applications mobiles
Support formation vidéo: Android Kotlin : développez des applications mobiles Support formation vidéo: Android Kotlin : développez des applications mobiles
Support formation vidéo: Android Kotlin : développez des applications mobiles
 
Flutter A year of creativity!
Flutter A year of creativity!Flutter A year of creativity!
Flutter A year of creativity!
 
Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx
 
Java OCA teoria 5
Java OCA teoria 5Java OCA teoria 5
Java OCA teoria 5
 
Unit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityUnit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of Purity
 
How to GraphQL: React Apollo
How to GraphQL: React ApolloHow to GraphQL: React Apollo
How to GraphQL: React Apollo
 
Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
 
Kotlin Basics & Introduction to Jetpack Compose.pptx
Kotlin Basics & Introduction to Jetpack Compose.pptxKotlin Basics & Introduction to Jetpack Compose.pptx
Kotlin Basics & Introduction to Jetpack Compose.pptx
 
flutter.school #HelloWorld
flutter.school #HelloWorldflutter.school #HelloWorld
flutter.school #HelloWorld
 
Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Code Smells and Its type (With Example)
Code Smells and Its type (With Example)
 
laporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotiklaporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotik
 
Almacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudioAlmacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudio
 

Destaque

Entornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetEntornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetVicent Soria Durá
 
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Virtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y PuppetVirtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y Puppet
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y PuppetRichard Moya
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Dev ops. Rompiendo Barreras
Dev ops. Rompiendo BarrerasDev ops. Rompiendo Barreras
Dev ops. Rompiendo BarrerasJuan Mauricio
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónKleer Agile Coaching & Training
 
Creación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCreación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCarlos Gimeno Yáñez
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantPau Ferrer Ocaña
 
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereVagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereJavier Jerónimo Suárez
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous IntegrationDaniel Cerecedo
 

Destaque (14)

Entornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetEntornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppet
 
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Virtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y PuppetVirtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y Puppet
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Dev ops. Rompiendo Barreras
Dev ops. Rompiendo BarrerasDev ops. Rompiendo Barreras
Dev ops. Rompiendo Barreras
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Vagrant
VagrantVagrant
Vagrant
 
Discovering New Apps
Discovering New AppsDiscovering New Apps
Discovering New Apps
 
Erase una vez
Erase  una vezErase  una vez
Erase una vez
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producción
 
Creación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con VagrantCreación de entornos de desarrollo con Vagrant
Creación de entornos de desarrollo con Vagrant
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con Vagrant
 
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphereVagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous Integration
 

Semelhante a Curso puppet lenguaje_2

Intro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosIntro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosPablo Sepulveda P.
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
lenguajejava.pptx
lenguajejava.pptxlenguajejava.pptx
lenguajejava.pptxMiguelAmc
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3DannyEtn
 
Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...
Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...
Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...Baltasar García Perez-Schofield
 
INFOSAN Tutorial python3 (1)
INFOSAN Tutorial python3 (1)INFOSAN Tutorial python3 (1)
INFOSAN Tutorial python3 (1)FRANCIACOCO
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
El tutorial de pythonnnn
El tutorial de pythonnnnEl tutorial de pythonnnn
El tutorial de pythonnnnYordan Ramos
 
18448198 programacion-orientada-a-objetos
18448198 programacion-orientada-a-objetos18448198 programacion-orientada-a-objetos
18448198 programacion-orientada-a-objetosDavid Henrry Rosas Cruz
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmaticaJose Gallardo
 
secme-23192.pdf
secme-23192.pdfsecme-23192.pdf
secme-23192.pdf202100941c
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosDoris Aguagallo
 
Curso javabasico
Curso javabasicoCurso javabasico
Curso javabasicosergioap40
 

Semelhante a Curso puppet lenguaje_2 (20)

Intro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosIntro Programación Orientada a Objetos
Intro Programación Orientada a Objetos
 
Lp pract2006
Lp pract2006Lp pract2006
Lp pract2006
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
lenguajejava.pptx
lenguajejava.pptxlenguajejava.pptx
lenguajejava.pptx
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3
 
Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...
Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...
Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orienta...
 
Tutorial python
Tutorial pythonTutorial python
Tutorial python
 
INFOSAN Tutorial python3 (1)
INFOSAN Tutorial python3 (1)INFOSAN Tutorial python3 (1)
INFOSAN Tutorial python3 (1)
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
El tutorial de pythonnnn
El tutorial de pythonnnnEl tutorial de pythonnnn
El tutorial de pythonnnn
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3
 
18448198 programacion-orientada-a-objetos
18448198 programacion-orientada-a-objetos18448198 programacion-orientada-a-objetos
18448198 programacion-orientada-a-objetos
 
Tutorial python3
Tutorial python3Tutorial python3
Tutorial python3
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
 
secme-23192.pdf
secme-23192.pdfsecme-23192.pdf
secme-23192.pdf
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
Curso javabasico
Curso javabasicoCurso javabasico
Curso javabasico
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Temas Drupal
Temas DrupalTemas Drupal
Temas Drupal
 

Último

Un tema católica sobre ¿Qué es la liturgia?
Un tema católica sobre ¿Qué es la liturgia?Un tema católica sobre ¿Qué es la liturgia?
Un tema católica sobre ¿Qué es la liturgia?Angel Erazo
 
Catálogo de Oriflame Costa Rica Mayo 2024
Catálogo de Oriflame Costa Rica Mayo 2024Catálogo de Oriflame Costa Rica Mayo 2024
Catálogo de Oriflame Costa Rica Mayo 2024Karol Vargas
 
Catálogo de Oriflame Costa Rica Junio 2024
Catálogo de Oriflame Costa Rica Junio 2024Catálogo de Oriflame Costa Rica Junio 2024
Catálogo de Oriflame Costa Rica Junio 2024Karol Vargas
 
Instrucciones en español para el juego de mesa coup
Instrucciones en español para el juego de mesa coupInstrucciones en español para el juego de mesa coup
Instrucciones en español para el juego de mesa coupUlisesGonzlezMartnez2
 
EL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIO
EL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIOEL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIO
EL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIOOtonVelez
 

Último (6)

Un tema católica sobre ¿Qué es la liturgia?
Un tema católica sobre ¿Qué es la liturgia?Un tema católica sobre ¿Qué es la liturgia?
Un tema católica sobre ¿Qué es la liturgia?
 
Catálogo de Oriflame Costa Rica Mayo 2024
Catálogo de Oriflame Costa Rica Mayo 2024Catálogo de Oriflame Costa Rica Mayo 2024
Catálogo de Oriflame Costa Rica Mayo 2024
 
FALUN DAFA un estilo de vida diferente.pdf
FALUN DAFA un estilo de vida diferente.pdfFALUN DAFA un estilo de vida diferente.pdf
FALUN DAFA un estilo de vida diferente.pdf
 
Catálogo de Oriflame Costa Rica Junio 2024
Catálogo de Oriflame Costa Rica Junio 2024Catálogo de Oriflame Costa Rica Junio 2024
Catálogo de Oriflame Costa Rica Junio 2024
 
Instrucciones en español para el juego de mesa coup
Instrucciones en español para el juego de mesa coupInstrucciones en español para el juego de mesa coup
Instrucciones en español para el juego de mesa coup
 
EL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIO
EL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIOEL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIO
EL JUEGO DE LA VIDA PRESENTACION DEL EVANGELIO
 

Curso puppet lenguaje_2

  • 1. Dani Gutiérrez Porset dani@f4kt.com para el Grupo SOPRA Vitoria-Gasteiz, Dic-2013 Curso de Puppet:Curso de Puppet: Lenguaje de configuración (2/2)Lenguaje de configuración (2/2)
  • 2. Curso de Puppet – Lenguaje de configuración 2 Licencia y ReferenciasLicencia y Referencias ● Autor: Dani Gutiérrez ● Licencia: Copyright ● Imágenes referenciadas o diseñadas por el autor. Logotipos y marcas pertenecientes a sus respectivas organizaciones ● Esta presentación se ha realizado gracias al software libre GNU/Linux, KDE, LibreOffice, Firefox, Chromium, Inkscape, Gimp, Gwenview, Ksnapshot ● Referencias: ● Libro "Pro Puppet" de James Turnbull y Jeffrey McCune – Ed. 2011 ● http://puppetlabs.com
  • 3. Curso de Puppet – Lenguaje de configuración 3 ÍndiceÍndice ● Resumen de elementos de configuraciones ● Manifiestos y Catálogos ● Nodos ● Módulos ● Clases. Herencia. Definición y declaración ● Recursos. Recursos por defecto. Referencias a recursos. Dependencias entre recursos. Tipos de recursos definidos. Tipos de recursos custom. Recursos virtuales. Recolectores de recursos. Recursos exportados ● Etiquetas
  • 4. Curso de Puppet – Lenguaje de configuración 4 Resumen de ElementosResumen de Elementos para definir configuracionespara definir configuraciones ● Elementos de lenguaje: ● Recursos: elementos básicos de configuración ● Clases: conjuntos de recursos relacionados ● Nodos: especificación de la configuración de cada nodo ● Ficheros y directorios: ● Módulos: colecciones portables de manifests ● Ficheros: se envían a los agentes ● Plantillas: ficheros que se usan para generar otros ficheros
  • 5. Curso de Puppet – Lenguaje de configuración 5 ManifiestosManifiestos ● Son ficheros de código fuente con extensión .pp ● Formato: ● Es recomendable que lleven codificación UTF8 ● Saltos de línea con LF o CR LF ● Pueden incluir otros ficheros de $confdir/manifests/: import 'nombrefichero_con_o_sin_punto_pp' import 'carpeta/*'
  • 6. Curso de Puppet – Lenguaje de configuración 6 CatálogosCatálogos ● Un catálogo es uno o varios manifiestos compilados. Manifestos y catálogos contienen recursos y relaciones ● Cada catálogo es válido para un nodo ● En los agentes se quedan cacheados ● Físicamente es un documento que no tiene una especificación de formato concreta, pero puede estar: ● En memoria, como un objeto Ruby ● En la red en formato JSON ● En el disco duro en formato YAML
  • 7. Curso de Puppet – Lenguaje de configuración 7 NodosNodos ● El tratamiento de un host o nodo se realiza asociando código proveniente de dos orígenes: ● De la definición del nodo ● De código externo ● El elemento nodo establece un nuevo ámbito en el que se pueden sobreescribir variables y valores por defecto del ámbito superior ● Un nodo puede heredar de otros nodos, de forma idéntica a las clases, pero no se recomienda
  • 8. Curso de Puppet – Lenguaje de configuración 8 Nodos y fichero site.ppNodos y fichero site.pp ● Definición en fichero site.pp: ● La definición de nodos ha de estar en site.pp pero desde éste se pueden importar, ej: import super_nodo.pp import nodos/*.pp ● Si site.pp contiene alguna definición de nodo, entonces todos los nodos han de poder referenciarse desde dicho fichero. Útil para este caso: default ● Aunque el nombre de un nodo se encuentre en varias definiciones, sólo se aplica un único caso en este orden: ● Búsqueda del nombre exacto ● Primera expresión regular encontrada ● Si es un fqdn, se va eliminando cada zona desde la derecha ● Uso de la definición default
  • 9. Curso de Puppet – Lenguaje de configuración 9 Nodos: definiciónNodos: definición ● Sintaxis: node 'identificador' { ... # declaración de clases, variables,... } ● Se puede definir más de un nodo: node 'nodo1','nodo2',... { ● Notas sobre el identificador: ● Suele ser el fqdn, ej: nodo1.acme.com ● Se admiten además: – Sentencias regulares, ej: node /^wwwd+$/ {... – default: aplica a los nodos para los que no se encuentra identificador
  • 10. Curso de Puppet – Lenguaje de configuración 10 MódulosMódulos ● Agrupación independiente de recursos, clases, definiciones, ficheros y plantillas ● Todos los manifiestos pertenecen a algún nodo a excepción del site.pp que sería el global ● Los módulos se cargan de directorios indicados en la variable de configuración $modulepath ● Modulos de interés en https://forge.puppetlabs.com/ ● Reglas sobre el nombre: ● Comienza con minúscula y puede contener minúsculas, números y _ ● El nombre puede hacer referencia a espacios de nombres con :: Ej: espacio1::espacio2:: ... ::clase1
  • 11. Curso de Puppet – Lenguaje de configuración 11 Módulos:Módulos: Carpetas típicasCarpetas típicas ● Carpeta de módulo tiene debajo unos subdirectorios estándar ● files ● manifests ● templates ● lib: contiene plugins (ej. Facts y tipos de recurso customizados) ● tests: ejemplos sobre cómo declarar las clases y los tipos definidos de módulos ● spec: pruebas para los plugins de lib/
  • 12. Curso de Puppet – Lenguaje de configuración 12 Espacios de nombresEspacios de nombres ● Hace referencia a los subdirectorios bajo la carpeta de módulos en los que se encuentran las Clases y los Tipos definidos ● Se usa :: para separar de forma análoga al / ● Aplica también a las variables definidas en clases ● Ejs: class apache::mod::passenger {...} define apache::vhost {...} ● En la versión 3 hay alguna incompatibilidad con versiones anteriores. Ver http://docs.puppetlabs.com/puppet/3/reference/lang_namespaces.html
  • 13. Curso de Puppet – Lenguaje de configuración 13 Espacios de nombres:Espacios de nombres: casoscasos ● Si el nombre no incluye :: (esto es, no hay espacio de nombres) busca en <modulepath>/nombre/manifests/init.pp ● Si el nombre incluye una o más veces :: de la forma a::b::nombre (sí hay espacio de nombres) busca en <modulepath>/a/manifests/b/nombre.pp ● Ejs: class apache::mod::passenger {...} buscaría en <modulepath>/apache/manifests/mod/passenger.pp
  • 14. Curso de Puppet – Lenguaje de configuración 14 ClasesClases ● Son bloques de código, agrupables en módulos, para el tratamiento unificado de recursos semejantes o relacionados ● Distinción: ● Definición: hace que esté disponible para un uso posterior ● Declaración: añade los recursos una clase a un catálogo
  • 15. Curso de Puppet – Lenguaje de configuración 15 Clases: Definición (1)Clases: Definición (1) ● Sintaxis sin parámetros: class nombreclase { ... #declaración de recursos,... } ● Sintaxis con parámetros: class nombreclase ($param1, $param2=valor,...,$paramN) { ... #declaración de recursos,... } Puede haber , antes del paréntesis de cierre Los parámetros pueden llevar un valor por defecto (pero si falta y en ejecución no hay valor, da error)
  • 16. Curso de Puppet – Lenguaje de configuración 16 Clases: Definición (2)Clases: Definición (2) ● Reglas sobre el identificador: ● Comienza con minúscula y puede contener minúsculas, números y _ ● Puede hacer referencia a espacios de nombres con :: ej: espacio1::espacio2:: ... ::clase1 ● Lugar de definición: ● Preferentemente, en el directorio manifests/ de cada módulo, con un fichero por cada clase ● Otras opciones: en site.pp o en manifests importados ● No recomendado: dentro de otra clase (anidamiento)
  • 17. Curso de Puppet – Lenguaje de configuración 17 Clases: DeclaraciónClases: Declaración ● Formas de declaración: ● "Include-Like": – Permite declarar una clase múltiples veces sin dar error – No permite sobreescribir valores ● "Resource-Like": – Una clase sólo se puede declarar una vez – Permite sobreescribir valores ● Lugar de declaración: ● En definición de nodo ● En site.pp ● En otras clases o tipos definidos
  • 18. Curso de Puppet – Lenguaje de configuración 18 Clases:Clases: Declaraciones "Include-like"Declaraciones "Include-like" ● Principales: ● Función include: declara una o varias clases separadas por , o en array, ej: include base::linux, apache ● Función (no metaparámetro) require: declara una o más clases estableciendo dependencias, pero cuidado con las relaciones circulares ● Otras: ● contain: (v3.4): para incluir una clase en otra ● hiera_include: para el plugin de datos jerárquicos Hiera
  • 19. Curso de Puppet – Lenguaje de configuración 19 Clases:Clases: Declaraciones "Resource-like"Declaraciones "Resource-like" ● Se declaran con class, sin o con sobreescritura: Ej: class {'base::linux':} class {'apache': version => '2.2.21', }
  • 20. Curso de Puppet – Lenguaje de configuración 20 Clases: HerenciaClases: Herencia ● Se permite la herencia simple (de una sola clase), siempre que la clase base no tenga parámetros. ● Sintaxis de definición con herencia: class nombreclase inherits nombreclasebase { ... #declaración de recursos,... } ● Se heredan variables y valores por defecto de recursos ● La clase derivada adquiere un nuevo ámbito: el de la clase base ● La declaración (no definición) de una clase derivada hace que automáticamente se declare antes la clase base
  • 21. Curso de Puppet – Lenguaje de configuración 21 Clases: Herencia:Clases: Herencia: SobreescrituraSobreescritura ● Se pueden sobrescribir (o eliminar con undef) atributos de recursos usando referencias a los recursos de la clase base ● Para añadir metaparámetros, la sintaxis en clases derivadas es mediante el operador +> ej: class apache::ssl inherits apache { Service['apache]{ require +> [ File['apache.pem'], File['httpd.conf'] ], } }
  • 22. Curso de Puppet – Lenguaje de configuración 22 RecursosRecursos ● Son el elemento básico para modelar configuraciones ● Hay unos 50 tipos predefinidos (paquete, servicio, fichero,...) y además se pueden definir nuevos tipos ● Listados: puppet describe --list http://docs.puppetlabs.com/references/stable/type.html ● Ayuda: puppet describe package | less ● Llevan un identificador ("title")
  • 23. Curso de Puppet – Lenguaje de configuración 23 Recursos: AtributosRecursos: Atributos ● Cada recurso tiene unos atributos, según el tipo, que describen su estado, ej. si ha de estar instalado un paquete ● Cuando se aplica un catálogo, se compara el valor real de cada atributo con el declarado, para hacer o no cambios. Si se hacen, el orden es según dependencias y el más eficiente ● Los cambios se auditan quedando registrados en el log
  • 24. Curso de Puppet – Lenguaje de configuración 24 Recursos: Atributos especialesRecursos: Atributos especiales ● Name o Namevar: ● Nombre que identifica al recurso en el sistema destino (ej. el path de un fichero) ● Es distinto del identificador para Puppet, pero a menudo coinciden. Ej: identificador ntp y nombre ntpd en Red Hat, ntp en Debian,... ● ensure: hace referencia a aspectos dependientes del tipo y del sistema, ej. asegurar que un servicio está en marcha. En general sus valores típicos son present y absent ● provider: implementación del recurso en un sistema. Es sobreescribible, ej. Instalación de librerías Ruby con apt-get o con gemas ● Metaparámetros
  • 25. Curso de Puppet – Lenguaje de configuración 25 Recursos: MetaparámetrosRecursos: Metaparámetros ● Son atributos especiales que pueden usarse en cualquier tipo de recurso (comunes al framework) ● No dan información sobre el estado sino cómo ha de actuar Puppet con el recurso ● Referencia: http://docs.puppetlabs.com/references/stable/metaparameter.html ● Ej: puppet describe package -m | grep -A 20 "Meta Parameters"
  • 26. Curso de Puppet – Lenguaje de configuración 26 Recursos: Metaparámetros (1)Recursos: Metaparámetros (1) ● alias: vale para establecer dependencias, ej: file { '/etc/ssh/sshd_config': ... alias => 'sshdcfg' } Uso: subscribe => File['sshdcfg'] ● audit: marca un atributo, un array de atributos o todos (all) para auditar en el log y en informes de inspección ● loglevel: indica el nivel de log. Puede ser debug, info, notice, warning, err, alert, emerg, crit, verbose ● noop: si está definido a true no se hace ninguna operación con el recurso
  • 27. Curso de Puppet – Lenguaje de configuración 27 Recursos: Metaparámetros (2)Recursos: Metaparámetros (2) ● require: indica recursos requeridos o de los que depende el objeto actual, de modo que los indicados se aplican antes del actual ● before: referencia a otros objetos que dependen del actual, el cual se aplica antes que los demás. ● notify: idem que before pero refrescando los objetos dependientes cuando el objeto actual se modifica ● subscribe: opuesto a notify
  • 28. Curso de Puppet – Lenguaje de configuración 28 Recursos: Metaparámetros (3)Recursos: Metaparámetros (3) ● schedule: indica la referencia a un objeto de tipo schedule, ej: schedule { 'daily': period => daily, range => "2-4" } exec { "/usr/bin/apt-get update": schedule => 'daily' } ● stage: indica el entorno o etapa a la que corresponde una clase (no es aplicable en recursos). Útil si se definen otras etapas aparte de la main, ej: stage{['pre','post']} ● tag: añade etiquetas a un recurso, ej: file {'/etc/hosts': tag => ['importante', 'pendiente'], Para ej. aplicar filtrando por tags: puppet agent --test --tags pendiente
  • 29. Curso de Puppet – Lenguaje de configuración 29 Recursos: DeclaraciónRecursos: Declaración ● Declaración de recurso: bloque de código que hace que se incluya en un catálogo, para gestionar su estado en el agente ● Son independientes de ámbito: pueden ser referenciados desde donde sea ● Dónde se declaran y cuándo se compilan: ● Si están en una clase, cuando se declara ● Si están en un tipo de recurso definido, cuando se declara su instancia ● Si son un recurso virtual, cuando se materializa
  • 30. Curso de Puppet – Lenguaje de configuración 30 Recursos:Recursos: Declaración: Sintaxis (1)Declaración: Sintaxis (1) ● Sintaxis para un recurso: tipo_recurso { 'identificador': atributo1 => valor1, atributo2 => valor2, ... } ● Sintaxis para varios recursos, mediante array: tipo_recurso { ['id1','id2','id3',...]: atributo1 => valor1, atributo2 => valor2, ... } ● Sintaxis para varios recursos, mediante zonas de recurso: tipo_recurso { 'id1': atributo1.1 => valor1.1, ...; 'id2': atributo2.1 => valor2.1, ...; }
  • 31. Curso de Puppet – Lenguaje de configuración 31 Recursos:Recursos: Declaración: Sintaxis (2)Declaración: Sintaxis (2) ● El identificador ha de ser único para cada tipo de recurso ● Atributos: ● Muchos tienen un valor por defecto ● Para los atributos que se declaren hay que asignarles un valor ● Si son multivalor, éstos se asignan con un array ● Antes de } puede haber una ,
  • 32. Curso de Puppet – Lenguaje de configuración 32 Recursos:Recursos: Modificación de atributosModificación de atributos ● Mediante referencia: permite añadir atributos, o modificarlos en el caso de clases heredadas, ej: file {'/etc/passwd': ensure => file, } File['/etc/passwd'] { owner => 'root', } ● Mediante recolector: File <| tag == 'superuser' |> { owner => 'root', }
  • 33. Curso de Puppet – Lenguaje de configuración 33 Recursos por defectoRecursos por defecto ● Especifican valores por defecto para determinados atributos en un tipo concreto de recursos. Una declaración de ese tipo usará los valores definidos ● En un ámbito dado se pueden sobreescribir los valores por defecto de ámbitos superiores ● Sintaxis de definición: Tipo_recurso { atributo1 => valor1 ... } Ej: Contexto1::Contexto2::File { group => 'all' }
  • 34. Curso de Puppet – Lenguaje de configuración 34 Referencias a recursosReferencias a recursos ● Identifican un recurso de configuración, según las sintaxis: Tipo['id1'] Tipo['id2','id2',...,'idN'] Ejs: File['/etc/sudoers'] Package['ldap-utils','slapd'] Espacio1::Package['sudo'] ● La primera letra del nombre o nombres de espacio ha de ir en mayúscula ● Es un tipo de datos. Internamente en Ruby el tipo es un Puppet::Resource
  • 35. Curso de Puppet – Lenguaje de configuración 35 Dependencias entre Recursos:Dependencias entre Recursos: Metaparámetros de relaciones (1)Metaparámetros de relaciones (1) ● Válidos para relacionar recursos ● Aplicar un recurso después del aplicar el recurso destino: require Ej: Procesar el fichero /etc/sudoers después de instalar el paquete sudo: file {'/etc/sudoers': ... require => Package["sudo"], } ● Idem que el anterior con notificación: subscribe ● Aplicar un recurso antes de aplicar el recurso destino: before Ej: before => Exec["nagios-rebuid"] ● Idem que el anterior con notificación: notify
  • 36. Curso de Puppet – Lenguaje de configuración 36 Dependencias entre Recursos:Dependencias entre Recursos: Metaparámetros de relaciones (2)Metaparámetros de relaciones (2) ● Sintaxis: tipo_recurso {'recurso': ... metaparámetro => referencia_a_recurso_destino, } Ejemplo: file {'/etc/sudoers': ... require => Package["sudo"], } ● Sintaxis en clases derivadas: operador +> ej: class apache::ssl inherits apache { Service['apache]{ require +> [ File['apache.pem'], File['httpd.conf'] ], } }
  • 37. Curso de Puppet – Lenguaje de configuración 37 Dependencias entre Recursos:Dependencias entre Recursos: Otros métodosOtros métodos ● Para relacionar recursos, uso de flechas: ● recurso1 => recurso2 Se aplica primero recurso1 y después recurso2 Ej: File['/etc/ntp.conf'] => Service['ntpd'] ● recurso1 ~> recurso2 Se aplica primero recurso1 y después recurso2, y además se notifica a recurso2 si recurso1 ha cambiado ● Para relacionar clases, función require: ● Ej: class wordpress { require apache require mysql ... }
  • 38. Curso de Puppet – Lenguaje de configuración 38 Tipos de recursos definidosTipos de recursos definidos ● También llamados"Defined types" o "Defines" ● Bloque de código que actúa como un nuevo tipo de recurso ● Al igual que en las clases, se distingue entre definición y declaración. La declaración es la instancia concreta, el recurso en sí ● Admiten metaparámetros y valores por defecto
  • 39. Curso de Puppet – Lenguaje de configuración 39 Tipos de recursos definidos:Tipos de recursos definidos: DefiniciónDefinición ● Sintaxis sin parámetros: define nombretipo { ... #declaración de recursos,... } ● Sintaxis con parámetros: define nombretipo ($param1, $param2=valor,...,$paramN) { ... #declaración de recursos,... } ● Notas: ● Reglas para el nombre idem que para las clases ● Puede haber , antes del paréntesis de cierre ● Los parámetros pueden llevar un valor por defecto (si falta y en ejecución no hay valor, da error)
  • 40. Curso de Puppet – Lenguaje de configuración 40 Tipos de recursos definidos:Tipos de recursos definidos: DeclaraciónDeclaración ● Idem que un recurso normal. Se definen dentro de cada módulo (un fichero por tipo bajo el directorio manifests correspondiente) o bien en site.pp. ● Los parámetros que no tienen valores por defecto han de ser asignados con notación de atributos (operador => y no =), ej: tipo_recursoA {'identificadorA': param1=>valor1, ... } tipo_recursoB {'identificadorB':} ● El identificador puede ser una combinación de atributos mientras sea único, ej: file { "${vhost_dir}/${servername}.conf": ... ● Atributos extras, disponibles en la lista de parámetros de la definición ● $title: identificador de la instancia ● $name: por defecto el identificador, pero se puede especificar otro valor en la declaración
  • 41. Curso de Puppet – Lenguaje de configuración 41 Tipos de recursos CustomTipos de recursos Custom ● Semejantes a tipos definidos, pero con más complejidad por incluir proveedores ● Relacionan: ● Tipo: parámetros, validación de entrada, funcionalidades a proveer ● Proveedores: implementación de funcionalidades en operaciones específicas de cada sistema ● Sintaxis: se usa newtype ● Se escriben en Ruby
  • 42. Curso de Puppet – Lenguaje de configuración 42 Recursos virtualesRecursos virtuales ● Semejantes a recursos (identificador, tipo,...), establecen un estado deseado para un recurso sin añadirlo al catálogo. Posteriormente se puede añadir al catálogo incluyendo ("realize") el recurso virtual ● Se declaran una sola vez, y se pueden incluir múltiples veces ● Uso: ● Gestión de recursos dependiente de condiciones ● Uso de un recursos que se solapan en varias clases ● Semejantes a clases. Diferencia: Se pueden gestionar con recolectores
  • 43. Curso de Puppet – Lenguaje de configuración 43 Recursos virtuales:Recursos virtuales: Sintaxis de declaración y usoSintaxis de declaración y uso ● Declaración: @tipo {'identificador': ... } Ej: @user { 'prueba': uid => 1000, tag => [desarrollo, pruebas], } ● Inclusión mediante realize: realize Tipo['identificador'] Ej: realize User['desarrollo'] ● Inclusión mediante un recolector: Tipo <| condición |> Ej: User <|tag==desarrollo|>
  • 44. Curso de Puppet – Lenguaje de configuración 44 Recolectores de recursosRecolectores de recursos ● Seleccionan recursos a partir de una búsqueda de atributos definidos en manifests (no según el estado del recurso en el destino). ● Utilidades: ● Listado de recursos ● Usar recursos virtuales ● Definir dependencias encadenadas ● Sintaxis: Tipo_recurso <| expresión_de_búsqueda |> Ej: User <| tag == 'local' |>
  • 45. Curso de Puppet – Lenguaje de configuración 45 Recursos exportadosRecursos exportados ● Permiten compartir información entre nodos ● Especifica un estado deseado para un recurso, no gestiona ese estado para el sistema destino, y publica el recurso para ser usado en otros nodos, los cuales pueden recoger el recurso exportado y gestionar una copia local ● Requieren PuppetDB
  • 46. Curso de Puppet – Lenguaje de configuración 46 EtiquetasEtiquetas ● Etiquetas o palabras clave a asignar a cada recurso ● Uso: obtener un conjunto de recursos con recolectores y en expresiones de comparación: ● En aplicación de catálogos, ej: sudo puppet agent --test --tags upgrade,holanda ● En informes, ej. de tipo "tagmail", para enviar mensajes cuando recursos con determinadas etiquetas hayan variado
  • 47. Curso de Puppet – Lenguaje de configuración 47 Etiquetas:Etiquetas: AsignaciónAsignación ● Se asignan automáticamente etiquetas con: ● El tipo de recurso ● Para la clase o tipo definido correspondiente a la declaración del recurso, el nombre completo y cada identificador del espacio de nombres Ej: si la clase es apache::ssl se crearían apache::ssl, apache, ssl ● Para hacer una asignación manual: ● Uso del metaparámetro tag Ej: tag => ['etiq1','etiq2'] ● Uso de la función tag en una definición de clase o de tipo de recurso, para asignar la etiqueta a los recursos contenidos dentro. Ej: class usuario { tag 'importante', 'urgente' recurso ...