There are several options for using these tools:
$ git clone https://github.com/soulshake/prepare-vms.git
$ cd prepare-vms
$ docker-compose build
$ mkdir $HOME/bin && ln -s `pwd`/trainer $HOME/bin/trainer
$ docker pull soulshake/prepare-vms
This repo can be added as a submodule in the repo of the Docker workshop:
$ git submodule add https://github.com/soulshake/prepare-vms.git
Required environment variables:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
If you have more than one workshop:
$ cp settings.yaml settings/YOUR_WORKSHOP_NAME-settings.yaml
$ ln -s settings/YOUR_WORKSHOP_NAME-settings.yaml `pwd`/settings.yaml
Update the settings.yaml
as needed. This is the file that will be used to generate cards.
Summary of steps to launch a batch of instances for a workshop:
- Export the environment variables needed by the AWS CLI (see Requirements below)
trainer start NUMBER_OF_VMS
to create AWS instancestrainer deploy TAG
to runscripts/postprep.rc
via parallel-sshtrainer pull-images TAG
to pre-pull a bunch of Docker imagestrainer test TAG
trainer cards TAG
to generate a PDF and an HTML file you can print
The trainer
script can be executed directly.
It will check for the necessary environment variables. Then, if all its dependencies are installed
locally, it will execute trainer-cli
. If not, it will look for a local Docker image
tagged soulshake/trainer-tools
. If found, it will run in a container. If not found,
the user will be prompted to either install the missing dependencies or download
the Docker image.
$ trainer start 10
A few things will happen:
When the start
command is run, your local RSA SSH public key will be added to your AWS EC2 keychain.
To see which local key will be uploaded, run ssh-add -l | grep RSA
.
10 VMs will be started, with an automatically generated tag (timestamp + your username).
Your SSH key will be added to the authorized_keys
of the ubuntu user.
Following the creation of the VMs, a text file will be created containing a list of their IPs.
This ips.txt file will be created in the $TAG/ directory and a symlink will be placed in the working directory of the script.
If you create new VMs, the symlinked file will be overwritten.
Instances can be deployed manually using the deploy
command:
$ trainer deploy TAG
The postprep.rc
file will be copied via parallel-ssh to all of the VMs and executed.
$ trainer pull-images TAG
$ trainer cards TAG
$ trainer list
$ trainer list TAG
This will print a human-friendly list containing some information about each instance.
$ trainer stop TAG
- Don't write to bash history in system() in postprep
- compose, etc version inconsistent (int vs str)