2013-05-24 12 views
6

Sono appena iniziato con puppet (e vagabondo) per impostare l'ambiente di sviluppo per il nostro team, che consiste di 8+ sviluppatori, ognuno dei quali ha la sua particolare configurazione bash, ecc. Ho installato tutto il software sul sistema per implementare rapidamente nuove macchine virtuali di sviluppo, ma non sono sicuro che sia il modo migliore per configurare l'ambiente di sviluppo per ciascun particolare utente in modo automatico (avremo diversi ambienti di sviluppo e sarebbe conveniente scrivere questa volta e sia fatta).Come configurare un ambiente bash personalizzato per utenti diversi con puppet?

Ad esempio, mi piacerebbe impostare un utente joe, clonare il repository di configurazione di Joe da github e quindi eseguire uno script in quel repository github per configurare l'ambiente per Joe. Qualche suggerimento su come fare questo per Joe e Jimmy, James, Julie, Jane, Jim, Jake e Jimbo?

Nel caso in cui il suo aiuto, le macchine di sviluppo sarà quasi certamente sistemi Ubuntu.

risposta

3

Oltre al suggerimento di @ Matt, ho creato uno custom puppet module che crea un'istanza dell'ambiente di configurazione per ciascun individuo in base alle sue preferenze github. Il modulo burattino risultante users simile a questa:

users/ 
├── manifests 
│   ├── init.pp  # base level configurations for all users 
│   ├── jake.pp  # custom setup for jake 
│   ├── james.pp  # custom setup for james 
│   ├── jane.pp  # custom setup for jane 
│   ├── jim.pp  # custom setup for jim 
│   ├── jimbo.pp  # custom setup for joe 
│   ├── jimmy.pp  # custom setup for jimmy 
│   ├── joe.pp  # custom setup for julie 
│   └── julie.pp  # custom setup for jimbo 
└── templates 

Il bocconcino rilevante è nei file di installazione personalizzati per ogni utente. Ad esempio, ecco cosa jim.pp potrebbe essere simile:

class users::jim { 

    # make sure that all base configuration in init.pp is set up first 
    require users 

    # add the user here 
    user { 'jim': 
    # comment => 'Dean Malmgren', 
    home  => '/home/jim', 
    shell  => '/bin/bash', 
    uid  => 201, 
    managehome => 'true', 
    groups  => ['sudo', 'vagrant'], 
    provider => 'useradd', 
    password => '$6$kxHLEuHW$78m3zHVLu0XUUDaU4bT.PEg./FfcloJiWml', 
    } 

    # clone the repository the first time 
    exec { 'jim-clone-dotfiles': 
    command => 'git clone git://github.com/jim/dotfiles.git && python dotfiles/create_softlinks.py', 
    cwd  => '/home/jim', 
    creates => '/home/jim/dotfiles', 
    user => 'jim', 
    group => 'jim', 
    require => [ Package['git'] ], 
    } 

    # fetch and update if jim decides to update his dotfiles repo 
    exec { 'jim-update-dotfiles': 
    command => 'git merge --ff-only origin/master && python create_softlinks.py', 
    cwd  => '/home/jim/dotfiles', 
    unless => 'git fetch && git diff --exit-code origin/master', 
    user => 'jim', 
    group => 'jim', 
    require => Exec['jim-clone-dotfiles'], 
    } 
} 
2

si potrebbe usare un fatto fantoccio nel file vagabonda per impostare il nome utente e passare questo attraverso i vostri manifesta fantoccio. Qualcosa di simile a quanto segue:

Vagrant.configure("2") do |config| 
    config.vm.provision :puppet do |puppet| 
    puppet.facter = { 
     "user_name" => ENV['USER'] 
    } 
    end 
end 

Questo sarebbe passare la corrente loggato nome utente fino al fantoccio e poi all'interno dei file manifesto è possibile utilizzare la variabile "$user_name" all'interno del vostro git comandi alla cassa il repo utenti corretti e fare qualsiasi altra correlata compiti.

+0

Questo è grande per un particolare utente in via di sviluppo sul proprio posto di lavoro. Sarebbe bello se affrontasse anche la creazione di ambienti utente per * tutti * gli utenti su macchine remote. – dino

+0

Questa risposta è stata aggiornata per includere i necessari marcatori '' 'attorno all'uso della variabile' $ user_name'. Per ulteriori dettagli, consultare http://stackoverflow.com/q/34345939/328275. – axiopisty

Problemi correlati