Vagrant executes my scripts as root during provision. But I would like to execute, during the provisioning time, some commands as another user.
This is how I'm doing at the moment:
su - devops -c "git clone git://github.com/sstephenson/rbenv.git .rbenv"
su - devops -c "echo 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' >> ~/.bash_profile"
su - devops -c "echo 'eval "$(rbenv init -)"' >> ~/.bash_profile"
su - devops -c "git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build"
su - devops -c "echo 'export PATH=\"$HOME/.rbenv/plugins/ruby-build/bin:$PATH\"' >> ~/.bash_profile"
su - devops -c "source ~/.bash_profile"
But I would like to make this nicer, something like this:
#become devops user here
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
# back to the root user here
Is this possible ? Thank you!
when running the provisioning, its true that vagrant will run as root by default, you can change this behavior by making the provision as
config.vm.provision "shell", privileged: false blablabla
vagrant will then use the user defined as config.ssh.username, if its not set, its vagrant user by default
If you have multiple users on your system and still want to use another user, what I would do is to write a script and execute the script as su -l newuser -c "path to shell script"
If you want to have the script inline with the rest you can use a command sequence such as the following.
sudo -u devops /bin/sh <<\DEVOPS_BLOCK
# Become devops user here
id
whoami
# Back to the root user here
DEVOPS_BLOCK
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With