Inspired by Maxim Chernyak's blog post 6 practices for super smooth Ansible experience
The goal is to produce the convenient local playground, but skipping the ssh key insertion (Vagrant does that for us) and editing /etc/hosts (not available on Windows) while still allowing full access to the guest VMs.
Makefile is all you need. Everything else can be downloaded automatically, or use your own personal versions.
Download the Makefile, then
make Vagrantfile all
or
vagrant init centos/7; make all
make all
does the following:make up
Brings up all Vagrant boxes (same asvagrant up
)make roles
Install Ansible Galaxy roles from "requirements.yml" or "config/requirements.yml"make .vai/ssh-config
Create ssh configurationmake .vai/inventory
Create ansible inventorymake ansible.cfg
Create default ansible.cfgmake main
Run main.yml playbook, if presentmake ip
Display the IPs of all the VMs*
Other commands:
make Vagrantfile
Downloads sampleVagrantfile
andGUESTS.rb
make GUESTS.rb
Downloads sampleGUESTS.rb
(used by sampleVagrantfile
)make clean-roles
Removes installed ansible rolesmake clean
Removes ansible filesmake copyright
Displays copyright informationmake etc-hosts
Add host records to all guestsmake license
Displays license informationmake roles-force
Update all roles, overwriting when requiredmake ping
Pings all guests via Ansible's ping modulemake python
Installs python on Alpine/Debian/Ubuntu systems*make root-key
Copies vagrant ssh key for root user accessmake update
Downloads latest version from GitHub*make version
Displays installed version
- Uses a provided or downloaded
Vagrantfile
to create the application stack systems. SeeVagrantfile.sample
andGUESTS.rb.sample
for a starting point. - Install any required Galaxy roles (optional)
- Write the ssh configuration (as provided by Vagrant)
- Create
ansible.cfg
that uses the above ssh configuration
Your Ansible playbooks can now access the Vagrant VMs as if they were a part of your infrastructure, either by name or by group.
The Makefile will accept command line options, or read from similarly named environmental variables:
ETC_HOSTS
etc-hosts playbook*INVENTORY
ansible inventory file*MAIN
default playbook to run, if presentREPO
upstream repositoryRETRYPATH
directory to place retry files*ROLES_PATH
ansible roles pathSAMPLEVAGRANTFILE
upstream Vagrantfile.sampleSSHCONFIG
location of generated ssh configuration*VAIDIR
directory to place Ansible files*VAULTPASSWORDFILE
path to ansible vault password file*
If requirements.yml
or config/requirements.yml
exists, the listed roles
will be downloaded from Galaxy. If both exist, then requirements.yml
will
take precedence.
Manually installed roles can be added to the roles-local
directory.
The inventory will group related hosts into groups. Related hosts all share
the same prefix. web-1
, web-2
, web-3
will all be a part of [web]
.
Update all guests' /etc/hosts
with all other guests' internal networking IPs
to allow name-based addressing without relying on external DNS.
See README.Vagrantfile.
This project follows SemVer.
The ip
target may fail on non-Linux guests.
The update
target will overwrite the Makefile.
The etc-hosts
target works best when there is only one additional interface.
Certain variables, ETC_HOSTS
, INVENTORY
, ROLES_PATH
, SSHCONFIG
,
VAIDIR
, and VAULTPASSWORDFILE
will break if there is embedded whitespace.