Spec-Zone.ru › Chef 16

ресурс команды

[править на GitHub]

Используйте command ресурс аудита Chef InSpec, чтобы протестировать произвольную команду, выполняемую в системе.

Доступность

Установка

Этот ресурс распространяется вместе с самим Chef InSpec. Вы можете использовать его автоматически.

Версия

Этот ресурс стал доступен в версии v1.0.0 InSpec.

Синтаксис

Блок ресурса command объявляет команду для выполнения, одно (или несколько) ожидаемых значений и местоположение, куда отправляется этот вывод:

describe command('command') do
  it { should exist }
  its('property') { should eq 'value' }
end

где

  • 'command' должен указать команду для выполнения
  • 'property' является одним из exit_status, stderr, или stdout
  • 'output' тестирует вывод команды, выполняемой в системе, по сравнению со значением вывода, указанным в тесте

Примеры свойств

Следующие примеры показывают, как использовать этот ресурс аудита Chef InSpec.

exit_status

Свойство exit_status тестирует код завершения для команды:

its('exit_status') { should eq 123 }

stderr

Свойство stderr тестирует результаты команды, возвращаемые в стандартной ошибке (stderr):

its('stderr') { should eq 'error' }

stdout

Свойство stdout тестирует результаты команды, возвращаемые в стандартном выводе (stdout). Следующий пример демонстрирует сопоставление вывода с помощью регулярного выражения:

describe command('echo 1') do
   its('stdout') { should match (/[0-9]/) }
end

Тестирование стандартного вывода (stdout)

describe command('echo hello') do
  its('stdout') { should eq "hello\n" }
  its('stderr') { should eq '' }
  its('exit_status') { should eq 0 }
end

Тестирование стандартной ошибки (stderr)

describe command('>&2 echo error') do
  its('stdout') { should eq '' }
  its('stderr') { should eq "error\n" }
  its('exit_status') { should eq 0 }
end

Тестирование кода завершения

describe command('exit 123') do
  its('stdout') { should eq '' }
  its('stderr') { should eq '' }
  its('exit_status') { should eq 123 }
end

Проверка существования командной оболочки

describe command('/bin/sh').exist? do
  it { should eq true }
end

Проверка отсутствия команды

describe command('this is not existing').exist? do
  it { should eq false }
end

Проверка работы базы данных PostgreSQL с выпуском RC, разработки или бета-версией

describe command('psql -V') do
  its('stdout') { should eq '/RC/' }
  its('stdout') { should_not eq '/DEVEL/' }
  its('stdout') { should_not eq '/BETA/' }
end

Проверка NTP

Следующий пример демонстрирует, как использовать ресурс аудита file, чтобы проверить, присутствуют ли файлы ntp.conf и leap-seconds, а затем ресурс command, чтобы проверить, установлен и запущен ли NTP:

describe file('/etc/ntp.conf') do
   it { should be_file }
end

describe file('/etc/ntp.leapseconds') do
  it { should be_file }
end

describe command('pgrep ntp') do
   its('exit_status') { should eq 0 }
end

Проверка WiX

WiX включает несколько инструментов — таких как candle (предварительно обрабатывает и компилирует исходные файлы в объектные файлы), light (связывает и объединяет объектные файлы в базу данных установщика) и heat (собирает файлы из различных входных форматов). Следующий пример использует массив пробелов и ресурс аудита file, чтобы проверить, присутствуют ли эти три инструмента:

%w(
  candle.exe
  heat.exe
  light.exe
).each do |utility|
  describe file("C:/wix/##{utility}") do
    it { should be_file }
  end
end

Защита конфиденциальных команд

По умолчанию команда, которая выполняется, отображается в выводе Chef InSpec. Это может быть проблематично, если команда содержит конфиденциальные аргументы, такие как пароль. Эти конфиденциальные части могут быть замаскированы путем передачи redact_regex и регулярного выражения для маскировки. Дополнительно можно использовать 2 группы захвата для точной настройки того, что маскируется.

Следующие примеры демонстрируют использование redact_regex.

# Example without capture groups
describe command('myapp -p secretpassword -d no_redact', redact_regex: /-p .* -d/) do
  its('exit_status') { should cmp 0 }
end

# Result (no capture groups used)
Command: `myapp REDACTED no_redact`
   ✔  exit_status should cmp == 0

# Example with capture groups
# Each set of parenthesis is a capture group.
# Anything in the two capture groups will not be 'REDACTED'
describe command('myapp -p secretpassword -d no_redact', redact_regex: /(-p ).*( -d)/) do
  its('exit_status') { should cmp 0 }
end

# Result (capture groups used)
Command: `myapp -p REDACTED -d no_redact`
   ✔  exit_status should cmp == 0

Для получения дополнительной информации/помощи по регулярным выражениям рекомендуется посетить RegExr

Сопоставители

Полный список доступных сопоставителей можно найти на странице сопоставителей.

exist

Сопоставитель exist проверяет, можно ли выполнить команду в системе:

it { should exist }

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/inspec/resources/command/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API