2014-12-09 4 views
1

Наша среда разработки включает в себя локальные виртуальные машины, которые запускают запросы к более крупным общим ресурсам в облаке.Test Kitchen - Как я могу пройти локальный вход пользователя в качестве атрибута Chef?

Он был настроен таким образом, что логин локального пользователя будет передан в роль шеф-повара как атрибут, который используется для определения соединений SSH и DB.

В настоящее время мы используем Ruby в Vagrantfile, чтобы вырвать логин и vm.provision для создания файла/tmp в файловой системе гостевой виртуальной машины. Наша роль шеф-повара для локальных виртуальных машин считывает содержимое этого файла и передает значение в атрибут.

Vagrantfile:

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

(snip) 

require 'etc' 
user = Etc.getlogin 

(snip) 

analytics.vm.provision :shell, inline: "echo #{user} > /tmp/remote_user" 

Во время выполнения шеф-повара, содержимое/TMP/REMOTE_USER читаются следующим образом:

remote_user = File.open("/tmp/remote_user", "r").read.strip 
sandbox = "_#{remote_user}" 

default_attributes "remote_user" => remote_user, 
    "sandbox" => sandbox, 

Есть ли лучший способ, чтобы добавить логин текущего пользователя, как атрибут для местного шеф-повара?

Если нет, то как я могу воспроизвести функциональность, которая была у меня в нашем старом Vagrantfile, в .kitchen.yml?

ответ

2

Test Kitchen обрабатывает .kitchen.yml через Еврорадио, так что вы можете просто поставить что-то вроде этого в файле Еврорадио:

attributes: 
    foo: <%= ENV['STUFF'] %> 

И тогда node['foo'] будет содержать $STUFF. Переключите STUFF в USER в ваш случай.

+0

В качестве альтернативы, вы можете сделать атрибуты: Foo: <% = 'whoami'%> , чтобы перейти непосредственно к имени пользователя. –