Saltar a contenido

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}