.. -*- coding: utf-8 -*- :orphan: ======================== Exécution de commandes ======================== Ciblage ======= Ciblage - possibilités ---------------------- * *minion_id* * *globs* * *regexp* * listes * *grains* (ex. par OS, par famille de CPU, etc.) * *pillars* * *nodegroups* * *subnet* * *range* Ciblage ------- .. code-block:: bash master> salt '*' test.ping master> salt 'web*' grains.items master> salt 'windows.example.org' sys.doc master> salt '*.example.org' pkg.install vim Ciblage - ``minion_id`` ----------------------- Le ``minion_id`` est généré à partir du FQDN (*Fully Qualified Domain Name*) * *globbing* : utilisation de *wildcards* (cf. ``fnmatch`` en python) .. code-block:: bash master> salt '*' test.ping master> salt \* test.ping master> salt \*.example.org test.ping master> salt 'db?.example.org' test.ping master> salt 'db[1-5].example.org' test.ping master> salt 'db[1,3].example.org' test.ping * *regexp* : en utilisant ``-E`` (compatibles Perl) .. code-block:: bash master> salt -E 'web1-(prod|devel)' test.ping * listes : en utilisant ``-L`` .. code-block:: bash master> salt -L 'web1,web2,web3' test.ping Ciblage - *grains* ------------------ * Utiliser ``-G`` * utilisation du ``:`` pour explorer les dictionnaires : * ``'key:subkey:value'`` * ``{'key': {'subkey': 'value'}}`` .. code-block:: bash master> salt -G 'os:Debian' test.ping master> salt -G 'gpus:vendor:ati' test.ping master> salt -G "ip_interfaces:eth0:192.168.1.*" test.ping .. XXX broken? * salt -G 'ip_interfaces:*:eth*:172.17.4.*' test.ping Ciblage - *pillars* ------------------- * Utiliser ``-I`` * Sous la forme de ``key:value`` .. code-block:: bash master> salt -I 'role:mailserver' test.ping master> salt -I 'role:db_psql' test.ping master> salt -I 'role:db_*' test.ping Ciblage - *subnets* ------------------- * Utilisation de la notation CIDR ou des adresses IP avec ``-R`` .. code-block:: bash master> salt -S '172.17.1.0/24' test.ping master> salt -S '172.17.1.1' test.ping Ciblage - *Compound matchers* ----------------------------- * Combinaison de règles *grains*/*regex*/listes/*pillars*/*subnet*/*range* .. code-block:: bash salt -C 'web* and G@os:Debian or E@web.*' test.ping salt -C 'not G@kernel:Darwin' test.ping Ciblage - *nodegroups* ---------------------- * La définition des groupes est statique côté *master* * utiliser ``-N`` * définis dans ``/etc/salt/master`` .. code-block:: yaml nodegroups: web: 'apache*.example.org' db: 'psql*.example.org and mysql*.example.org' supervision: 'L@shinken.example.org,\ munin.example.org,graphite.example.org' debian: 'G@os:Debian' .. code-block:: bash master> salt -N db test.ping Ciblage - *batch size* ---------------------- Permet de limiter le nombre de *minions* qui exécutent la commande simultanément. * ``-b`` ou ``--batch-size`` * par exemple quand un grand nombre de VMs sont sur le même hôte, cela permet de répartir la charge chronologiquement. * Les "batchs" ne sont pas aléatoires. .. code-block:: bash master> salt '*' -b 10 test.ping master> salt '*' -b 25% test.ping Ciblage - *subset* ------------------ Permet d'éxecuter une fonction sur un sous-ensemble des minions (à partir de la liste des minions pouvant répondre à l'execution) * ``--subset`` utilise un chiffre entier * l'argument est le nombre de *minions*. *Attention*: cette commande pose d'abord la question `sys.list_functions` à tous les minions, attend leur réponse puis choisit au sein de cet ensemble, par exemple avec ``--subset=1`` la commande parait particulièrement lente. .. code-block:: bash master> salt --subset=10 '*' test.ping Ciblage - asynchrone -------------------- * ``--async`` : lancer la commande sans attendre le retour * Affiche le ``jid`` du job lancé par défaut * On peut récupérer ensuite les résultats de l'exécution en utilisant le *runner* ``jobs``