Некоторые примечания к ресурсу InSpec

В этом посте будут затронуты 2 темы:

  1. Написание пользовательского ресурса InSpec и
  2. Продажа драгоценных камней как часть профиля.

Пользовательский ресурс 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.

Спасибо, что позволил мне утомить вас!