【问题标题】:How to set up custom bash environment for different users with puppet?如何使用 puppet 为不同用户设置自定义 bash 环境?
【发布时间】:2015-12-19 00:04:17
【问题描述】:

我刚刚开始使用 puppet(和 vagrant)为我们的团队设置开发环境,该团队由 8 位以上的开发人员组成,每个开发人员都有自己特定的 bash 配置等。我已经拥有所有软件安装在系统上以快速部署新的开发虚拟机,但我不确定以自动化方式为每个特定用户设置开发环境的最佳方式(我们最终将拥有多个开发环境,这样会很方便写一次就完成了)。

例如,我想设置一个用户joe,从 github 克隆 Joe 的配置 repo,然后在该 github 存储库中运行一个脚本来为 Joe 设置环境。对于如何为 Joe 以及 Jimmy、James、Julie、Jane、Jim、Jake 和 Jimbo 执行此操作有什么建议吗?

如果有任何帮助,开发机器几乎肯定是 ubuntu 系统。

【问题讨论】:

    标签: vagrant puppet


    【解决方案1】:

    除了@Matt 的建议之外,我还创建了一个custom puppet module,它根据每个人的github 偏好实例化配置环境。生成的 puppet 模块 users 看起来像这样:

    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
    

    相关的花絮在每个用户的自定义设置文件中。例如,jim.pp 可能如下所示:

    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】:

      您可以在 vagrant 文件中使用 puppet fact 来设置用户名并将其传递给您的 puppet 清单。类似于以下内容:

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

      这会将当前登录的用户名传递给 puppet,然后在您的清单文件中,您可以在 git 命令中使用变量 "$user_name" 来检查正确的用户存储库并执行任何其他相关任务。

      【讨论】:

      • 这对于在自己的工作站上开发的特定用户来说非常有用。如果它还解决了为远程计算机上的所有用户构建用户环境的问题,那就太好了。
      • 更新了这个答案,在 $user_name 变量的使用周围包含所需的 " 标记。有关详细信息,请参阅stackoverflow.com/q/34345939/328275
      猜你喜欢
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2016-12-18
      • 1970-01-01
      • 2012-10-05
      • 2022-01-07
      • 2023-03-18
      相关资源
      最近更新 更多