2013-05-24 35 views
6

Tôi chỉ mới bắt đầu với con rối (và lang thang) để thiết lập môi trường phát triển cho nhóm của chúng tôi, bao gồm 8 nhà phát triển, mỗi nhà phát triển có cấu hình bash cụ thể, v.v. trên hệ thống để triển khai nhanh các máy ảo mới, nhưng tôi không chắc cách tốt nhất để thiết lập môi trường phát triển cho từng người dùng một cách tự động (chúng ta sẽ có nhiều môi trường phát triển và sẽ thuận tiện để viết) điều này một lần và được thực hiện).Cách thiết lập môi trường bash tùy chỉnh cho những người dùng khác nhau với con rối?

Ví dụ: tôi muốn thiết lập người dùng joe, sao chép cấu hình repo của Joe từ github, sau đó chạy tập lệnh trong kho lưu trữ github đó để thiết lập môi trường cho Joe. Bất kỳ đề xuất nào về cách thực hiện việc này cho Joe cũng như Jimmy, James, Julie, Jane, Jim, Jake và Jimbo?

Trong trường hợp có bất kỳ trợ giúp nào, các máy phát triển sẽ gần như chắc chắn là hệ thống ubuntu.

Trả lời

3

Ngoài đề xuất của @ Matt, tôi đã tạo ra một custom puppet module để khởi tạo môi trường cấu hình cho từng cá nhân dựa trên tùy chọn github của chúng. Mô-đun con rối kết quả users trông giống như sau:

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 

Tidbit có liên quan nằm trong tệp thiết lập tùy chỉnh cho từng người dùng. Ví dụ: đây là những gì jim.pp có thể trông giống như:

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

Bạn có thể sử dụng một thực tế bù nhìn trong tệp lang thang để đặt tên người dùng và chuyển thông tin này qua tệp kê khai con rối của bạn. Giống như sau:

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

này sẽ vượt qua hiện đăng nhập vào tên người dùng thông qua để bù nhìn và sau đó trong file manifest của bạn, bạn có thể sử dụng các biến "$user_name" trong git của bạn lệnh để kiểm tra người sử dụng đúng repo và làm bất cứ liên quan khác nhiệm vụ.

+0

Điều này thật tuyệt vời cho một người dùng cụ thể phát triển trên máy trạm của riêng họ. Sẽ tốt hơn nếu nó cũng giải quyết việc xây dựng môi trường người dùng cho * tất cả * người dùng trên các máy từ xa. – dino

+0

Đã cập nhật câu trả lời này để bao gồm các dấu "' 'cần thiết xung quanh việc sử dụng biến' $ user_name'. Xem http://stackoverflow.com/q/34345939/328275 để biết thêm chi tiết. – axiopisty