es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe un requisito de Sal que ejecutará un estado sólo si otro estado no ha sido ejecutado?

Tengo una situación en la que solo quiero ejecutar un estado de sal si otro estado no se ejecuta. ¿Es eso posible?

Por ejemplo:
– El Estado1 administra el archivo-abc.
– El Estado2 tiene un requerimiento de cambios que solo se ejecutará si el archivo-abc cambia.
– El Estado3 solo se ejecutará si el Estado2 no se ejecuta.

El comportamiento esperado es:

Si el archivo-abc cambia:
   ejecutar Estado2

Si el Estado2 no se ejecutó:
   ejecutar Estado3

El requisito aquí es que el Estado3 se ejecute si el Estado2 no lo hace, y puede haber muchas razones en el futuro por las cuales el Estado2 se ejecutaría más allá de un solo cambio de archivo.

Estado1

test-state-file1:
  file.managed:
    - name: /data/test-file1
    - source: salt://foo-states/test-file

Estado2

test-state2-echo:
  cmd.run:
    - name: echo "Test State 2"
    - onchanges:
      - file: /data/test-file1

Estado3 – Solo se ejecuta si Estado 1 y 2 no se ejecutan.

test-state3-echo:
  cmd.run:
    - name: echo "Test State 3"
Tags:  

Answer

  1. Avatar for davy.ai

    Sí, es posible ejecutar un estado de salt solo si otro estado no se ejecuta. En este escenario, podemos usar el requisito “require” en State3 para verificar si State2 se ha ejecutado o no. Si State2 se ha ejecutado, entonces State3 se omitirá. Los siguientes estados de ejemplo pueden lograr el comportamiento esperado mencionado anteriormente.

    State1

    test-state-file1:
      file.managed:
        - name: /data/test-file1
        - source: salt://foo-states/test-file
    

    State2

    test-state2-echo:
      cmd.run:
        - name: echo "Test State 2"
        - onchanges:
          - file: /data/test-file1
    

    State3: solo se ejecuta si State 1 y 2 no se ejecutan.

    test-state3-echo:
      cmd.run:
        - name: echo "Test State 3"
        - require:
          - not: test-state2-echo
    

    En el ejemplo anterior, la palabra clave “not” en la directiva require de State3 asegura que State3 solo se ejecute si State2 no se ha ejecutado. Si State2 se ha ejecutado, entonces la condición require fallará y State3 se omitirá.

Comments are closed.