Definir Ops Personalizados
Puede definir y organizar su código en ops personalizados. Los ops personalizados pueden combinarse y reutilizarse en su código para evitar repetir tareas continuamente.
Por ejemplo:
def: tarball: - cd /clarive/myproject/myrepo - chmod -r +x * - rm -rf .git - tar cvzf ../myrepo.tgz * build: - tarball: - ship: host: remoteserver from: /clarive/myproject/myrepo.tgz to: /remotedir/
Declarar argumentos¶
Las definiciones de ops pueden tener firmas declarando argumentos requeridos.
def: my_op (name): - echo: hello ${name} do: - my_op: name: hannah
El paréntesis anterior declara name como un argumento requerido.
El mismo op anterior podría haberse declarado de forma más detallada así:
def: my_op: required: - name do: - echo: hello ${name} do: - my_op: name: hannah
No llamar al op con el argumento name resultará
en un error:
def: my_op (name): - echo: hello ${name} do: # esto dará error: Missing required arg `name` for `def: my_op (name)` - my_op: another_param: whatever
Si el op no tiene argumentos requeridos, recuerde usar dos puntos para indicar al analizador que tiene la intención de llamar un op en lugar de ejecutar un simple comando shell:
def: ls_tmp: - ls -lart /tmp do: - ls_tmp: - echo: "the above is perfectly fine"
Si desea enviar solo un valor de cadena único como argumento al op definido, debe establecer exactamente un argumento en el op que está definiendo, así:
def: ls_tmp (dir): - ls -lart ${dir} do: - ls_tmp: /tmp
Puede hacer lo mismo con arrays:
def: npm_install (packages): - foreach: var: pkg in: ${packages} do: - npm install ${pkg} do: - npm_install: - lodash - react
Devolver valores¶
También puede devolver valores desde sus ops definidos
usando el op return.
def: my_op (name): - return: message: hello ${name} do: - ret = my_op: name: hannah - echo: my op said ${ret.message}
Los valores de retorno no necesitan ser declarados previamente. Pero si lo son, el ejecutor del rulebook espera que se devuelvan los valores de retorno prometidos, de lo contrario se lanzará un error.
Aunque no son obligatorios, recomendamos usar declaraciones de valores de retorno para hacer su código más legible.
Variables Constantes¶
Los defs no pueden leer variables globales. La idea
es que sus ops def estén aislados del entorno
circundante, siguiendo un estilo de programación más funcional:
vars: global_path: 'my/path/' def: ## error: esto no funcionará, ${global_path} no está disponible para su ## op definido: write: - write_file: body: "hello world" file: ${global_path}/myfile.txt
En su lugar, cree una sección de variable var dentro de su op def:
def: write: - var: path: 'my/path' - write_file: body: "hello world" file: ${path}
O envíe la variable como argumento a su op:
vars: global_path: 'my/path/' def: write (path): - write_file: body: "hello world" file: ${path} do: - write: path: ${global_path}