Here is an example of the simplest Ansible playbook:
hello_world.yaml:
---
- name: Run Ansible playbook locally
hosts: localhost
gather_facts: no
tasks:
- ansible.builtin.debug:
msg: Hello, world!
ansible-playbook
/usr/bin/ansible-playbook
$ ansible-playbook hello_world.yaml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [Run Ansible playbook locally] *********************************************************************************************************************************
TASK [ansible.builtin.debug] ****************************************************************************************************************************************
ok: [localhost] => {
"changed": false,
"msg": "Hello, world!"
}
PLAY RECAP **********************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
To see the changes made during execution of the playbook we can use --diff option:
$ ansible-playbook hello_world.yaml --diff
From $ ansible-playbook --help:
-D, --diff: when changing (small) files and templates, show the differences in those files; works great with --check
To dry run the playbook we need to use check mode (--check or -C):
$ ansible-playbook hello_world.yaml --check
From $ ansible-playbook --help:
-C, --check: don't make any changes; instead, try to predict some of the changes that may occur
Playbook is run in read-only mode, Ansible still connects to the hosts and checks their state.
If someone manually made changes on the host, Ansible detects that but with --check option it will not revert that state to the one defined in playbook. But we'll be able to see what has been changed:
To see changes that would be made should the playbook be executed we can combine --diff and --check options:
$ ansible-playbook hello_world.yaml --diff --check
Example:
- name: Create directory and a file in it
hosts: localhost
tasks:
- name: Create directory
ansible.builtin.file:
path: ./temp
state: directory
mode: '0755'
- name: Create a file, using symbolic modes to set the permissions (equivalent to 0644)
ansible.builtin.file:
path: ./temp/foo.txt
state: touch
mode: u=rw,g=r,o=r
Dry run and diff output:
$ ansible-playbook multiple_plays.yaml --check --diff
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [Create directory and a file in it] ****************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [localhost]
TASK [Create directory] *********************************************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
{
"path": "./temp",
- "state": "absent"
+ "state": "directory"
}
changed: [localhost]
TASK [Create a file, using symbolic modes to set the permissions (equivalent to 0644)] ******************************************************************************
ok: [localhost]
PLAY RECAP **********************************************************************************************************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Validating tasks: check mode and diff mode — Ansible Documentation
ansible-navigator
Ansible playbooks can also be run by ansible-navigator:
$ ansible-navigator run hello_world.yaml
This will not print the output in terminal but we can find it in stdout value in JSON file (that gets created next to the YAML source file):
hello_world-artifact-2022-07-07T10:06:23.959652+00:00.json
To get the output in stdout, we can use --mode:
$ ansible-navigator run ./run_locally/hello_world.yaml --mode stdout
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Run Ansible playbook locally] ********************************************
TASK [Print debug message] *****************************************************
ok: [localhost] => {
"msg": "Hello, world!"
}
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
---
No comments:
Post a Comment