Справочник по универсальным матчерам Chef InSpec
Chef InSpec использует матчеры для сравнения значений ресурсов с ожиданиями. Доступны следующие матчеры:
Вы также можете использовать любой матчер, предоставляемый RSpec::Expectations, но эти матчеры находятся вне области поддержки InSpec.
Доступны следующие поддерживаемые InSpec универсальные матчеры:
-
be- выполняет числовые сравнения -
be_in- ищет значение свойства в списке -
cmp- сравнение на равенство общего назначения (попробуйте это в первую очередь) -
eq- сравнение на равенство с учётом типа -
include- ищет ожидаемое значение в списковом свойстве -
match- ищет шаблоны в тексте с помощью регулярных выражений
См. Раздел "Изучение ресурсов Chef InSpec" на Learn Chef Rally, чтобы узнать больше о встроенных матчерах InSpec.
be
Этот матчер может быть дополнен многими операторами сравнения. Всегда убедитесь, что для этих сравнений используются числа, а не строки.
describe file('/proc/cpuinfo') do
its('size') { should be >= 10 }
its('size') { should be < 1000 }
end
cmp
В отличие от eq, cmp — это матчер для менее жёстких сравнений. Он попытается привести фактическое значение к типу, с которым вы его сравниваете. Это призвано избавить пользователя от необходимости писать преобразования типов и разрешения.
describe sshd_config do
its('Protocol') { should cmp 2 }
end
describe passwd.uid(0) do
its('users') { should cmp 'root' }
end
cmp работает следующим образом:
- Сравнение строк с числами
describe sshd_config do
# Only `'2'` works
its('Protocol') { should eq '2' }
# Both of these work
its('Protocol') { should cmp '2' }
its('Protocol') { should cmp 2 }
end
- Сравнение строк нечувствительно к регистру
describe auditd_conf do
its('log_format') { should cmp 'raw' }
its('log_format') { should cmp 'RAW' }
end
- Распознавание версий, встроенных в строки
describe package('curl') do
its('version') { should cmp > '7.35.0-1ubuntu2.10' }
end
- Сравнение массивов с одним элементом со значением
describe passwd.uids(0) do
its('users') { should cmp 'root' }
its('users') { should cmp ['root'] }
end
- Массивы строк с одним значением также могут быть сравнены с регулярным выражением
describe auditd_conf do
its('log_format') { should cmp /raw/i }
end
- Улучшенное отображение октальных сравнений
describe file('/proc/cpuinfo') do
its('mode') { should cmp '0345' }
end
expected: 0345
got: 0444
eq
Проверка точного равенства двух значений.
describe sshd_config do
its('RSAAuthentication') { should_not eq 'no' }
its('Protocol') { should eq '2' }
end
eq терпит неудачу, если типы не совпадают. Пожалуйста, имейте это в виду при сравнении значений конфигурации, которые являются числами:
its('Port') { should eq '22' } # ok
its('Port') { should eq 22 }
# fails: '2' != 2 (string vs int)
Для менее жёстких сравнений используйте cmp.
include
Проверяет, содержится ли значение в списке.
describe passwd do
its('users') { should include 'my_user' }
end
be_in
Проверяет, содержится ли элемент в списке.
describe resource do
its('item') { should be_in LIST }
end
match
Проверяет, соответствует ли строка регулярному выражению.
describe sshd_config do
its('Ciphers') { should_not match /cbc/ }
end
© 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/matchers