Ansible - Basics
This is just a quick sample/demo of the core features it is meant to:
- Show you how ansible works
- Show you what to expect and what can be done
Everything on this page will be covered in more detail in the following sections.
- You will want a user and ssh key on every host but you can also prompt for passwords if needed.
- You can run Ansible from almost anywhere including a laptop.
You will want to start out by creating an inventory file.
Example inventory file:
/etc/ansible/hosts192.0.3.25 server1.lab.net server2.lab.net [group2] server3.lab.net server4.lab.net [webservers] web1 web2 web3
You can ping all hosts in inventory with this command:
ansible all -m ping
Another test:
ansible all -a "/bin/echo Hello World"
ansible all -a "uname -a"
- NOTE - Spacing and indentation in playbooks is very important.
Basic playbook example:
test-task1.yaml--- - name: A Test Playbook hosts: all tasks: - name: First Test command: "touch /home/user1/testing.txt"
Running a playbook:
ansible-playbook mytask.yaml
Using the ping module and sudo:
ansible all -m ping -u user1 -k # specify user, ask password
ansible all -m ping -u user1 -k -b -K # sudo to root
Run shell commands and copy files:
ansible group2 -m ansible.builtin.shell -a 'echo test > output.txt'
ansible group2 -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts"
Ensure started, stopped, restarted:
ansible webservers -m ansible.builtin.apt -a "name=nginx update_cache=yes" -b
ansible webservers -m ansible.builtin.apt -a "name=nginx state=absent" -b
ansible webservers -m ansible.builtin.service -a "name=nginx state=started" -b
ansible webservers -m ansible.builtin.service -a "name=nginx state=restarted" -b
ansible webservers -m ansible.builtin.service -a "name=nginx state=stopped" -b
See all facts:
ansible all -m ansible.builtin.setup
Useful Example
Playbook to install an NGINX web server and deploy a web page from a template:
web_deploy.yaml--- - name: A Test Playbook hosts: webservers become: yes vars: var1: "TEST STRING" tasks: - name: Update repo cache and install nginx package ansible.builtin.apt: name: nginx update_cache: yes - name: Make sure a service is started, enabled, and not masked ansible.builtin.systemd: state: started name: nginx enabled: true masked: no - template: src: templates/index.html.j2 dest: /var/www/html/index.html mode: a+r
The actual template:
templates/index.html.j2This is a sample page. Here is the test value: {{ var1 }} That is it.
Run the playbook as root on the remote hosts:
ansible-playbook -k -b -K web_deploy.yaml