El Recetario de Reglas
Este documento es un conjunto (algo) aleatorio de recetas en caso de que simplemente prefiera un enfoque de aprender con ejemplos.
¡Feliz cocina!
¡Hola Mundo!¶
do: - echo: "Hello World!"
Ejecutar el Hola Mundo anterior¶
La forma más fácil es usar el REPL web en su instalación de Clarive.
Simplemente apunte su navegador aquí:
https://yourclariveserver/r/repl
Escriba algo de código y presione Ctrl-Enter (Windows/Linux) o Cmd-Enter (Mac) para ejecutarlo.
Poner comentarios en su código¶
do: # ahora algo de hello-worldly - print: Hello - print: World! # aquí mi comentario también está bien
Declarar variables programáticamente¶
vars: myvar: World do: - echo: Hello ${myvar}
Iterar sobre un array¶
vars: - myarray: - 1 - 2 - 3 do: - foreach: var: mycounter in: ${myarray} do: - echo: Hello number ${mycounter}
Crear y cambiar un Topic¶
do: - mid = create_topic: category: Enhancement data: description: | Just a short description status: New title: My topic title - update_topic: mid: ${mid} data: title: 'Changed it just now' - change_status: mid: ${mid} to: Fixed
Llamar a un servicio web¶
do: - request: url: http://jsonplaceholder.typicode.com/posts method: POST returning: res - print: hello ${res.content}
Mostrar el servidor al que está desplegando en el log del job¶
Use variables en decoradores para personalizar su salida de log.
deploy: - foreach: var: host in: [ 'server1', 'server2' ] do: - ship [shipping to server ${host}]: host: ${host} from: local/path/file.txt to: /tmp/remotepath/
Enviar un solo archivo a un servidor remoto¶
do: # primero creamos un archivo local en /clarive/local/path/file.txt - write_file: file: local/path/file.txt body: hello world # ahora enviamos local/* pero quitamos el prefijo 'local/' - ship: from: local/path/file.txt to: /tmp/remotepath/ host: localhost
Enviar un directorio completo a un servidor remoto¶
do: - mkdir -p mylocaldir/subdir - touch mylocaldir/subdir/my_file # ahora enviamos local/* pero quitamos el prefijo 'local/' - ship: from: mylocaldir to: /tmp/remotepath/ host: localhost
Enviar un directorio relativo a un servidor remoto¶
do: # primero creamos un archivo local en /clarive/local/path/file.txt - write_file: file: local/path/file.txt body: hello world # ahora enviamos local/* pero quitamos el prefijo 'local/' - ship: from: local/ anchor_path: local/ to: /tmp/remotepath/ host: localhost include: - \.txt$ # solo archivos que terminan en \.txt
Importar un módulo¶
import: - .clarive/mymodule.yml
Unir un array en una cadena¶
do: - users =: - user1 - user2 - echo: | {{ users.map( function(val){ return `<li>${val}</li>` }).join('\n') }}
Usar ES6/Babel en ClaJS¶
Usar el transpilador Babel en plantillas handlebar:
do: - foo =: - user1 - user2 - echo: | {{ "use transpiler(babel)"; foo.map( ( val ) => `<li>${val}</li>` ).join('\n') }}
Y en un bloque completo de código ClaJS:
do: | "use transpiler(babel)"; class Builder { foo(x) { return `value=${x}` } } let obj = new Builder(); print( obj.foo( 123 ) );
Publicar un archivo en el log del job¶
build: - tar cvzf dist-files.tgz dist/ - log: msg: build completed file: dist-files.tgz
Comprimir un directorio¶
El parámetro base no es requerido. Por defecto
está configurado en /, lo que significa que comienza relativo a from.
do: - zip: from: /tmp/zzz/ to: /tmp/rr.zip base: /
Si desea anteponer una base diferente, simplemente agréguela a base.
do: - zip: from: /tmp/zzz/ to: /tmp/rr.zip base: myprefix/this/dir
Comprimir un directorio con una marca de tiempo diferente¶
A veces desea establecer una marca de tiempo en un zip diferente
de la que ofrece el sistema. Eso
puede lograrse con la opción time.
do: - zip: from: /tmp/zzz/ to: /tmp/rr.zip time: 2012-10-11 22:01:00
Empaquetar un directorio con ruta relativa y marca de tiempo¶
do: - tar: from: /tmp/zzz/ to: /tmp/mytar.tar base: /myprefix time: "2017-09-18 10:22:10"
Empaquetar un directorio incluyendo y excluyendo archivos¶
Las inclusiones se procesan antes que las reglas de exclusión. En lo siguiente, los archivos o
directorios que contienen la cadena file- en cualquier parte de su ruta completa se
incluyen, pero los archivos con la extensión .txt se excluyen.
La coincidencia de patrones include/exclude no tiene en cuenta el
prefijo base.
do: - tar: from: /tmp/zzz/ to: /tmp/rr.tar include: - file- exclude: - \.txt
Analizar un archivo XML en el stash¶
Para este archivo XML dado:
<xml> <somenode> hello world </somenode> </xml>
Lo analizaríamos con este código:
do: - parse_file: file: /path/to/file.xml type: xml returning: myvar - print: "Here we go: ${myvar.xml.somenode}"
Analizar un archivo XML en el stash, eliminando el nodo raíz¶
La opción KeepRoot elimina el nodo raíz.
do: - parse_file: file: /path/to/file.xml type: xml options: KeepRoot: 1 returning: myvar - print: "Here we go: ${myvar.somenode}" # note que la parte .xml ya no es necesaria
Analizar un archivo YAML en el stash¶
Dado este file.yml de entrada
aa: 10 bb: 20 foo: - 12 - 13
do: - parse_file: file: /path/to/file.yml type: yaml returning: myvar - print: "Here are the ${myvar.value[1]} reasons why" # ... 13 reasons why
Analizar un archivo INI¶
foo=100 bar=200 log_file=/long/path/file.log [temporary] tmp_dir=/tmp tmp_port=8787
Analícelo con:
do: - parse_file: file: /path/to/file.ini type: ini returning: myvar - echo: tmp_dir is ${myvar.temporary.tmp_dir}
Analizar un archivo Properties¶
Aquí hay un archivo properties directamente de Wikipedia:
# You are reading the ".properties" entry. ! The exclamation mark can also mark text as comments. # The key characters =, and : should be written with # a preceding backslash to ensure that they are properly loaded. # However, there is no need to preceede the value characters =, and : by a backslash. website = https://en.wikipedia.org/ language = English # The backslash below tells the application to continue reading # the value onto the next line. message = Welcome to \ Wikipedia! # Add spaces to the key key\ with\ spaces = This is the value that could be looked up with the key "key with spaces". # Unicode tab : \u0009 # If you want your property to include a backslash, it should be escaped by another backslash path=c:\\wiki\\templates
Analícelo con:
do: - parse_file: file: /path/to/file.properties type: properties returning: myprops - echo: tmp_dir is ${myprops.message}
Analizar un archivo JSON¶
{ "foo": [ { "bar": true } ] }
Puede analizarse con el siguiente rulebook:
do: - parse: file: /tmp/tt/file.json type: json returning: aaa - echo: "true is ${aaa.foo[0].bar}" # true is 1
Analizar desde una cadena en lugar de un archivo¶
El contenido analizado no tiene que estar almacenado necesariamente en un archivo. Podría
simplemente venir de una variable o una cadena pasada como el atributo body.
vars: - jsondata: | { "foo": [ { "bar": true } ] } - xml_content: | <xml> <foo name="beautiful" /> </xml> do: - parse: body: ${jsondata} type: json returning: json_parsed - parse: body: ${xml_content} type: xml returning: xml_parsed - echo: "XML is ${xml_parsed.xml.foo.name}"
Reemplazar una cadena en un archivo usando sed¶
Simplemente use el op sed.
do: - write_file: file: subdir/foobar.txt body: foo=$${pie} # así es como escapamos variables para que la regla no las analice - pie =: pizza - sed: path: subdir/ - foo = parse: file: subdir/foobar.txt - echo: ${foo} # aquí está pizza