Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How execute commands as another user during provisioning on Vagrant?

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!

like image 205
Valter Silva Avatar asked Mar 13 '23 04:03

Valter Silva


2 Answers

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"

like image 104
Frederic Henri Avatar answered Apr 27 '23 11:04

Frederic Henri


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
like image 45
Diomidis Spinellis Avatar answered Apr 27 '23 11:04

Diomidis Spinellis