Modules Ansible
Objectifs de certification
RHCE EX294 (RHEL8)
Si vous poursuivez des objectifs de certification voici ceux qui sont suggérés ici :
- 2. Maîtrise des composants de base d’Ansible
- 2.2. Modules
- 2.3. Variables
- 2.4. Facts
- 2.8. Utiliser la documentation fournie pour trouver des informations spécifiques aux modules et commandes Ansible
- 5. Écriture de scripts pour les tâches d’administration
- 5.2. Créer des scripts shell simples qui exécutent les commandes Ansible ad hoc
- 7. Utilisation des modules Ansible
1. Introduction
Les modules Ansible sont des “bouts de codes” écrits principalement en Python (mais tout langage supportant les retours JSON est autorisé) pour modifier l’état d’une propriété d’un hôte. Les modules sont invoqués par l’exécution de tâches soit directement dans la ligne de commande ansible
ou dans des livres de jeu avec la commande ansible-playbook
.
2. Documentation des modules
Certains d’entre nous trouveront la documentation des modules plus agréable à lire en ligne : https://docs.ansible.com/ansible/latest/modules/modules_by_category.html. Mais on obtient exactement le même résultat hors-ligne, sur la machine de contrôle avec la commande ansible-doc
:
Pour lister les modules :
ansible-doc -l
Pour appeler directement la documentation d’un module.
ansible-doc <module>
ansible-doc -s <module>
Veuillez vous informer sur les modules suivants :
ansible-doc setup
ansible-doc ping
ansible-doc lineinfile
ansible-doc uri
3. Exécutions de tâches Ad-Hoc
La commande ansible
offre la possibilité d’exécuter des modules ansible de manière “ad-hoc”, c’est à dire tâche par tâche sur un groupe d’hôtes, une sorte de livre de jeux à tâche unique. L’intérêt est de pouvoir exécuter la même tâche en parallèle sur un inventaire (constitué d’un certain nombre de cibles) en tout ou en partie.
ansible --help
La commande offre ce résultat sur la sortie :
Usage: ansible <host-pattern> [options]
Define and run a single task 'playbook' against a set of hosts
En général, la commande s’écrit ansible
suivie d’un hôte ou d’un groupe d’inventaire suivie -m nom_de_module
suivie l’option d’argument -a "clé=valeur clé=valeur clé=valeur"
, par exemple de manière formelle :
ansible <group_inventaire> -m nom_de_module -a "clé=valeur clé=valeur clé=valeur"
Trois autres exemples fonctionnels :
ansible localhost -m debug -a "msg='Hello World!'"
ansible localhost -m file -a "path=/tmp/test state=touch"
ansible localhost -m file -a "path=/tmp/test state=absent"
Attention, l’inventaire doit exister et doit être nourri des hôtes à gérer !
On trouvera aussi des options utiles de la ligne de commande comme celles-ci :
-b
,--become
active l’élévation de privilèges (sudo
)-e
qui permet de placer des variables ponctuelles ou un fichier de variables,-o
qui offre la sortie standard en une seule ligne,- ou encore
-l
,--limit
qui permet de limiter la tâche à certains hôtes seulement de l’inventaire, - ou encore
-v
ou-vvv
pour la verbosité, -i
précise le chemin du fichier d’inventaire.
Dans les exemples qui précèdent les tâches portent sur l’hôte spécial “localhost” qui n’a pas besoin d’être référencé dans un inventaire.
4. Valeurs de retour de l’exécution des tâches et des modules
Comme constaté, Ansible génère des valeurs de retour à la suite de l’exécution des tâches et des modules.
Valeurs de retour, Return Values
Valeurs de retour | Signication de la valeurs de retour | |
---|---|---|
backup_file (fichier_de_sauvegarde) |
Pour les modules qui implémentent backup=no | yes lors de la manipulation de fichiers, un chemin vers le fichier de sauvegarde créé. |
changed (modifié) |
Un booléen indiquant si la tâche a dû effectuer des modifications. | |
failed (échoué) |
Un booléen qui indique si la tâche a échoué ou non. | |
invocation |
Informations sur la manière dont le module a été invoqué. | |
msg |
Une chaîne avec un message générique relayé à l’utilisateur. | |
rc |
Certains modules exécutent des utilitaires en ligne de commande ou sont conçus pour exécuter des commandes directement (raw, shell, commande, etc), ce champ contient le ‘code de retour’ de ces utilitaires. | |
results |
Si cette clé existe, elle indique qu’une boucle était présente pour la tâche et qu’elle contient une liste du module normal’résultat’ par élément. | |
skipped (évité) |
Un booléen qui indique si la tâche a été ignorée ou non. | |
stderr |
Certains modules exécutent des utilitaires en ligne de commande ou sont conçus pour exécuter des commandes directement (raw, shell, commande, etc), ce champ contient la sortie d’erreur de ces utilitaires. | |
stderr_lines |
Lorsque stderr est retourné, nous fournissons aussi toujours ce champ qui est une liste de chaînes de caractères, un élément par ligne de l’original. |
|
stdout |
Certains modules exécutent des utilitaires en ligne de commande ou sont conçus pour exécuter directement des commandes (raw, shell, commande, etc). Cette zone contient l’édition normale de ces utilitaires. | |
stdout_lines |
Lorsque stdout est retourné, Ansible fournit toujours une liste de chaînes de caractères, chacune contenant un élément par ligne de la sortie originale. |
5. Modules Linux
Les modules Ansible sont donc des “morceaux de code” pour modifier l’état d’une propriété d’un hôte.
On recense ici 240 modules utiles pour l’administration d’un système Linux.
5.1. Paquets logiciels et repos
ansible.builtin.dnf
– Manages packages with the dnf package manageransible.builtin.package
– Generic OS package manageransible.builtin.package_facts
– package information as factsansible.builtin.pip
– Manages Python library dependenciesansible.builtin.rpm_key
– Adds or removes a gpg key from the rpm dbansible.builtin.ansible.builtin.yum
– Manages packages with the yum package manageransible.builtin.yum_repository
– Add or remove YUM repositoriescommunity.general.alternatives
– Manages alternative programs for common commandscommunity.general.apt_rpm
– apt_rpm package managercommunity.general.urpmi
– Urpmi manager
5.2. Services
ansible.builtin.service
– Manage servicesansible.builtin.service_facts
– Return service state information as fact dataansible.builtin.systemd
– Manage servicesansible.builtin.sysvinit
– Manage SysV services.
5.3. Règles de pare-feu
ansible.builtin.iptables
– Modify iptables rulesansible.posix.firewalld
– Manage arbitrary ports/services with firewalldcommunity.general.iptables_state
– Save iptables state into a file or restore it from a file
5.4. Systèmes de fichiers
ansible.builtin.fetch
– Fetch files from remote nodesansible.builtin.file
– Manage files and file propertiesansible.builtin.find
– Return a list of files based on specific criteriaansible.builtin.stat
– Retrieve file or file system statusansible.posix.acl
– Set and retrieve file ACL information.community.general.xattr
– Manage user defined extended attributesansible.builtin.get_url
– Downloads files from HTTP, HTTPS, or FTP to nodeansible.builtin.git
from git checkoutsansible.builtin.subversion
– Deploys a subversion repositoryansible.builtin.slurp
– Slurps a file from remote nodesansible.builtin.uri
– Interacts with webservicesansible.posix.synchronize
– A wrapper around rsync to make common tasks in your playbooks quick and easy
5.5. Périphériques de stockage
ansible.posix.mount
– Control active and configured mount pointscommunity.general.crypttab
– Encrypted Linux block devicescommunity.crypto.luks_device
– Manage encrypted (LUKS) devicescommunity.general.filesystem
– Makes a filesystemcommunity.general.iso_create
– Generate ISO file with specified files or folderscommunity.general.iso_extract
– Extract files from an ISO imagecommunity.general.lvg
– Configure LVM volume groupscommunity.general.lvol
– Configure LVM logical volumescommunity.general.open_iscsi
– Manage iSCSI targets with Open-iSCSIcommunity.general.parted
– Configure block device partitions
5.6. Contenus de fichiers
ansible.builtin.assemble
– Assemble configuration files from fragmentsansible.builtin.blockinfile
– Insert/update/remove a text block surrounded by marker linesansible.builtin.lineinfile
– Manage lines in text filesansible.builtin.replace
– Replace all instances of a particular string in a file using a back-referenced regular expressionansible.builtin.copy
– Copy files to remote locationsansible.builtin.tempfile
– Creates temporary files and directoriesansible.builtin.template
– Template a file out to a remote serveransible.posix.patch
– Apply patch files using the GNU patch tool
5.7. Archives
community.general.archive
– Creates a compressed archive of one or more files or treesansible.builtin.unarchive
copying it from the local machine.
5.8. Tâches planifiées
ansible.builtin.cron
– Manage cron.d and crontab entriesansible.posix.at
– Schedule the execution of a command or script file via the at commandcommunity.general.cronvar
– Manage variables in crontabs
5.9. SSH
ansible.builtin.known_hosts
– Add or remove a host from theknown_hosts
fileansible.posix.authorized_key
– Adds or removes an SSH authorized keycommunity.crypto.openssh_cert
– Generate OpenSSH host or user certificates.community.crypto.openssh_keypair
– Generate OpenSSH private and public keys.
5.10. SELINUX
ansible.posix.seboolean
– Toggles SELinux booleansansible.posix.selinux
– Change policy and state of SELinuxcommunity.general.sefcontext
– Manages SELinux file context mapping definitionscommunity.general.selinux_permissive
– Change permissive domain in SELinux policycommunity.general.selogin
– Manages linux user to SELinux user mappingcommunity.general.seport
– Manages SELinux network port type definitions
5.11. Utilisateurs et groupes
ansible.builtin.user
– Manage user accountsansible.builtin.group
– Add or remove groupscommunity.general.pam_limits
– Modify Linux PAM limitscommunity.general.pamd
– Manage PAM Modules
5.12. Administration divers
ansible.builtin.hostname
– Manage hostnameansible.builtin.ping
– Try to connect to host, verify a usable python and returnpong
on successansible.builtin.reboot
– Reboot a machine-
community.general.shutdown
– Shut down a machine ansible.posix.sysctl
– Manage entries in sysctl.conf.community.general.locale_gen
– Creates or removes locales
5.13. Commandes
ansible.builtin.script
– Runs a local script on a remote node after transferring itansible.builtin.command
– Execute commands on targetsansible.builtin.expect
– Executes a command and responds to prompts.ansible.builtin.raw
– Executes a low-down and dirty commandansible.builtin.shell
– Execute shell commands on targetsansible.builtin.pause
– Pause playbook executionansible.builtin.wait_for
– Waits for a condition before continuingansible.builtin.wait_for_connection
– Waits until remote system is reachable/usable
5.14. Réseau
community.general.nmcli
– Manage Networkingcommunity.general.listen_ports_facts
– Gather facts on processes listening on TCP and UDP ports.community.general.nsupdate
– Manage DNS records.community.general.ipify_facts
– Retrieve the public IP of your internet gatewaycommunity.general.ipinfoio_facts
– Retrieve IP geolocation facts of a host’s IP address
5.15. Informations
ansible.builtin.debug
– Print statements during executionansible.builtin.gather_facts
– Gathers facts about remote hostsansible.builtin.set_fact
– Set host facts from a taskansible.builtin.setup
– Gathers facts about remote hostsansible.builtin.fail
– Fail with custom message
5.16. Modules internes
ansible.builtin.add_host
to the ansible-playbook in-memory inventoryansible.builtin.assert
– Asserts given expressions are trueansible.builtin.async_status
– Obtain status of asynchronous taskansible.builtin.getent
– A wrapper to the unix getent utilityansible.builtin.group_by
– Create Ansible groups based on factsansible.builtin.meta
– Execute Ansible ‘actions’ansible.builtin.set_stats
– Set stats for the current ansible run
5.17. Include/Import
ansible.builtin.import_playbook
– Import a playbookansible.builtin.import_role
– Import a role into a playansible.builtin.import_tasks
– Import a task listansible.builtin.include
– Include a play or task listansible.builtin.include_role
– Load and execute a roleansible.builtin.include_tasks
– Dynamically include a task listansible.builtin.include_vars
– Load variables from files, dynamically within a task
5.18. Autres Packagers et gestionnaires de dépendances
community.general.bundler
– Manage Ruby Gem dependencies with Bundlercommunity.general.composer
– Dependency Manager for PHPcommunity.general.cpanm
– Manages Perl library dependencies.community.general.django_manage
– Manages a Django application.community.general.pear
– Manage pear/pecl packagescommunity.general.easy_install
– Installs Python librariescommunity.general.gem
– Manage Ruby gemscommunity.general.snap
– Manages snapscommunity.general.make
– Run targets in a Makefilecommunity.general.npm
– Manage node.js packages with npmcommunity.general.pip_package_info
– pip package informationcommunity.general.python_requirements_facts
– Show python path and assert dependency versionscommunity.general.python_requirements_info
– Show python path and assert dependency versionscommunity.general.yarn
– Manage node.js packages with Yarn
5.19. MySQL
community.mysql.mysql_db
– Add or remove MySQL databases from a remote hostcommunity.mysql.mysql_info
– Gather information about MySQL serverscommunity.mysql.mysql_query
– Run MySQL queriescommunity.mysql.mysql_replication
– Manage MySQL replicationcommunity.mysql.mysql_user
– Adds or removes a user from a MySQL databasecommunity.mysql.mysql_variables
– Manage MySQL global variables
5.20. Docker Containers
community.general.docker_compose
– Manage multi-container Docker applications with Docker Compose.community.general.docker_config
– Manage docker configs.community.general.docker_container
– manage docker containerscommunity.general.docker_container_info
– Retrieves facts about docker containercommunity.general.docker_host_info
– Retrieves facts about docker host and lists of objects of the services.community.general.docker_image
– Manage docker images.community.general.docker_image_facts
– Inspect docker imagescommunity.general.docker_image_info
– Inspect docker imagescommunity.general.docker_login
– Log into a Docker registry.community.general.docker_network
– Manage Docker networkscommunity.general.docker_network_info
– Retrieves facts about docker networkcommunity.general.docker_node
– Manage Docker Swarm nodecommunity.general.docker_node_info
– Retrieves facts about docker swarm node from Swarm Managercommunity.general.docker_prune
– Allows to prune various docker objectscommunity.general.docker_secret
– Manage docker secrets.community.general.docker_service
– Manage multi-container Docker applications with Docker Compose.community.general.docker_stack
– docker stack modulecommunity.general.docker_stack_info
– Return information on a docker stackcommunity.general.docker_stack_task_info
– Return information of the tasks on a docker stackcommunity.general.docker_swarm
– Manage Swarm clustercommunity.general.docker_swarm_info
– Retrieves facts about Docker Swarm cluster.community.general.docker_swarm_service
– docker swarm servicecommunity.general.docker_swarm_service_info
– Retrieves information about docker services from a Swarm Managercommunity.general.docker_volume
– Manage Docker volumescommunity.general.docker_volume_info
– Retrieve facts about Docker volumes
5.20. LXC/LXD
community.general.lxc_container
– Manage LXC Containerscommunity.general.lxca_cmms
– Custom module for lxca cmms inventory utilitycommunity.general.lxca_nodes
– Custom module for lxca nodes inventory utilitycommunity.general.lxd_container
– Manage LXD Containerscommunity.general.lxd_profile
– Manage LXD profiles
5.21. LDAP
community.general.ldap_attr
– Add or remove LDAP attribute valuescommunity.general.ldap_attrs
– Add or remove multiple LDAP attribute valuescommunity.general.ldap_entry
– Add or remove LDAP entries.community.general.ldap_passwd
– Set passwords in LDAP.community.general.ldap_search
– Search for entries in a LDAP server
5.22. Web Servers
community.general.htpasswd
– manage user files for basic authenticationcommunity.general.apache2_mod_proxy
– Set and/or get members’ attributes of an Apache httpd 2.4 mod_proxy balancer poolcommunity.general.apache2_module
– Enables/disables a module of the Apache2 webserver.community.general.nginx_status_facts
– Retrieve nginx status facts.community.general.nginx_status_info
– Retrieve information on nginx status.
5.23. PostgreSQL
community.general.postgresql_copy
– Copy data between a file/program and a tablecommunity.general.postgresql_db
– Add or remove PostgreSQL databases from a remote host.community.general.postgresql_ext
– Add or remove PostgreSQL extensions from a databasecommunity.general.postgresql_idx
– Create or drop indexes from a PostgreSQL databasecommunity.general.postgresql_info
– Gather information about PostgreSQL serverscommunity.general.postgresql_lang
– Adds, removes or changes procedural languages with a PostgreSQL databasecommunity.general.postgresql_membership
– Add or remove PostgreSQL roles from groupscommunity.general.postgresql_owner
– Change an owner of PostgreSQL database objectcommunity.general.postgresql_pg_hba
– Add, remove or modify a rule in a pg_hba filecommunity.general.postgresql_ping
– Check remote PostgreSQL server availabilitycommunity.general.postgresql_privs
– Grant or revoke privileges on PostgreSQL database objectscommunity.general.postgresql_publication
– Add, update, or remove PostgreSQL publicationcommunity.general.postgresql_query
– Run PostgreSQL queriescommunity.general.postgresql_schema
– Add or remove PostgreSQL schemacommunity.general.postgresql_sequence
– Create, drop, or alter a PostgreSQL sequencecommunity.general.postgresql_set
– Change a PostgreSQL server configuration parametercommunity.general.postgresql_slot
– Add or remove replication slots from a PostgreSQL databasecommunity.general.postgresql_subscription
– Add, update, or remove PostgreSQL subscriptioncommunity.general.postgresql_table
– Create, drop, or modify a PostgreSQL tablecommunity.general.postgresql_tablespace
– Add or remove PostgreSQL tablespaces from remote hostscommunity.general.postgresql_user
from a PostgreSQL server instancecommunity.general.postgresql_user_obj_stat_info
– Gather statistics about PostgreSQL user objects
5.24. RHSM Red Hat software channels
community.general.redhat_subscription
– Manage registration and subscriptions to RHSM using thesubscription-manager
commandcommunity.general.rhn_channel
– Adds or removes Red Hat software channelscommunity.general.rhn_register
– Manage Red Hat Network registration using therhnreg_ks
commandcommunity.general.rhsm_release
– Set or Unset RHSM Release versioncommunity.general.rhsm_repository
– Manage RHSM repositories using the subscription-manager command
5.25. Fichiers ini, csv, xml
community.general.read_csv
– Read a CSV filecommunity.general.git_config
– Read and write git configurationcommunity.general.ini_file
– Tweak settings in INI filescommunity.general.xml
– Manage bits and pieces of XML files or strings
5.26. Gestion des processus et du noyau
community.general.capabilities
– Manage Linux capabilitiescommunity.general.modprobe
– Load or unload kernel modulescommunity.general.pids
– Retrieves process IDs list if the process is running otherwise return empty list
5.27. Surveillance
community.general.snmp_facts
– Retrieve facts for a device using SNMPcommunity.general.syslogger
– Log messages in the syslogcommunity.general.mail
– Send an email
5.28. XFS / ZFS
community.general.xfs_quota
– Manage quotas on XFS filesystemscommunity.general.zfs
– Manage zfscommunity.general.zfs_delegate_admin
community.general.zfs_facts
– Gather facts about ZFS datasets.community.general.zpool_facts
– Gather facts about ZFS pools.
5.29. Debian/Ubuntu
ansible.builtin.apt
– Manages apt-packagesansible.builtin.apt_key
– Add or remove an apt keyansible.builtin.apt_repository
– Add and remove APT repositoriesansible.builtin.dpkg_selections
– Dpkg package selection selectionsansible.builtin.debconf
– Configure a .deb packagecommunity.general.apt_repo
– Manage APT repositories via apt-repocommunity.general.apt_rpm
– apt_rpm package managercommunity.general.dpkg_divert
– Override a debian package’s version of a filecommunity.general.interfaces_file
– Tweak settings in /etc/network/interfaces filescommunity.general.ufw
– Manage firewall with UFW
5.30. Crypto TLS
community.crypto.acme_account
– Create, modify or delete ACME accountscommunity.crypto.acme_account_facts
– Retrieves information on ACME accountscommunity.crypto.acme_account_info
– Retrieves information on ACME accountscommunity.crypto.acme_certificate
– Create SSL/TLS certificates with the ACME protocolcommunity.crypto.acme_certificate_revoke
– Revoke certificates with the ACME protocolcommunity.crypto.acme_challenge_cert_helper
– Prepare certificates required for ACME challenges such astls-alpn-01
community.crypto.acme_inspect
– Send direct requests to an ACME servercommunity.crypto.certificate_complete_chain
– Complete certificate chain given a set of untrusted and root certificatescommunity.crypto.get_certificate
– Get a certificate from a host:portcommunity.crypto.openssl_certificate
– Generate and/or check OpenSSL certificatescommunity.crypto.openssl_certificate_info
– Provide information of OpenSSL X.509 certificatescommunity.crypto.openssl_csr
– Generate OpenSSL Certificate Signing Request (CSR)community.crypto.openssl_csr_info
– Provide information of OpenSSL Certificate Signing Requests (CSR)community.crypto.openssl_dhparam
– Generate OpenSSL Diffie-Hellman Parameterscommunity.crypto.openssl_pkcs12
– Generate OpenSSL PKCS#12 archivecommunity.crypto.openssl_privatekey
– Generate OpenSSL private keyscommunity.crypto.openssl_privatekey_info
– Provide information for OpenSSL private keyscommunity.crypto.openssl_publickey
– Generate an OpenSSL public key from its private key.community.crypto.openssl_signature
– Sign data with opensslcommunity.crypto.openssl_signature_info
– Verify signatures with opensslcommunity.crypto.x509_certificate
– Generate and/or check OpenSSL certificatescommunity.crypto.x509_certificate_info
– Provide information of OpenSSL X.509 certificatescommunity.crypto.x509_crl
– Generate Certificate Revocation Lists (CRLs)community.crypto.x509_crl_info
– Retrieve information on Certificate Revocation Lists (CRLs)
6. Modules Réseau
Les modules Ansible pour l’automation du réseau sont désignés par le constructeur de l’OS suivi d’un nom de module :
*_facts
: récupère des facts*_command
: exécute des commandes en mode privilège*_config
: exécute des commandes en mode de configuration
Selon le nom des plateformes :
- Arista EOS =
eos_*
- Cisco IOS/IOS-XE =
ios_*
- Cisco NX-OS =
nxos_*
- Cisco IOS-XR =
iosxr_*
- Juniper Junos =
junos_*
- VyOS =
vyos_*
Mais on trouve aussi un grand nombre des modules spécialisés.
7. Modules Windows
…
8. Modules VMWare
…
9. Développement de modules
Exemple de développement d’un module simple.