ресурс habitat_services
Используйте ресурс аудита InSpec habitat_service (единственное число) для проведения глубокого аудита одного сервиса.
Используйте ресурс аудита habitat_services (множественное число) InSpec для перечисления сервисов Habitat и выполнения массовых операций.
Доступность
Статус: ЭКСПЕРИМЕНТАЛЬНЫЙ
Этот ресурс, как и все ресурсы пакета inspec-habitat, находится на ранних стадиях исследования и разработки. Функциональность может быть неисправной, неполной или удалена в будущем. Если вы заинтересованы в помощи этому проекту, присоединяйтесь к обсуждению или вносите свой вклад в код в проекте inspec-habitat.
Подключение к Habitat
Чтобы настроить inspec для связи с Chef Habitat, убедитесь, что вы следуете инструкциям по настройке параметров подключения. Это предотвратит ошибки «неподдерживаемая платформа».
Примеры
Убедитесь, что есть 2 сервиса с ожидаемыми именами
describe habitat_services do
its('count') { should cmp 2 }
its('names') { should include 'httpd' }
its('names') { should include 'memcached' }
end
Убедитесь, что все работающие сервисы были обновлены после 1 января 2018 года
describe habitat_services.where { release <= '20180101000000' } do
it { should_not exist }
end
Убедитесь, что gcc не является зависимостью ни одного сервиса
# One way - list all services, insist none have a dependency on gcc
describe habitat_services do
its('dependency_names') { should_not include 'core/gcc' }
end
# Another way - list all services with a dependency on gcc, insist there are none
describe habitat_services.where { dependency_names.include?('core/gcc') } do
it { should_not exist }
end
Найдите сервисы, а затем изучите их подробно с помощью habitat_service
# Use the plural resource as a data lookup (not as a test)...
habitat_services.where { origin != 'core' }.habitat_service_params.each do |params|
# ... then use the singular resource to do in-depth testing
describe habitat_service(params) do
its('release') { should_not be_standalone }
end
end
Ограничения
Доступ через API и командную строку
Habitat предоставляет некоторые данные через командную строку (CLI) и другие данные через API шлюза HTTP. Для использования всех функций этого ресурса, используйте набор учетных данных, который включает API. Ограниченные данные доступны через командную строку. Более подробную информацию см. в документации train-habitat.
Если вы используете интерфейс командной строки без API, недоступные свойства вернут пустые массивы или nil, а недоступные критерии фильтра никогда не будут соответствовать. Подробную информацию см. в описании каждого свойства и критерия фильтра.
Доступность
Установка
Этот ресурс находится в пакете ресурсов inspec-habitat. Вы можете использовать ресурс, установив зависимость профиля InSpec от пакета ресурсов. См. инструкции inspec-habitat.
Версия
Этот ресурс впервые стал доступен в версии 0.1.0 пакета ресурсов.
Параметры ресурса
Параметры ресурса — это аргументы, передаваемые ресурсу в коде управления.
Этот ресурс не принимает параметры ресурса, что типично для ресурсов во множественном числе.
Критерии фильтрации
Критерии фильтрации используются для выбора сервисов, которые вы хотите изучить. Если критерии фильтрации не используются, выбираются все сервисы.
dependency_names
Массив строк в формате origin/name. Каждая строка — это полное имя зависимости сервиса, по которому выполняется фильтрация.
Требуется подключение к API; недоступно (никогда не соответствует) через CLI.
describe habitat_services.where { dependency_names.include?('core/gcc') } do
it { should_not exist }
end
name
Строка. (Неполное) имя сервиса, рассматриваемого в текущий момент.
# No services named *ftp* permitted
describe habitat_services.where(name: /ftp/) do
it { should_not exist }
end
origin
Строка. Название источника, который создал пакет, который поддерживает рассматриваемый сервис.
# Examine only services released by Chef
describe habitat_services.where(origin: 'chef') do
its('topologies') { should_not include 'standalone' }
end
release
Строка. 14-значное временное значение в формате YYYYMMDDHHMmmSS. Временная метка отражает время выпуска пакета, который поддерживает сервис. Эти строки можно сортировать и сравнивать.
# Examine packages older than Jan 1 2018
describe habitat_services.where { release < '20180101000000' } do
its('update_strategies' ) { should_not include 'none' }
end
# Examine packages older than 1 year
describe habitat_services.where { Date.parse(release[0..7]) < Date.today - 365 } do
its('update_strategies' ) { should_not include 'none' }
end
# Another way
describe habitat_services.where { release < (Date.today - 365).strftime('%Y%m%d000000') } do
its('update_strategies' ) { should_not include 'none' }
end
topology
Строка, отражающая топологию сервиса. Значения включают standalone и leader (для лидера-ведомого). См. документацию Habitat для понимания последствий этих значений.
# HA or the highway
describe habitat_services.where(topology: 'standalone') do
it { should_not exist }
end
update_strategy
Строка, отражающая способ обновления программного пакета, который поддерживает сервис. Значения включают none, rolling, и at-once. См. документацию Habitat для понимания последствий этих значений.
Требуется подключение к API; недоступно (никогда не соответствует) через CLI.
# No YOLO
describe habitat_services.where(update_strategy: 'at-once') do
it { should_not exist }
end
Свойства
Используйте свойства, чтобы создавать тесты, сравнивающие ожидаемое значение с фактическим значением.
count
Число. Количество сервисов, соответствующих критериям фильтрации.
# Expect 12 total
describe habitat_services do
its(count) { should cmp 12 }
end
describe habitat_services.where(update_strategy: 'at-once') do
it { should_not exist }
its(count) { should cmp 0 } # Same as `should_not exist`
end
dependency_names
Массив строк в формате origin/name. Каждая строка — это полное имя зависимости сервиса, выбранного критериями фильтрации. Этот список дедублирован.
Требуется подключение к API; недоступно (всегда пустой массив) через CLI.
describe habitat_services do
its('dependency_names') { should_not include 'core/gcc' }
end
habitat_service_params
Хэш. Возвращает набор параметров, которые можно передать напрямую habitat_service (единственное число), чтобы загрузить отдельный сервис для детального анализа.
# Use the plural resource as a data lookup (not as a test)...
habitat_services.where { origin != 'core' }.habitat_service_params.each do |params|
# ... then use the singular resource to do in-depth testing
describe habitat_service(params) do
its('release') { should_not be_standalone }
end
end
names
Массив строк. Неполное имя сервиса, например, ‘httpd’. Этот список дедублирован, хотя имя почти всегда уникально.
describe habitat_services do
its('names') { should include 'httpd' }
its('names') { should include 'memcached' }
its('names') { should_not include 'telnetd' }
end
origins
Массив строк. Названия источников, создавших пакеты, поддерживающие сервисы, которые соответствуют запросу. Этот список дедублирован.
# Only allow core and mycorp-packaged services
describe habitat_services do
its('origins') { should include 'core' }
its('origins') { should include 'mycorp' }
# Advanced usage - count an array-valued property
its('origins', 'count') { should cmp 2 }
end
releases
Массив строк. Каждая строка — 14-значное временное значение в формате YYYYMMDDHHMmmSS. Временная метка отражает время выпуска пакета, который поддерживает сервис. Эти строки можно сортировать и сравнивать. Этот список дедублирован.
# We had a bad Monday
describe habitat_services do
its('releases') { should_not include '20180325000000' }
end
topologies
Массив строк, отражающих топологию сопоставленных сервисов. Значения включают standalone и leader (для лидера-ведомого). См. документацию Habitat для понимания последствий этих значений. Этот список дедублирован.
describe habitat_services do
its('topologies') { should_not include 'standalone' }
end
update_strategies
Массив строк, отражающих способ обновления программного пакета, поддерживающего сервисы, соответствующие критериям фильтра. Значения включают none, rolling, и at-once. См. документацию Habitat для понимания последствий этих значений. Этот список дедублирован.
Требуется подключение к API; недоступно (никогда не соответствует) через CLI.
# No YOLO
describe habitat_services do
its('update_strategies') { should_not include 'at-once' }
end
Сопоставители
Используйте сопоставители, чтобы создавать тесты, которые проверяют вопрос «истина» или «ложь».
InSpec включает несколько универсальных сопоставителей.
Этот ресурс не определяет никаких специфичных для ресурса сопоставителей.
© 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/habitat_services/