Another Approach To Ansible With Vagrant28 Feb 2021
To speed up the ansible development process it is common to use virtual machines and Vagrant is a pretty good option for that, specially if, like me, you come from a ruby backgroud.
I just had a problem with using Vagrant because it sets up the
vagrant user for you but you have no
root ssh access, which is a common form of accessing a real server.
Of course I could just use the
vagrant user with some
become: yes instruction but that wouldn’t really
replicate the real world scenario.
So I came up with this configuration in order to address that problem:
Vagrant.configure("2") do |config| # Base config.vm.box = "debian/stretch64" # Copy your ssh public key to /home/vagrant/.ssh/me.pub config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/me.pub" # Sets ups root ssh access with the copied key: config.vm.provision "shell", inline: <<-SHELL mkdir -p /root/.ssh chmod -R 700 /root/.ssh cat /home/vagrant/.ssh/me.pub > /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys SHELL end
With this, we can simply access the machine via the port
ssh -p 2222 root@localhost
And add the machine to your inventory:
my-machine ansible_connection=local ansible_port=2222
Even though that already works, it difficult to control the machines with the port vagrant is granting access to via ssh.
In order to make it better we could add a private network to the box and access via the assigned IP address:
Vagrant.configure("2") do |config| # other config config.vm.network :private_network, ip: "10.0.1.10", mask: "255.255.255.0" # some more config
This way we can simple access the machine via ssh:
Or add it to the ansible inventory: