2015-01-20 2 views
0

У меня есть рецепт шеф-повара, написанный для создания трех пользователей, добавление их в группу и запись их в файл sudoers.Файл атрибутов шеф-повара

group "usergroup" do 
    gid 2000 
end 

print "User1 or User2 or User3?" 
env=$stdin.gets.chomp 
case env 
when "User1" 
    user "User1" do 
    uid 150 
    gid "usergroup" 
    home "/home/User1" 
    shell "/bin/bash" 
    end 

    directory "/home/User1" do 
    owner "User1" 
    group "usergroup" 
    mode "0777" 
    action :create 
    end 

    execute "echo" do 
    command "echo 'User1 ALL=(ALL) ALL' >> /etc/sudoers" 
    not_if "grep -F 'User1 ALL=(ALL) ALL' /etc/sudoers" 
    end 

when "User2" 
    user "User2" do 
    uid 250 
    gid "usergroup" 
    home "/home/User2" 
    shell "/bin/bash" 
    end 

    directory "/home/User2" do 
    owner "User2" 
    group "usergroup" 
    mode "0777" 
    action :create 
    end 

    execute "echo" do 
    command "echo 'User2 ALL=(ALL) ALL' >> /etc/sudoers" 
    not_if "grep -F 'User2 ALL=(ALL) ALL' /etc/sudoers" 
    end 

when "User3" 
    user "User3" do 
    uid 350 
    gid "usergroup" 
    home "/home/User3" 
    shell "/bin/bash" 
    end 

    directory "/home/User3" do 
    owner "User3" 
    group "usergroup" 
    mode "0777" 
    action :create 
    end 

    execute "echo" do 
    command "echo 'User3 ALL=(ALL) ALL' >> /etc/sudoers" 
    not_if "grep -F 'User3 ALL=(ALL) ALL' /etc/sudoers" 
    end 
end 

Я новенькая Chef, и мне нужна помощь в написании подходящего файла атрибутов для этого рецепта (/cookbook/User/attributes/default.rb). Я пробовал все, что знаю, но для меня ничего не получается. Также я хотел бы знать, могут ли инструкции case быть включены в файл атрибута.

Примечание: Я работаю поваром в местном режиме.

+0

Я не уверен, что вы пытаетесь выполнить. Шеф-повар Sidenote не нацелен на интерактивный процесс. Если вы хотите создать три пользователя в цикле, это нормально. Если вам нужны атрибуты, что бы вы поместили в атрибуты (имена пользователей? Uid и т. Д.) – Tensibai

+0

Это именно то, что я пытаюсь задать. Я не знаю, что включить в атрибуты. Я создал интерактивный процесс только сейчас. Я удалю его позже из рецепта. Я просто хочу знать, как я должен написать файл атрибутов для рецепта, подобного этому. Или я должен сам изменить рецепт? –

+0

Хорошо, см. Атрибут как переменную, какие свойства вы хотели бы быть переменными? Я могу дать ответ, но я действительно не уверен, что это то, что вы хотите. Может быть, вы можете объяснить, каков ваш ожидаемый результат. – Tensibai

ответ

0

в atrtibutes/default.rb:

default['myusers'] = ['user1','user2','user3'] 
default['mygroup'] = "usergroup" 
default['myenv'] = 2 #no quotes to keep an integer 

recipe/default.rb в:

group node['mygroup'] do 
    gid 2000 
end 

currentUser = node['myusers'][node['myenv'] - 1] #arrays start at 0, doing -1 for 2 pointing to second user 
user currentUser do 
    gid node['mygroup'] 
    home "/home/#{currentUser}" 
end 
execute "sudoers for #{currentUser}" do 
    command "echo '#{currentUser} ALL=(ALL) ALL' >> /etc/sudoers" 
    not_if "grep -F '#{currentUser} ALL=(ALL) ALL' /etc/sudoers" 
end 

Вы можете воспользоваться sudoers поваренной книги, которая может maange, что для вас, но придерживаться ваших требований.

+0

Спасибо Tensibai :-) Кроме того, есть ли способ, которым я могу использовать переменную env в файле атрибутов? Мне нужно будет создать переднюю часть позже, чтобы принимать имена пользователей из формы. –

+0

Я не понимаю смысла в этом ... Создание только одного из трех пользователей? – Tensibai

+0

По одному, да. Вот почему заявление дела. –