A small Vagrant lab environment for learning Salt
Find a file
2023-04-24 21:10:41 -05:00
salt_content clean up acg content 2023-04-24 20:56:37 -05:00
.gitignore add gitignore 2023-03-14 13:57:58 -05:00
README.md update readme 2023-04-10 09:25:37 -05:00
Vagrantfile pin to salt 3005 release for now 2023-04-24 21:10:41 -05:00

vagrant-saltlab

Using Vagrant to run a portable Salt lab environment on my Chromebook. The included Vagrantfile spawns a environment with a single Salt Master (named salt) and four Salt Minions (named minion##) running a few different common Linux distributions for learning, testing, and development. It leverages the libvirt provider to interact with native Linux virtualization, and has a few tweaks to work around limitations imposed by running this all within ChromeOS's LXC-based Linux development environment.

To make it easier to deploy, test, break, tear down, and redeploy the environment:

  1. The Salt master blindly auto-accepts all minion keys.
  2. The minions register the roles:saltlab grain to aid in targeting.
  3. The master uses gitfs to pull the Salt content from this very Github repo.
  4. Additionally, the contents of salt_content/local get rsynced to /srv/ when the master starts up to make it easier to write/test Salt content locally. This is a one-way rsync from host to VM (and not the other way around), so make sure to write your Salt content on the host and use vagrant rsync to push changes into the VM.

Usage

Provision the virtual environment:

vagrant up

The master and four minions will be deployed; this will take a few minutes. Once complete, you can verify status with vagrant status:

; vagrant status
Current machine states:

salt                      running (libvirt)
minion01                  running (libvirt)
minion02                  running (libvirt)
minion03                  running (libvirt)
minion04                  running (libvirt)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

Access an SSH shell on the master with vagrant ssh salt:

; vagrant ssh salt
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-139-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
vagrant@salt:~$

Verify that all the minion keys have been automatically accepted by the master (this is a lab environment, after all):

vagrant@salt:~$ sudo salt-key -L
Accepted Keys:
minion01
minion02
minion03
minion04
salt
Denied Keys:
Unaccepted Keys:
Rejected Keys:

Make sure all the minions are responding correctly:

vagrant@salt:~$ sudo salt '*' test.ping
salt:
    True
minion03:
    True
minion02:
    True
minion01:
    True
minion04:
    True

And confirm that the local and remote content has been successfully merged into the salt:// file system:

vagrant@salt:~$ sudo salt-run fileserver.file_list
- _reactor/sync_grains.sls    # gitfs
- acg/.gitkeep                # local
- acg/neofetch/init.sls       # local
- acg/neofetch/uninstall.sls  # local
- acg/top.sls                 # local
- top.sls                     # gitfs
- users/init.sls              # gitfs
- vim/init.sls                # gitfs
- vim/uninstall.sls           # gitfs
- vim/vimrc                   # gitfs
- webserver/index.html        # gitfs
- webserver/init.sls          # gitfs
- webserver/uninstall.sls     # gitfs

Happy Salting!

Cleanup

To blow it all away for a fresh start, just run vagrant destroy -f.