แแแฃแแแ แฏแแก แงแแแแแก!
แแ แแแฃแจแแแ DevOps-แแก แแแแแแ แแ แกแแกแขแฃแแ แแก แแแฏแแแจแแแก แกแแ แแแกแจแ.
Ostrovok.ru-แแ แฉแแแ แแแงแแแแแ ansible-แก, แ แแแแ แช แแแแคแแแฃแ แแชแแแก แแแแแฏแแ แก. แชแแขแ แฎแแแก แฌแแ, แ แแแแแแก แขแแกแขแแ แแแแก แแฃแชแแแแแแแแแแแ แแแแแแแ, แแแแ แแ, แ แแแแ แช แแฆแแแฉแแแ, แแแแกแแแแก แแ แช แแกแ แแแแ แ แแแกแขแ แฃแแแแขแแ - แงแแแแแแ แแแแฃแแแ แฃแแ, แแแแแ, แแ แแก Molecule Framework, แแแแขแแ แแแแแแฌแงแแแขแแ แแแกแ แแแแแงแแแแแ. แแแแ แแ แแฆแแแฉแแแ, แ แแ แแแกแ แแแแฃแแแแขแแชแแ แแฃแแก แแแแ แฎแแคแแแแแ. แฉแแแ แแแ แแแแแแแ แกแแแแแ แแกแแ แแแขแแแฃแ แ แกแแฎแแแแซแฆแแแแแแ แ แฃแกแฃแ แแแแแ, แแแแขแแ แแแแแแฌแงแแแขแแ แแแแแฌแแ แ แแก แกแขแแขแแ.
แแแแแแฃแแ
แแแแแ แขแแแแแฃแแ แแฆแฌแแ แ: แแแแแแฃแแ แฅแแแแก แแแแแแแแก แแฅแแแ แแแแ แแแแแแแแฃแ แแแแขแคแแ แแแแ (แฆแ แฃแแแแ, แแแ แขแฃแแแฃแ แ แแแแฅแแแ, แแแแขแแแแแ แ; แแแแแขแแแแแ แแแคแแ แแแชแแแกแแแแก แแฎแแแแ แกแแฅแชแแ
แแฎแแ แฃแคแ แ.
แชแแขแ แแแแ แแ
แแแแแแฎแแแแ แแแแแแฃแแแก แแ แ แซแแ แแแแแ แแ แแแฃแแ: แกแชแแแแ แ แแ แแ แแแแแ แ.
แกแชแแแแ แ
แกแชแแแแ แ แจแแแชแแแก แแฆแฌแแ แแก, แแฃ แ แ, แกแแ, แ แแแแ แแ แ แ แแแแแแแแแแ แแแแ แจแแกแ แฃแแแแแ. แแ แ แ แแแก แจแแแซแแแแ แฐแฅแแแแแก แ แแแแแแแแ แกแแ แแแขแ แแ แแแแแแฃแแ แแ แแก แแแ แแฅแขแแ แแ แแแแแ <role>/molecule/<scenario>
, แ แแแแแแช แจแแแชแแแก แขแแกแขแแกแแแแก แกแแญแแ แ แแแฅแแแแแแแแแก แแฆแฌแแ แแก. แกแแ แแแขแ แฃแแแ แแงแแก แฉแแ แแฃแแ default
, แ แแแแแแช แแแขแแแแขแฃแ แแ แจแแแฅแแแแแ, แแฃ แ แแแก แแแแแแฃแแแ แแแแฌแงแแแ. แจแแแแแแ แกแแ แแแขแแแแก แกแแฎแแแแแ แแฅแแแแแแ แแแแแแแแแแฃแแ.
แกแแ แแแขแจแ แขแแกแขแแ แแแแก แแแฅแแแแแแแแแก แแแแแแแแแแ แแแ แ.แฌ matrixแแ แแแแฃแแแกแฎแแแแแ แแ แแก:
(แแขแแแแแ แแแแแจแแฃแแแ ?
, แแแแฃแแแกแฎแแแแแ แแแแแขแแแแแฃแแ แแฃ แแ แแ แแก แแแแแแแแฃแแ แแแแฎแแแ แแแแแก แแแแ )
lint
- แแแจแแแแฃแแ แแแขแ แ. แแแแฃแแแกแฎแแแแแ แแแแแแงแแแแแyamllint
ะธflake8
,destroy
- แแแแแแฃแแแก แแแแ แแแจแแแแแแแ แจแแแแฎแแแแแแแก แฌแแจแแ (แแกแแแแก แแ แกแแแแแแก แจแแแแฎแแแแแจแ),dependency
? - แแแแแชแแแแ แ แแแแก แแแแแแ แฃแแ แแแแแแแแแแฃแแแแแก แแแงแแแแแ,syntax
- แ แแแแก แกแแแขแแฅแกแแก แจแแแแฌแแแแ แแแแแงแแแแแแansible-playbook --syntax-check
,create
- แแแแแแแแแก แจแแฅแแแ,prepare
? - แแแกแขแแแชแแแก แแแแแแแแแ; แแแแแแแแแ, แจแแแแแฌแแแ/แแแแแแกแขแแแแ แแ python2converge
- แขแแกแขแแ แแแแแ แกแแแแแแจแ แฌแแแแแก แแแจแแแแ,idempotence
- แกแแแฅแขแแแแแก แแแแแขแแแ แแแ แแแแแขแแแชแแแก แขแแกแขแแกแแแแก,side_effect
? - แแแฅแแแแแแแแ, แ แแแแแแแช แแแ แแแแแ แแ แแ แแก แแแแแแจแแ แแแฃแแ แ แแแแแ, แแแแ แแ แแฃแชแแแแแแแแ แขแแกแขแแแแกแแแแก,verify
- แแแฆแแแฃแแ แแแแคแแแฃแ แแชแแแก แขแแกแขแแแแก แแแจแแแแ แแแแแงแแแแแแtestinfra
(แแแแฃแแแกแฎแแแแ) /goss
/inspec
,cleanup
? - (แแฎแแแ แแแ แกแแแ) - แฃแฎแแจแแ แ แแ แแแฅแแแ, แแแแแแฃแแแ แแแแแ แแแแแฃแแ แแแ แ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก "แแแฌแแแแแ",destroy
- แแแกแขแแแชแแแก แฌแแจแแ.
แแก แแแแแแแแแแ แแแ แแแแชแแแก แฃแแแขแแก แจแแแแฎแแแแแแก, แแแแ แแ แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แจแแแซแแแแ แจแแแชแแแแแก.
แแแแแแฃแแ แแแแแแฆแแแจแแฃแแ แแแแแฏแ แจแแแซแแแแ แแแแฎแแ แชแแแแแแก แชแแแแ molecule <command>
. แแแแ แแ แฃแแแ แแแแกแแแแแก, แ แแ แแแแแแฃแแ แแกแแแ cli-แแ แซแแแแแแกแแแแก แจแแแซแแแแ แแ แกแแแแแแแก แแแฅแแแแแแแแแก แกแแแฃแแแ แ แแแแแแแแแแ แแแ, แ แแแแแแช แจแแแแซแแแแ แแแแแแ แจแแกแ แฃแแแแแ molecule matrix <command>
. แแแแแแแแแ, แแ แซแแแแแแก แแแจแแแแแกแแก converge
(แกแแขแแกแขแ แกแแแแแแจแ แฌแแแแแก แแแจแแแแ), แจแแกแ แฃแแแแแ แจแแแแแแ แแแฅแแแแแแแแ:
$ molecule matrix converge
...
โโโ default # ะฝะฐะทะฒะฐะฝะธะต ััะตะฝะฐัะธั
โโโ dependency # ัััะฐะฝะพะฒะบะฐ ะทะฐะฒะธัะธะผะพััะตะน
โโโ create # ัะพะทะดะฐะฝะธะต ะธะฝััะฐะฝัะฐ
โโโ prepare # ะฟัะตะดะฝะฐัััะพะนะบะฐ ะธะฝััะฐะฝัะฐ
โโโ converge # ะฟัะพะณะพะฝ ะฟะปะตะนะฑัะบะฐ
แแ แแแฅแแแแแแแแแก แแแแแแแแแแ แแแแก แ แแแแฅแขแแ แแแ แจแแกแแซแแแแแแแ. แแฃ แ แแแแ แกแแแแแ แฃแแแ แแแแแแแแฃแแแ, แแก แแแแแขแแแแแฃแแ แแฅแแแแ. แแแแแแแแ แ แแแแแแแ แแแแ, แแกแแแ แ แแแแ แช แแแกแขแแแชแแแแแก แแแแคแแแฃแ แแชแแ, แแแแแแฃแแ แแแแฎแแแก แแแ แแฅแขแแ แแแจแ $TMPDIR/molecule/<role>/<scenario>
.
แแแแแฏแแแแก แแแแแขแแแ ?
แจแแแแซแแแแ, แแฆแฌแแ แแ แกแแกแฃแ แแแแ แแแฅแแแแแแแแ ansible-playbook แคแแ แแแขแจแ แแ แแแแแแแแ แคแแแแแก แกแแฎแแแ แแแแแฏแแก แแแฎแแแแแ: prepare.yml
/side_effect.yml
. แแแแแ แแ แคแแแแแแก แแแแแแฃแแ แแฅแแแแ แกแแ แแแขแแก แกแแฅแแฆแแแแแจแ.
แแซแฆแแแ
แแซแฆแแแ แแ แแก แแ แแแฃแแ, แกแแแแช แแฅแแแแแ แขแแกแขแแก แแแกแขแแแชแแแแ.
แกแขแแแแแ แขแฃแแ แแ แแแแแ แแแแก แกแแ, แ แแแแแแแกแแแแกแแช Molecule-แก แแฅแแก แจแแแแแแแแ แแแแ แแ แแก แจแแแแแแ: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
แฃแแแขแแก แจแแแแฎแแแแแจแ, แจแแแแแแแแ แแ แแก แคแแแแแแ create.yml
ะธ destroy.yml
แกแแ แแแขแแก แกแแฅแแฆแแแแแจแ, แ แแแแแแช แแฆแฌแแ แก แแแกแขแแแชแแแก แจแแฅแแแแก แแ แฌแแจแแแก, แจแแกแแแแแแกแแ.
แแแแแแแแแแกแแ Docker แแ Vagrant, แ แแแแแ แแแ แแแแฃแแแแแแ แฃแ แแแแ แแฅแแแแแแ แจแแแซแแแแ แแแฎแแแก แแแแแฎแกแแแแแฃแแ แคแแแแแแแก แแแ แแจแ.
แฆแแ แก แแแแแแแ แแแฃแแ แแ แแแแแ แแก แฎแแแแแกแแ, แ แแแแแ แแฃ แแก แแแแแแงแแแแแ แคแแแแแแจแ แแแกแขแแแชแแแก แจแแกแแฅแแแแแแ แแ แฌแแจแแแกแแแแก, แแฆแฌแแ แแแแ แแฎแแแแ แแแกแขแแแชแแแแแก แแแแคแแแฃแ แแชแแแ แแฃแจแแแแ, แแแแแ แฉแแแ แฃแแแ แแฆแฌแแ แแก แแแแแแแ แแ.
แแแแฃแแแกแฎแแแแ แแ แแแแแ แ แแ แแก Docker.
แแฎแแ แแแแแ แแแแแแแแแ แแ แแฅแขแแแแแ แแ แแแแแแฎแแแแ แแฅ แจแแแแแแแ แแแฎแแกแแแแแแแแแ.
แแแชแแแแแแ
แ แแแแ แช "แแแแแ แฏแแแ แกแแแงแแ แ", แแแแแ แจแแแแแแฌแแแ แแแ แขแแแ nginx แแแกแขแแแแชแแแก แ แแแ. แแแแแ, แแ แแแแแ แแ แแแแ แฉแแแ แแแแแ แ - แแคแแฅแ แแ, แแฅแแแแแแ แฃแแแขแแกแแแแก แแฅแแก แแก แแแแแกแขแแแแ แแแฃแแ (แแ แแแฎแกแแแแแ, แ แแ แแแแแ แ แแแแฃแแแกแฎแแแแ แแ แแแแแ แแ).
แแแแแแแแแ virtualenv
แแ แแแแแแกแขแแแแ แแ แแแกแจแ molecule
:
> pip install virtualenv
> virtualenv -p `which python2` venv
> source venv/bin/activate
> pip install molecule docker # molecule ัััะฐะฝะพะฒะธั ansible ะบะฐะบ ะทะฐะฒะธัะธะผะพััั; docker ะดะปั ะดัะฐะนะฒะตัะฐ
แจแแแแแแ แแแแแฏแ แแ แแก แแฎแแแ แ แแแแก แแแแชแแแแแแแชแแ.
แแฎแแแ แ แแแแก, แแกแแแ แ แแแแ แช แแฎแแแ แกแแ แแแขแแก แแแแชแแแแแแแชแแ แฎแแ แชแแแแแแแ แแ แซแแแแแแก แแแแแงแแแแแแ molecule init <params>
:
> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
โโโ README.md
โโโ defaults
โโโ handlers
โโโ meta
โโโ molecule
โโโ tasks
โโโ vars
6 directories, 1 file
แแก แขแแแแฃแ แ แแแกแแแแแฃแ แ แ แแแ แแฆแแแฉแแแ. แแแ แแ แแแแกแ, CLI แแแแแแฃแแแแแแ แงแแแแ แฃแ แแแแ แแฅแแแแแแ แฎแแแแ แ แแแแก แซแแ แแแแ.
แแแแฎแแ, แ แ แแ แแก แ แแแแแแก แแแ แแฅแขแแ แแแจแ:
> tree molecule/default/
molecule/default/
โโโ Dockerfile.j2 # Jinja-ัะฐะฑะปะพะฝ ะดะปั Dockerfile
โโโ INSTALL.rst. # ะะตะผะฝะพะณะพ ะธะฝัะพัะผะฐัะธะธ ะพะฑ ัััะฐะฝะพะฒะบะต ะทะฐะฒะธัะธะผะพััะตะน ััะตะฝะฐัะธั
โโโ molecule.yml # ะคะฐะนะป ะบะพะฝัะธะณััะฐัะธะธ
โโโ playbook.yml # ะะปะตะนะฑัะบ ะทะฐะฟััะบะฐ ัะพะปะธ
โโโ tests # ะะธัะตะบัะพัะธั ั ัะตััะฐะผะธ ััะฐะดะธะธ verify
โโโ test_default.py
1 directory, 6 files
แแแแแ แแแแแแแแแแแแ แแแแคแแแฃแ แแชแแ molecule/default/molecule.yml
(แจแแชแแแแแ แแฎแแแแ แแแแแ แแก แกแฃแ แแแ):
---
dependency:
name: galaxy
driver:
name: docker
lint:
name: yamllint
platforms:
- name: instance
image: centos:7
provisioner:
name: ansible
lint:
name: ansible-lint
scenario:
name: default
verifier:
name: testinfra
lint:
name: flake8
แแแแแแแแแแฃแแแแ
แแก แแแแงแแคแแแแแ แแฆแฌแแ แก แแแแแแแแแแฃแแแแแก แฌแงแแ แแก.
แแแ แแแแขแแแแ:
Shell แแ แแก แแฎแแแแ แแ แซแแแแแแก แญแฃแ แแ, แ แแแแแแช แแแแแแงแแแแแ แแ แจแแแแฎแแแแแจแ, แแฃ แแแแแฅแขแแแ แแ แแแแฅแ แแแแแ แแ แแแคแแ แแแก แแฅแแแแก แกแแญแแ แแแแแแก.
แแฅ แแแแฎแแแก แแ แแแแฉแแ แแแแ, แกแแแแแ แแกแแ แแ แแก แแฆแฌแแ แแแ
แแซแฆแแแ
แแซแฆแแแแก แกแแฎแแแ. แฉแแแแ แแแแแ แแ.
แกแแชแแแ
แแแแขแแ แ แแแแแแแขแแ.
แแแแคแแแฃแ แแชแแแก แแ แแแฌแแแจแ แกแแกแแ แแแแแ แแแ แแแแขแแแแ yamllint-แแกแแแแก แแแแคแแแฃแ แแชแแแก แคแแแแแก แแแแแแแแแก แจแแกแแซแแแแแแแ, แแแ แแแแก แชแแแแแแแแก แแแแแแแแแแ แแ แแแแขแแ แแก แแแแแ แแแ:
lint:
name: yamllint
options:
config-file: foo/bar
env:
FOO: bar
enabled: False
แแแแขแคแแ แแแแแก
แแฆแฌแแ แก แแแกแขแแแชแแแแแก แแแแคแแแฃแ แแชแแแก.
แแแแแ แแก, แ แแแแ แช แแ แแแแแ แแก แจแแแแฎแแแแแจแ, แแแแแแฃแแ แแแแแแแ แแแแ แแ แแแแงแแคแแแแแแจแ แแ แกแแแก แแแแแแฃแแ แแแแแแแขแ แฎแแแแแกแแฌแแแแแแ Dockerfile.j2
แ แแแแ แช แชแแแแแ item
.
แแซแฆแแแแก แจแแแแฎแแแแแจแ, แ แแแแแแช แแแแแฎแแแก create.yml
ะธ destroy.yml
, แแแแงแแคแแแแแ แฎแแแแแกแแฌแแแแแแ แแแแจแ แ แแแแ แช molecule_yml.platforms
, แแ แแแกแแ แแแแแแ แแแแแ แฃแแแ แแฆแฌแแ แแแแ แแ แคแแแแแแจแ.
แแแแก แแแแ, แ แแ แแแแแแฃแแ แฃแแ แฃแแแแแงแแคแก แแแกแขแแแชแแแแแก แแแแขแ แแแก แชแแแกแแฎแแ แแแแฃแแแแแ, แจแแกแแซแแ แแแ แแแแขแ แแแแก แกแแ แแกแแแ แฃแแแ แแแซแแแแแ แแฅ. แแแแแ แแกแแแแก, แแแแแแแแแ, แแแแฃแแ แแแแแแงแแแแแ
แแกแแแ แจแแแแซแแแแ แแแแแแ แกแฎแแแแแกแฎแแ แแ แแแแแ แแแแก แแแแแงแแแแแแก แแแแแแแแแแ
แจแแชแแแแแ แแฅ แชแแแขแ: 7 on ubuntu.
แแแแฌแแแแแแแ
โแแแแฌแแแแแแแโ - แกแฃแแแแฅแขแ, แ แแแแแแช แแแ แแแแก แแแกแขแแแชแแแแก. Molecule-แแก แจแแแแฎแแแแแจแ, แแก แจแแกแแซแแแแแแแ, แกแฎแแแแแก แแฎแแ แแแญแแ แ แแ แแ แแก แแแแแแแแแ, แแแแขแแ แแ แแแแงแแคแแแแแแก แจแแแซแแแแ แแฌแแแแก แแแแแแ แฃแแ แแแคแแ แแแแแฃแแ แแแแคแแแฃแ แแชแแ แกแแคแ แแฎแแแแ.
แแฅ แจแแแแซแแแแ แแแแ แ แ แแ แแแแแแแแ แแขแแ, แแ แแแแแแงแแค แแแแแแ แแฃแแฅแขแแแก, แฉแแแ แแแ แแ:
- แกแแแแแแจแ แฌแแแแแแ: แจแแแแซแแแแ แแแฃแแแแแ แ แแแแแ แกแแแแแแจแ แฌแแแแแแ แฃแแแ แแงแแก แแแแแงแแแแแฃแแ แแแ แแแแฃแ แแขแแแแแแ.
provisioner:
name: ansible
playbooks:
create: create.yml
destroy: ../default/destroy.yml
converge: playbook.yml
side_effect: side_effect.yml
cleanup: cleanup.yml
provisioner:
name: ansible
config_options:
defaults:
fact_caching: jsonfile
ssh_connection:
scp_if_ssh: True
- แแแแจแแ แ_แแคแชแแแแ: แแแ แแแแขแ แแแ
แแแแจแแ แ
provisioner:
name: ansible
connection_options:
ansible_ssh_common_args: "-o 'UserKnownHostsFile=/dev/null' -o 'ForwardAgent=yes'"
- แแแ แแแแขแ แแแ: Ansible แแแ แแแแขแ แแแ แแ แแแ แแแแก แชแแแแแแแ
provisioner:
name: ansible
options:
vvv: true
diff: true
env:
FOO: BAR
แกแชแแแแ แ
แกแแ แแแขแแก แแแแแแแแแแ แแแแก แแแกแแฎแแแแแ แแ แแฆแฌแแ แ.
แแฅแแแ แจแแแแซแแแแ แจแแชแแแแแ แแแแแกแแแแ แ แแ แซแแแแแแก แแแแฃแแแกแฎแแแแ แแแฅแแแแแแแก แแแขแ แแชแ แแแแแแจแแก แแแแแขแแแแ <command>_sequence
แแ แ แแแแ แช แฆแแ แแแฃแแแแ, แฉแแแ แแแญแแ แแแแ แแแแแฏแแแแก แกแแแก แแแแกแแแฆแแ แแ.
แแแฅแแแ, แแแแแแ แจแแแชแแแแแ แแแฅแแแแแแแแแก แแแแแแแแแแ แแแ playbook run แแ แซแแแแแแก แแแจแแแแแกแแก: molecule converge
# ะธะทะฝะฐัะฐะปัะฝะพ:
# - dependency
# - create
# - prepare
# - converge
scenario:
name: default
converge_sequence:
- create
- converge
แจแแแแฌแแแแ
แขแแกแขแแแแกแแแแก แฉแแ แฉแแก แแแงแแแแแ แแ แแแกแแ แแแแขแแ แ. แแแแฃแแแกแฎแแแแ แแแแขแแ แ แแ แแก testinfra
ะธ flake8
. แจแแกแแซแแ แแแ แแแแขแแแ แแแแแแ, แ แแช แแแแแ:
verifier:
name: testinfra
additional_files_or_dirs:
- ../path/to/test_1.py
- ../path/to/test_2.py
- ../path/to/directory/*
options:
n: 1
enabled: False
env:
FOO: bar
lint:
name: flake8
options:
benchmark: True
enabled: False
env:
FOO: bar
แแแแฃแแ แฃแแแแ แฉแแแแก แ แแแก. แแแแแ แแแแ แแแแฅแขแแ แแ แคแแแแ tasks/main.yml
แแ แกแแฎแแกแแแแก:
---
- name: Install nginx
apt:
name: nginx
state: present
- name: Start nginx
service:
name: nginx
state: started
แแ แแแแแแขแแ แขแแกแขแแแ molecule/default/tests/test_default.py
def test_nginx_is_installed(host):
nginx = host.package("nginx")
assert nginx.is_installed
def test_nginx_running_and_enabled(host):
nginx = host.service("nginx")
assert nginx.is_running
assert nginx.is_enabled
def test_nginx_config(host):
host.run("nginx -t")
แแแกแ แฃแแแแฃแแแ, แ แฉแแแ แแฎแแแแ แแแจแแแแ (แ แแแแก แซแแ แแแแ, แจแแแแฎแกแแแแแ):
> molecule test
แแ แซแแแ แแแแแแแแแแฅแแ แกแแแแแแ แแก แฅแแแจ:
--> Validating schema <path>/nginx/molecule/default/molecule.yml.
Validation completed successfully.
--> Test matrix
โโโ default
โโโ lint
โโโ destroy
โโโ dependency
โโโ syntax
โโโ create
โโโ prepare
โโโ converge
โโโ idempotence
โโโ side_effect
โโโ verify
โโโ destroy
--> Scenario: 'default'
--> Action: 'lint'
--> Executing Yamllint on files found in <path>/nginx/...
Lint completed successfully.
--> Executing Flake8 on files found in <path>/nginx/molecule/default/tests/...
Lint completed successfully.
--> Executing Ansible Lint on <path>/nginx/molecule/default/playbook.yml...
Lint completed successfully.
--> Scenario: 'default'
--> Action: 'destroy'
PLAY [Destroy] *****************************************************************
TASK [Destroy molecule instance(s)] ********************************************
changed: [localhost] => (item=None)
changed: [localhost]
TASK [Wait for instance(s) deletion to complete] *******************************
ok: [localhost] => (item=None)
ok: [localhost]
TASK [Delete docker network(s)] ************************************************
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
--> Scenario: 'default'
--> Action: 'dependency'
Skipping, missing the requirements file.
--> Scenario: 'default'
--> Action: 'syntax'
playbook: <path>/nginx/molecule/default/playbook.yml
--> Scenario: 'default'
--> Action: 'create'
PLAY [Create] ******************************************************************
TASK [Log into a Docker registry] **********************************************
skipping: [localhost] => (item=None)
TASK [Create Dockerfiles from image names] *************************************
changed: [localhost] => (item=None)
changed: [localhost]
TASK [Discover local Docker images] ********************************************
ok: [localhost] => (item=None)
ok: [localhost]
TASK [Build an Ansible compatible image] ***************************************
changed: [localhost] => (item=None)
changed: [localhost]
TASK [Create docker network(s)] ************************************************
TASK [Create molecule instance(s)] *********************************************
changed: [localhost] => (item=None)
changed: [localhost]
TASK [Wait for instance(s) creation to complete] *******************************
changed: [localhost] => (item=None)
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=5 changed=4 unreachable=0 failed=0
--> Scenario: 'default'
--> Action: 'prepare'
Skipping, prepare playbook not configured.
--> Scenario: 'default'
--> Action: 'converge'
PLAY [Converge] ****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [instance]
TASK [nginx : Install nginx] ***************************************************
changed: [instance]
TASK [nginx : Start nginx] *****************************************************
changed: [instance]
PLAY RECAP *********************************************************************
instance : ok=3 changed=2 unreachable=0 failed=0
--> Scenario: 'default'
--> Action: 'idempotence'
Idempotence completed successfully.
--> Scenario: 'default'
--> Action: 'side_effect'
Skipping, side effect playbook not configured.
--> Scenario: 'default'
--> Action: 'verify'
--> Executing Testinfra tests found in <path>/nginx/molecule/default/tests/...
============================= test session starts ==============================
platform darwin -- Python 2.7.15, pytest-4.3.0, py-1.8.0, pluggy-0.9.0
rootdir: <path>/nginx/molecule/default, inifile:
plugins: testinfra-1.16.0
collected 4 items
tests/test_default.py .... [100%]
========================== 4 passed in 27.23 seconds ===========================
Verifier completed successfully.
--> Scenario: 'default'
--> Action: 'destroy'
PLAY [Destroy] *****************************************************************
TASK [Destroy molecule instance(s)] ********************************************
changed: [localhost] => (item=None)
changed: [localhost]
TASK [Wait for instance(s) deletion to complete] *******************************
changed: [localhost] => (item=None)
changed: [localhost]
TASK [Delete docker network(s)] ************************************************
PLAY RECAP *********************************************************************
localhost : ok=2 changed=2 unreachable=0 failed=0
แฉแแแแ แแแ แขแแแ แ แแแ แฃแแ แแแแแแแ แแฅแแ แแแแแชแแแแ.
แฃแแแ แแแแฎแกแแแแแก, แ แแ แแฃ แกแแแฃแจแแแก แแ แแก แแ แแแแแแแแแ molecule test
, แแแจแแ, แแฃ แแฅแแแ แแ แจแแชแแแแแ แแแแฃแแแกแฎแแแแ แแแแแแแแแแ แแแ, แแแแแแฃแแ แฌแแจแแแก แแแแแแแแก.
แจแแแแแแ แแ แซแแแแแแแ แกแแกแแ แแแแแแ แแแแแ แแแแกแแแแก:
> molecule --debug <command> # debug info. ะัะธ ะพะฑััะฝะพะผ ะทะฐะฟััะบะต ะะพะปะตะบัะปะฐ ัะบััะฒะฐะตั ะปะพะณะธ.
> molecule converge # ะััะฐะฒะปัะตั ะธะฝััะฐะฝั ะฟะพัะปะต ะฟัะพะณะพะฝะฐ ัะตััะธััะตะผะพะน ัะพะปะธ.
> molecule login # ะะฐะนัะธ ะฒ ัะพะทะดะฐะฝะฝัะน ะธะฝััะฐะฝั.
> molecule --help # ะะพะปะฝัะน ัะฟะธัะพะบ ะบะพะผะฐะฝะด.
แแ แกแแแฃแแ แ แแแ
แแ แกแแแฃแแ แ แแแแกแแแแก แแฎแแแ แกแแ แแแขแแก แแแแแขแแแ แแ แแก แ แแแแแแก แแแ แแฅแขแแ แแแแแ แจแแแแแแ แแ แซแแแแแแแแ:
# ะฟะพะปะฝัะน ัะฟะธัะพะบ ะดะพัััะฟะฝัั
ะฟะฐัะฐะผะตััะพะฒ
> molecule init scenarion --help
# ัะพะทะดะฐะฝะธะต ะฝะพะฒะพะณะพ ััะตะฝะฐัะธั
> molecule init scenario -r <role_name> -s <scenario_name>
แแ แจแแแแฎแแแแแจแ, แแฃ แแก แแ แแก แแแ แแแแ แกแชแแแแ แ แ แแแจแ, แแแจแแ แแแ แแแแขแ แ -s
แจแแแซแแแแ แแแแแขแแแแ, แ แแแแแ แแก แจแแฅแแแแก แกแแ แแแขแก default
.
แแแกแแแแ
แ แแแแ แช แฎแแแแแ, แแแแแแฃแแ แแ แแ แแก แซแแแแแ แ แแฃแแ แแ แแฅแแแแ แกแแแฃแแแ แ แจแแแแแแแแแก แแแแแงแแแแแแ, แแฎแแแ แกแแ แแแขแแก แแแแแ แแแ แจแแแซแแแแ แจแแแชแแ แแแก แชแแแแแแแแก แ แแแแฅแขแแ แแแแแแ, แแแแแแแแแ, แจแแฅแแแแกแ แแ แฌแแจแแแก แกแแแแแแจแ แฌแแแแแแจแ. แแแแแแฃแแ แจแแฃแคแแ แฎแแแแแ แแแขแแแ แแ แแแแ CI แกแแกแขแแแแแแแ, แ แแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแ แแแ แแแแแแแแ แแแแก แกแแฉแฅแแ แ แกแแแแแแจแ แฌแแแแแแแก แฎแแแแ แขแแกแขแแ แแแแก แแ แแแก แจแแแชแแ แแแแ.
แฒแแแแแแแ แงแฃแ แแแฆแแแแกแแแแก. แแฃ แแฅแแแ แแแฅแแ แแแแจแแแแแแแแแ แ แแแแแแก แขแแกแขแแ แแแแก แแแแแชแแแแแแ แแ แแก แแ แแ แแก แแแแแแจแแ แแแฃแแ แแแแแแฃแแแกแแแ, แแแแแฎแแ แแ แแแแก แจแแกแแฎแแ แแแแแแขแแ แแแจแ!
แฌแงแแ แ: www.habr.com