ααααΆααα½αααα»ααααααααααααΆ!
αααα»αααααΎααΆαααΆαα·ααααα DevOps αα
αααα»αααααΆααααααααααααΆααΆαα
αα Ostrovok.ru ααΎαααααΎ ansible ααΆα’ααααααααααααααΆαααααααα ααΆααααααααα ααααΈααααααΎαααΆαααααααααααΌαααΆαααΎααααΈααΆααααααα½ααΆααΈ ααα»ααααααΌα αααααΆααΆαααααααααΆα αα·αααΆαα§αααααα αααΎααααααΆααααΏαααααα - ααΆαααααα·αααααα»α αααα ααααΆ Molecule framework ααΌα ααααααΎααααααα α α·αααααααΎααΆα ααα»ααααααΆααΆαααααααααΆαααΆα―αααΆαααααααΆαααα αααααα’αααΈαααα αΆααΆα αααΎαα ααΎααα·αα’αΆα αααααααααΆαααααΆααααα’α·ααααααααααΆααααΆααΆααΆαα»ααααΈαα ααΌα ααααα αΎαααΆαααΆααΎααααααα α α·ααααααααα’ααααααααα
αααΌαααα»α
ααΆααα·αααααΆααΆααααα αααΌαααα»ααααααΎαα§ααΆα ααααα
ααΎαααα·ααΆαααα’ααααααααΆαα (ααα αααΆαααΈααα·αααα·α αα»αααΊααα αααααΆααααααααΆααααα’α·α ααΌαααΎαααααα
α₯α‘αΌαααααααα’α·ααααααααααα
ααααα·α ααααααΉααααΈαα½α
αα·α αΆαααΆααΆαα»ααααΆααααΈααααααΌαααα»αα ααααΆααΈαααΌ αα·ααααααα·ααΈαααααΆα
ααΆα αααΏα
ααααααΈαβααΆαβααΆαβαα·αααααΆβα’αααΈβα’αααΈ ααααααβααΆ αααα αα·αβααααΆααβααΆβαααβααΉαβααααΌαβα’αα»ααααα αα½ααΆααΈαα½αα’αΆα
ααΆαααααααΈαααΆα
αααΎα α αΎαααΈαα½ααααΊααΆαααα
ααΆαααααΌα <role>/molecule/<scenario>
αααααΆαααΆααα·αααααΆα’αααΈαααααααΆααααααααΌαααΆααααααΆααααΆαααααΎαααααα ααααΌαααααΆαααααααΈα default
αααααΉαααααΌαααΆααααααΎααααααααααααααααα· ααααα·αααΎα’αααα
αΆααααααΎααα½ααΆααΈααΆαα½ααααΌαααα»αα αααααααααααααΈαααΆααααααααΊα’αΆαααααααΎα’αααα
ααααΆαααααααααααΆαααΆααααααα αααα»αααααααΈαααααΌαααΆαααα α ααΆ αααΆααααΈαα αΎαααΆαααααΆαααΎαααΆααΊα
(ααα αΆααααααΆαααααΆα ?
ααααααΆαααααΆαααΎα ααααα·αααΎαα·αααΆααααααΆαααααα’αααααααΎααααΆαα)
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-command ααΈαα½ααα’αΆα
ααΆαααααΆαααααααααααΆαααααααΆ αααα’αααα’αΆα
ααααΎααααααΆαααααα·ααααα· molecule matrix <command>
. α§ααΆα ααααα
αααααααΎαααΆαααΆααααααααΆ converge
(αααα»αααααΎαααΆαααααα
ααααααααααΆαααΆααααα) αααααααΆαααΆααααααααΉαααααΌαααΆαα’αα»ααααα
$ molecule matrix converge
...
βββ default # Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ
βββ dependency # ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
βββ create # ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ°
βββ prepare # ΠΏΡΠ΅Π΄Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠ°
βββ converge # ΠΏΡΠΎΠ³ΠΎΠ½ ΠΏΠ»Π΅ΠΉΠ±ΡΠΊΠ°
ααααΆαααααααααααΆαααΆαααααα’αΆα
ααααΌαααΆαααααααα½αα ααααα·αααΎα’αααΈαα½αααΈαααααΈααααΌαααΆαααααΎαα½α
α αΎα ααΆααΉαααααΌαααΆαααααα ααααΆαααΆααα
αα
α»αααααα ααααΌα
ααΆααΆαααααααα
ααΆααααααααααααααα» αααΌαααα»ααααα»ααα
αααα»ααα $TMPDIR/molecule/<role>/<scenario>
.
ααααααααα αΆαααΆαα½α ?
α’αααα’αΆα
αααααΆα’αααΈαααααααΆααααα
ααααΆααααα»ααααααα Ansible playbook α αΎαααΆαααααααα―αααΆαααΆαααα αΆαα prepare.yml
/side_effect.yml
. ααααΉαααΆα―αααΆαααΆααααα αααΌαααα»αααΉααααα·ααα
αααα»αααααααααΈαα
αααααα·ααΈαααααΆ
αααααα·ααΈαααααΆααΊααΆα’αααααΆαααααααααΎαααααΈααΆαααααα
αααααΈαααααααα·ααΈαααααΆαααααααΆαααααααΌαααα»αααΆαααααΌαα½α
ααΆααααΆαααΌα
ααΆααααααα Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated α
αααα»αααααΈααΆαα
αααΎα ααααΌααΊααΆα―αααΆα create.yml
ΠΈ destroy.yml
αααα»αβααβααααααΈαβαααβαα·αααααΆβα’αααΈβααΆαβαααααΎα αα·αβααΆαβαα»αβααααα»βαα½αβααααβαααα½αα
ααααΈααΎααααααΊ Docker αα·α Vagrant αααααΆαα’ααααααααααΆαα½ααααΌαα»ααααααα½αααα’αΆα
ααΎαα‘αΎααααααααΆαα―αααΆααααααΆααααααΆααααΆαααΎα
ααΆααΆαααααααααα»αααΆαααααα αααααα·ααΈαααααΆαααααΆαααααααα·αααα· αααααααααα·αααΎααΆααααΌαααΆαααααΎαα αααα»αα―αααΆααααααΆαααααααΎα αα·ααα»αααααα»ααΆαα½α ααΆαααααΆαααααΎααΆαααΆαα½αααΉαααΆαααααααα ααΆααααααααααααααα»ααα»ααααααααααααΌαααΆααα·αααααΆ αα ααααα½αααααααΌαααΆααα·αααααΆααααα·αααααα
αααααα·ααΈαααααΆααααΆαααΎαααΊ Docker α
α₯α‘αΌαααα α αΌααααααα ααΆαα’αα»αααα α αΎααα·α αΆαααΆαααααααα·αααααααααααααα ααΈαααα
ααΆαα αΆααααααΎα
αααα»αααΆαααΆ "αα·αααα½ααααΈ" ααΌαααΆααααααα½ααΆααΈααα‘αΎα nginx ααΆααααα ααΎαααΉαααααΎαααΎα docker ααΆα’αααααΎααα - αααα»ααα·αααΆα’αααααΆαα αααΎαααΆαααα‘αΎαααΆα αΎα (α αΎαα αα αΆαααΆ docker ααΊααΆαααααα·ααΈαααααΆααααΆαααΎα)α
αααα
α 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 Molecules ααααΌαααΆαααααΎα‘αΎαααΈα«αααααααα½ααΆααΈα
αααβααΎαβααΆβααΎβααΆαβα’αααΈβααααβαα βαααα»αβαααααΈβαααααα
> 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
(αααα½αααααΌαααΆα docker)α
---
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 ααααΆααααααΆ command shell αααααααΎαααα»αααααΈ galaxy αα·α gilt αα·ααααααααααααααααΌαααΆαααααα’αααα
αααα»αααΉααα·αααααΆαααα
ααΈαααααΌααα ααΆααααΌαααΆααα·αααααΆαααααααααΆααα αΎαα
αααααα·ααΈαααααΆ
αααααα’αααααΎαααα ααααααΎαααΊ docker α
ααααΉα
αα»αααααΆαααΊ yamllint α
αααααΎαααΆααααααααααα αααα»ααααααααααΆαααααααα ααΆαααααααααααααΊαααααααΆααααα»αααΆααααααΆααα―αααΆαααααααα ααΆαααααααααααααΆαα yamllint α’αααααα·ααααΆααααααΌααααα α¬αα·α literα
lint:
name: yamllint
options:
config-file: foo/bar
env:
FOO: bar
enabled: False
αααα·ααΆ
αα·αααααΆα’αααΈααΆαααααααα
ααΆααααααααααααααα»α
αααα»αααααΈ docker ααΆα’αααααΎααα αααΌαααα»αααααΌαααΆαααααΎααααααααα
ααΎαααααααα α αΎαααΆαα»ααΈαα½αααααααααΈααΆααα
αααα»α Dockerfile.j2
ααΆα’ααα item
.
αααα»αααααΈα’αααααΎααααααααααΌαααΆα create.yml
ΠΈ destroy.yml
, αααααααΆααα
αααα»ααα½αααΆααΆ molecule_yml.platforms
α αΎαααΆααααααα‘αΎααα·αααΎααΆααααΌαααΆααα·αααααΆαα½α
α αΎααα
αααα»αα―αααΆαααΆαααααα
αααααΆα Molecule αααααααΌαααΆαααααααααααα instances αα
ansible modules ααααααααΈααααΆαααααααααα’αΆα
ααααΎααΆααααα½αααααααΌαααΆαααααΎααα
ααΈααααααααα α§ααΆα ααααααααΆαα docker αααΌαα»αααααΌαααΆαααααΎ
ααααΌα
ααΆα§ααΆα αααααααΆαααααΎααααΆαααααααα·ααΈαααααΆααααααα’αΆα
ααααΆα
αααα½ααα ααΈααα αααααΆαα α§ αα ααΎ Ubuntu.
α’αααααααα
"α’ααααααααααααΆ" ααΊααΆα’αααααΆαααααααααααααααααΈα αα
αααα»αααααΈαααααΌαααα»α αααααΊαα·αα’αΆα
ααα½αααααΆα ααΆαααΆαααααααααΆααα’αααααααα·αααααΌαααΆαααααααα»ααα ααΌα
ααααααααααααα’αΆα
ααααΌαααΆαααα α
ααΆ ααΆαααααααα
ααΆαααααααααααααααααα’αΆα
αααααΈαααΆαα
αα
ααΈαααα’αααα’αΆα
αααααΆααααΏαααΆα
αααΎα αααα»αααΉαααΌααααααΆααα
ααα»α
ααααΆααα ααΆααααα·ααααααααα»αα
- ααααα αααα α’αααβα’αΆα βαααααΆααβααΆβααααα βαααβααΆβαααβαα½αβααααΌαβααΆαβααααΎβαα βααααΆααααΆαβααΆααααΆααα
provisioner:
name: ansible
playbooks:
create: create.yml
destroy: ../default/destroy.yml
converge: playbook.yml
side_effect: side_effect.yml
cleanup: cleanup.yml
- config_options:
ααΆαααααααα ααΆαααααααααααα’αΆα ααααΎααΆα
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'"
- αααααΎαα αααααΎααααα’αΆα αααααΆα αα·αα’αααααα·ααααΆα
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
ααΆαα ααααΏαααΌααα ααααα spoiler:
--> 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 αααα’αα»ααααΆαα±ααα’ααααααααΎαααααΏαααααΆαα’αα·αααααααααααΆααααααααααααααΆαααααΆααααΆαααααΎαααααααααα ααααΆααααααα
ααΌαβα’ααα»αβα ααααβααΆαβααα α·αααβαα»αααΆααβααααβαααα’αααα ααααα·αααΎα’αααααΆααααα·ααααααααα»αααΆαααΆααααααα½ααΆααΈ ansible α αΎαααΆαα·αααΆαααααα ααΉααααΌαααα»ααα ααααΆααααΎαα’αααΈααΆαα αααα»αααα·ααααα!
ααααα: www.habr.com