Почему мы не можем использовать только Ansible вместо Chef для проверки? - PullRequest
1 голос
/ 08 июля 2019

Ссылаясь на: http://scienceofficersblog.blogspot.com/2016/02/testing-ansible-with-inspec.html

Существует множество постов, в которых упоминается использование Chef inspec для тестирования Ansible. Но они обычно приводят пример как:

анзибль:

- hosts: all
  user: root
  tasks:
  - debug: msg="debug {{inventory_hostname}}"
  - apt: name=apache2 state=present

Шеф-повар Inspec:

impact 0.7
title "Test some simple resources"
describe package('apache2') do
    it { should be_installed }
end

Итак, если я выполню тот же блок Ansible, это даст мне уверенность в том, что пакет apache2 установлен. Точно так же есть много примеров, например, порт 80 должен быть открыт, для этого также, если мы выполним ту же самую пьесу в режиме проверки (пробный запуск), тогда я также узнаю, прослушивает порт 80 или нет.

Итак, почему мы не можем использовать сам Ansible? и какова точная необходимость Chef inspec, когда мы можем сделать почти все, используя Ansible?

Ответы [ 2 ]

1 голос
/ 12 июля 2019

В основном это потому, что примеры очень очень очень просты.

Для того же самого ANSIBLE блока я предполагаю, что вы ожидаете, что Apache будет установлен, запущен и прослушивает порт 80, лучший пример inspec будет:

impact 0.7
title "Test some simple resources"
describe package('apache2') do
    it { should be_installed }
end
describe service('apache2') do
    it { should be_installed }
    it { should be_enabled }
    it { should be_running }
end
describe port(80) do
  it { should be_listening }
  its('processes') {should include 'apache2'}
end

Но главное в том, что кодирование желаемой конфигурации и тестирование для обеспечения того, что было запланировано отдельно, допускают подход TDD.

У Inspec есть еще один интересный момент на стороне форматера,где он может возвращать аудиторскую информацию в различном формате.

В конце концов, нет ничего, требующего, чтобы Inspec проверил Ansible, это практика, чтобы получить отдельные «тесты» и «действия», поэтому ошибка в ANSIBLE-кодезаставить apache прослушивать порт 800 не будет поймано ansible, поскольку это будет то, что вы просили его установить (и это нормально), разделив их, убедитесь, что тест не получен кодом действия.

1 голос
/ 09 июля 2019

Я не уверен, почему люди думают, что для этого необходим Chef Inpec.В Ansible есть модуль assert, который позволяет гарантировать, что все оценивается как истинное, поэтому вы эффективно регистрируете выходные данные задачи и утверждаете, что все так, как вы ожидаете.

https://docs.ansible.com/ansible/latest/modules/assert_module.html

Фактически,так пишутся почти все тесты интеграции Ansible * https://github.com/ansible/ansible/tree/devel/test/integration/targets

...