Некоторые примечания к ресурсу InSpec
В этом посте будут затронуты 2 темы:
- Написание пользовательского ресурса InSpec и
- Продажа драгоценных камней как часть профиля.
Пользовательский ресурс InSpec
Пользовательский ресурс, который мы собираемся написать, предназначен для проверки наличия модулей Perl в коробке.
Отказ от ответственности: этот профиль учитывает, что установлена команда
instmodsh
и что профиль запускается в Linux (для рубиновой библиотеки PTY, используемой драгоценным камнемruby_expect
).
В любом случае, вот псевдокод:
- Используйте
instmodsh
для определения установленных модулей perl - Разберите это в массив
- Наконец, укажите операции над этим массивом.
Некоторые функции ресурса хотелось бы иметь возможность проверять на наличие perl-модулей и на то, установлены или не установлены конкретные модули. Пример блока описания из профиля:
describe perl_modules do its('content') { should include('Perl') } its('content') { should_not include('Foo') } it { should exist } end
Проверка существования с помощью it { should exist }
была прямолинейной из документации, однако заставить работать сопоставительits('content')
было не так просто. После некоторых проб и ошибок я нашел переменную класса params
типа Hash
и добавил ключ content
со значением нашего массива модулей Perl, то есть @params['content'] = modules
. Мы смогли использовать include('Perl’)
внутри блока, потому что тип значения, возвращаемого из @params['content']
, является массивом, который отвечает на метод include?
. Из этого мы можем определить, что каждый раз, когда вы хотите использовать its('x')
, вы должны иметь @params['x'] = y
в определении ресурса, и вы можете включать в блок it(s)
любые операции над возвращаемым классом.
Вот настоящий код:
Продажа драгоценных камней
Не всегда понятно, как использовать драгоценные камни в Шеф-поваре, так как есть много способов. С InSpec все немного по-другому, у вас есть ограниченные возможности, когда вы хотите гарантировать, что гем существует в системе, выполняющей профиль. Для этого пользовательского ресурса я выбрал поставщика драгоценного камня, в котором мы нуждались. Эту продажу можно выполнить, загрузив драгоценный камень в указанное место с помощью следующей команды:
gem install --install-dir libraries/vendor --no-document ruby_expect
После продажи, чтобы получить доступ к этому драгоценному камню, мы должны изменить Rubies $LOAD_PATH
, добавив все эти драгоценные камни, установленные в локальный каталог, добавив их в массив $LOAD_PATH
.
$LOAD_PATH.unshift(*Dir[File.expand_path('../vendor/gems/**/lib', __FILE__)])
Вот классное видео, объясняющее Rubies $LOAD_PATH
.
Спасибо, что позволил мне утомить вас!