Тестовая кухня. Как я могу передать логин локального пользователя в качестве атрибута шеф-повара?

Наша среда разработки включает в себя локальные виртуальные машины, выполняющие запросы к более крупным общим ресурсам в облаке.

Он был настроен таким образом, что логин локального пользователя будет передаваться роли Chef в качестве атрибута, который используется для определения соединений SSH и БД.

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

Бродячий файл:

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

(snip)

require 'etc'
user = Etc.getlogin

(snip)

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

Во время запуска Chef содержимое /tmp/remote_user считывается следующим образом:

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

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

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

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


person invict_us    schedule 09.12.2014    source источник


Ответы (1)


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

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

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

person Martin    schedule 09.12.2014
comment
В качестве альтернативы вы можете использовать атрибуты: foo: ‹%= whoami %› для прямого перехода к имени пользователя. - person Tejay Cardon; 10.12.2014