2015-12-17 7 views
1

Как настроить марионетку для предоставления пользователю на гостевой машине имени пользователя, которое соответствует имени пользователя для пользователя хост-машина, которая снабжает гостя?(Использование кукольного применять, а не сервер/мастер)Puppet - как предоставить пользователю на гостевой машине то же имя пользователя, что и пользователь на главной машине

$ puppet --version 
3.4.3 
$ vagrant --version 
Vagrant 1.7.2 

Это то, что я пытался до сих пор:

Следуя инструкции в этой SO answer я пытался использовать бродячую/марионетку создайте учетную запись пользователя на гостевой машине, которая соответствует учетной записи пользователя на главной машине. Но в конечном итоге это не сработало. Вместо того, чтобы получать имя пользователя хоста, был создан пользователь «$ user_name».

Vagrantfile:

VAGRANTFILE_API_VERSION = "2" 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "npalm/mint17-amd64-cinnamon" 
    config.vm.hostname = "dev-env" 
    config.vm.provider "virtualbox" do |vb| 
    vb.name = "dev-env" 
    vb.customize ["modifyvm", :id, "--cpus", "2"] 
    vb.customize ["modifyvm", :id, "--memory", "1280"] 
    end 
    config.vm.provision "shell", path: "provisioning/shell/apt-update.sh" 
    config.vm.provision "shell", path: "provisioning/shell/puppet.sh" 
    config.vm.provision "puppet" do |puppet| 
    puppet.facter = { 
     "user_name" => ENV['USER'] 
    } 
    puppet.options = "--verbose --debug" 
    puppet.manifests_path = "provisioning/puppet/manifests" 
    puppet.module_path = "provisioning/puppet/modules" 
    end 
end 

инициализации/оболочки/apt-update.sh:

#!/usr/bin/env bash 
sudo apt-get -y update 
sudo apt-get install -y aptitude 

инициализации/оболочки/puppet.sh:

#!/usr/bin/env bash 
sudo aptitude install -y puppet 

снабжение/кукольный/манифесты/default.pp:

user { '$user_name': 
    ensure => 'present', 
    comment => 'developer account', 
    home => '/home/$user_name', 
    shell => '/bin/bash', 
    uid  => 643 
} 
-> 
file{'$user_name home': 
    ensure => 'directory', 
    path => '/home/$user_name', 
    owner => '$user_name', 
    group => '$user_name' 
} 

Фактический выход

############## 
# Host Machine 
############## 
$ whoami 
axiopisty 

############### 
# Guest Machine 
############### 
$ ls -la /home/ 
total 16 
drwxr-xr-x 4 root  root  4096 Dec 17 23:41 . 
drwxr-xr-x 24 root  root  4096 Sep 28 20:41 .. 
drwxr-xr-x 2 $user_name $user_name 4096 Dec 17 23:41 $user_name 
drwxr-xr-x 13 vagrant vagrant 4096 Sep 28 20:42 vagrant 

Ожидаемый результат

############## 
# Host Machine 
############## 
$ whoami 
axiopisty 

############### 
# Guest Machine 
############### 
$ ls -la /home/ 
total 16 
drwxr-xr-x 4 root  root  4096 Dec 17 23:41 . 
drwxr-xr-x 24 root  root  4096 Sep 28 20:41 .. 
drwxr-xr-x 2 axiopisty axiopisty 4096 Dec 17 23:41 axiopisty 
drwxr-xr-x 13 vagrant vagrant 4096 Sep 28 20:42 vagrant 

ответ

2

Кукольный не разрешит имена переменных, когда его просто цитируется. Чтобы убедиться, что interpolation ваших имен переменных сделано, вы должны использовать "; так что в вашем кукольном файле будет работать

user { $user_name: 
    ensure => 'present', 
    comment => 'developer account', 
    home => "/home/$user_name", 
    shell => '/bin/bash', 
    uid  => 643 
} 
-> 
file{"$user_name home": 
    ensure => 'directory', 
    path => "/home/$user_name", 
    owner => "$user_name", 
    group => "$user_name" 
}