1 votes

Saltstack state.apply détermine s'il est exécuté en mode test=True ?

Nous utilisons serverdensity (MODULE BETA) https://docs.saltstack.com/en/latest/ref/states/all/salt.states.serverdensity_device.html ) avec du sel et j'ai rencontré le (bug ?) où si vous essayez un :

salt '*SERVER-01*' --state-output=mixed state.apply serverdensity test=True

Ensuite, le module serverdensity essaie toujours d'ajouter le serveur à la surveillance, qu'il soit en mode 'test=True' ou non.

J'espérais pouvoir définir une variable Jinja (ou en utiliser une existante ?) avec le mode de test actuel et ainsi faire un "if test then echo 'not adding' else add" pour passer outre.

Cependant, je n'arrive pas à trouver comment faire dans les documents ou les recherches sur Google. J'ai même cherché à voir si je pouvais récupérer les args ENV sur le maître pour voir s'ils ont été passés en tant qu'arg de ligne de commande mais $@ ne produit rien :

{% set args = salt['environ.get']('@') %}

Des idées ?

Exécution de salt 2018.3.2 (Oxygen) sur Centos 7

2voto

M Haswell Points 31

Au cas où quelqu'un trouverait ceci et voudrait connaître la réponse - j'ai vérifié sur le slack de saltstackcommunity et des personnes très utiles ont répondu :

terminalmage [2:55 PM] vérifie il semble qu'il soit simplement appelé opts Donc, si vous voulez voir si le mode test est activé, une façon de faire serait quelque chose comme :

{% if opts['test'] %}
echo foo:
  cmd.run
{% endif %}

Ensuite, si cet état est présent dans le retour d'état, vous savez qu'il a été exécuté en mode test. Mais une autre façon de vérifier serait de faire un simple bon vieux cmd.run état car vous obtiendriez un résultat disant que la commande serait être exécuté si vous avez exécuté en mode test

local:
----------
      ID: echo foo
Function: cmd.run
  Result: None
 Comment: Command "echo foo" would have been executed
 Started: 14:58:55.482679
Duration: 0.499 ms
 Changes:

Je tiens également à signaler que serverdensity a également pris en compte ce problème et déclare que son module est pris en charge, de sorte que ce problème sous-jacent devrait également être résolu prochainement. En attendant, le if-then-else de opts['test'] fonctionne pour nous.

0voto

daks Points 643

Dans un état, je pense que la réponse correcte est de vérifier __opts__ pour la présence de tests, voir https://docs.saltstack.com/en/latest/ref/states/writing.html#test-state

# Return comment of changes if test.
if __opts__['test']:
    ret['result'] = None
    ret['comment'] = 'State Foo will execute with param {0}'.format(bar)
    return ret

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X