Вложенные ресурсы в Chef InSpec
Можно ли использовать один ресурс внутри другого ресурса в Chef InSpec?
Пример:
describe command('su srijava') do
describe file ('/app/java/latest') do
it{ should exist }
end
end
Выдает ошибку вроде:
`method_missing': undefined method `file' for RSpec::ExampleGroups::CommandSuSriava:Class (NoMethodError)
На самом деле я хочу запустить утилиту, которая установлена у другого пользователя, и мне нужно проверить выходные данные этого сеанса и проверить их. Пример:
- Я установил Java как пользователь Srijava
- Теперь в Inspec я написал команду для проверки версии Java (Предположим, что
java -version
работает только у этого пользователя, а не как root). - если я использую
su srijava
, то я не получаю вывод обратно в корневой сеанс, и тест не проходит - Если я бегу без
su srijava
тогда моя утилита выдаст ошибку, что пользователь не SriJava
Код с su
:
describe command('su srijava ; cd /app/java; ./java --version') do
its('stdout') { should match('1.7') }
end
Код без su
:
describe command('cd /app/java; ./java --version') do
its('stdout') { should match('1.7') }
end
Как я могу это сделать?
2 ответа
Как отметил Ной, вложенные блоки описания пока не поддерживаются. Я тоже думаю, что они вам не нужны.
result = command('runcommand').stdout
filename = result + '/path'
describe file (filename) do
it{ should exist }
end
С другой стороны, вы можете использовать bash
ресурс для запуска нескольких команд. command
использует оболочку пользователя по умолчанию, bash
усиливает это. Это позволяет вам:
describe bash('su srijava ; cd /app/java; ./java --version') do
its('stdout') { should match('1.7') }
end
Нет, и это не имеет никакого смысла, потому что эти два не будут объединены даже в обычном RSpec. Если ваша проблема заключается в том, что вам нужно проверить файл как root, вы можете использовать опции sudo в InSpec. Я не уверен, почему вы хотите проверить, существует ли файл как определенный пользователь, но это не поддерживается.