Вложенные ресурсы в 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. Я не уверен, почему вы хотите проверить, существует ли файл как определенный пользователь, но это не поддерживается.

Другие вопросы по тегам