Chef - 如何在脚本中使用属性列表

时间:2016-08-18 01:55:08

标签: bash attributes chef

我是Chef的新手,我想执行一个脚本来添加系统中的用户。 我有一个名为usersinto的厨师食谱和属性:

node.default["usersinto"]["users"] = [ " user1 user2 user3 .... userN " ]

并在食谱中调用:

bash "launch-add" do
    code <<-EOH
        sh /home/user/addusers.sh "#{node["usersinto"]["users"]}"
    EOH
end

我会尝试很多东西,如果我在属性中使用&#34; [&#34 ;,脚本捕获&#34; [&#34;作为参数$ 1,如果我不使用&#34; []&#34;该脚本仅捕获第一个用户。 我怎么能这样做?

提前致谢:)

3 个答案:

答案 0 :(得分:0)

你拥有它的方式,let request = NSMutableURLRequest() request.HTTPMethod = "GET" request.URL = coverPhotoUrl // A presigned url to an image on S3 // The operation succeeds if I uncomment the NSURLSession line // and comment out the AFHTTPSessionManager line. //NSURLSession.sharedSession().dataTaskWithRequest(request) { AFHTTPSessionManager().dataTaskWithRequest(request) { date, response, error in if let error = error { Log.error?.message("request failed: \(error.localizedDescription)") } else { Log.debug?.message("request succeeded.") } } .resume() 的值是一个包含一个元素(这是一个字符串)的数组。这可能不是你想要的,要么是单个字符串,要么是多个字符串的数组。在任何一种情况下,如您所写,您需要node["usersinto"]["users"]

答案 1 :(得分:0)

您的脚本似乎接受一个参数。我无法判断该参数是单个用户还是单个用户串。如果它只接受一个用户,则需要将node["usersinto"]["users"]属性设为一个数组(在任何情况下,它看起来都应该是一个数组)。

node.default["usersinto"]["users"] = %w{user1 user2 user3} 

获得数组后,迭代执行每个用户的bash脚本。

node["usersinto"]["users"].each do |user|
    bash "launch-add" do 
       code <<-EOH 
         sh /home/user/addusers.sh #{user}
       EOH 
    end
end

如果您的脚本接受多个参数(每个参数是不同的用户)

bash "launch-add" do 
   code <<-EOH 
     sh /home/user/addusers.sh #{node['usersinto']['users'].join(' ')}
   EOH 
end

答案 2 :(得分:0)

如果您是厨师的新手,那么您应该考虑使用一些社区烹饪书来解决用户管理等常见问题。例如&#34;用户&#34; cookbook非常适合管理用户帐户

用户信息在数据包中指定,而不是属性。

实施例

可以使用chef命令

生成样本食谱
chef generate cookbook demo

创建一个名为&#34; demo&#34;可以扩展如下:

├── Berksfile
├── Berksfile.lock
├── .kitchen.yml       <-- Test kitchen file
├── metadata.rb
├── README.md
├── recipes
│   └── default.rb     <-- Recipe to be tested
└── test
    └── integration
        ├── data_bags            <-- Test data
        │   └── users
        │       ├── user1.json
        │       └── user2.json
        ├── default
        │   └── serverspec
        │       └── default_spec.rb   <-- Test
        └── helpers
            └── serverspec
                └── spec_helper.rb

测试厨房是与chefdk捆绑在一起的工具,可用于测试食谱逻辑

$ kitchen verify default-ubuntu-1404
-----> Starting Kitchen (v1.4.2)
..
..
..
       User "user1"
         should exist
         should belong to group "admins"
         should have uid 2001
         should have authorized key "ssh-rsa I AM A DUMMY KEY 1"

       User "user2"
         should exist
         should belong to group "admins"
         should have uid 2002
         should have authorized key "ssh-rsa I AM A DUMMY KEY 2"

       Finished in 0.12919 seconds (files took 0.31869 seconds to load)
       8 examples, 0 failures

       Finished verifying <default-ubuntu-1404> (0m8.42s).
-----> Kitchen is finished. (0m9.14s)

metadata.rb

&#34;用户&#34; cookbook被添加为依赖

name 'demo'
maintainer 'Mark O''Connor'
maintainer_email 'me@demo.com'
license 'all_rights'
description 'Installs/Configures demo'
long_description 'Installs/Configures demo'
version '0.1.0'

depends "users"

配方/ default.rb

#
# Cookbook Name:: demo
# Recipe:: default
#
# Copyright (c) 2016 The Authors, All Rights Reserved.

users_manage "admins"

测试/集成/默认/ serverspec / default_spec.rb

require 'spec_helper'

describe user('user1') do
  it { should exist }
  it { should belong_to_group 'admins' }
  it { should have_uid 2001 }
  it { should have_authorized_key 'ssh-rsa I AM A DUMMY KEY 1' }
end

describe user('user2') do
  it { should exist }
  it { should belong_to_group 'admins' }
  it { should have_uid 2002 }
  it { should have_authorized_key 'ssh-rsa I AM A DUMMY KEY 2' }
end

测试/集成/ data_bags /用户/ user1.json

{
  "id": "user1",
  "ssh_keys": [
    "ssh-rsa I AM A DUMMY KEY 1"
  ],
  "groups": [
    "admins"
  ],
  "uid": 2001
}

测试/集成/ data_bags /用户/ user2.json

{
  "id": "user2",
  "ssh_keys": [
    "ssh-rsa I AM A DUMMY KEY 2"
  ],
  "groups": [
    "admins"
  ],
  "uid": 2002
}