ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื–ื” ื”ืชืžืœื™ืœ ื”ื•ืคืขื•ืช ืขืœ DevOps-40 2020-03-18:

ื”ื—ืœ ืžื”-commit ื”ืฉื ื™, ื›ืœ ืงื•ื“ ื”ื•ืคืš ืœืžื•ืจืฉืช, ื›ื™ ืจืขื™ื•ื ื•ืช ืจืืฉื•ื ื™ื™ื ืžืชื—ื™ืœื™ื ืœืกื˜ื•ืช ืžื”ืžืฆื™ืื•ืช ื”ืงืฉื”. ื–ื” ืœื ื˜ื•ื‘ ื•ืœื ืจืข, ื–ื” ื ืชื•ืŸ ืฉืงืฉื” ืœื”ืชื•ื•ื›ื— ืื™ืชื• ื•ืฆืจื™ืš ืœื—ื™ื•ืช ืื™ืชื•. ื—ืœืง ืžืชื”ืœื™ืš ื–ื” ื”ื•ื ืขื™ื‘ื•ื“ ืžื—ื“ืฉ. Refactoring ืชืฉืชื™ืช ื›ืงื•ื“. ืฉื™ืชื—ื™ืœ ื”ืกื™ืคื•ืจ ืขืœ ืื™ืš ืœื—ื“ืฉ ืืช ืื ืกื™ื‘ืœ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข.

ื”ื•ืœื“ืช ื”ืžื•ืจืฉืช

ื™ื•ื ืžืก' 1: ืžื˜ื•ืคืœ ืืคืก

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืคืขื ื”ื™ื” ืคืจื•ื™ืงื˜ ืžื•ืชื ื”. ื”ื™ื” ืœื• ืฆื•ื•ืช ืคื™ืชื•ื— ืฉืœ Dev ื•ืžื”ื ื“ืกื™ Ops. ื”ื ืคืชืจื• ืืช ืื•ืชื” ื‘ืขื™ื”: ื›ื™ืฆื“ ืœืคืจื•ืก ืฉืจืชื™ื ื•ืœื”ืคืขื™ืœ ืืคืœื™ืงืฆื™ื”. ื”ื‘ืขื™ื” ื”ื™ื™ืชื” ืฉื›ืœ ืฆื•ื•ืช ืคืชืจ ืืช ื”ื‘ืขื™ื” ื”ื–ื• ื‘ื“ืจื›ื• ืฉืœื•. ื‘ืคืจื•ื™ืงื˜ ื”ื•ื—ืœื˜ ืœื”ืฉืชืžืฉ ื‘-Ansible ื›ื“ื™ ืœืกื ื›ืจืŸ ื™ื“ืข ื‘ื™ืŸ ืฆื•ื•ืชื™ Dev ื•-Ops.

ื™ื•ื ืžืก' 89: ื”ื•ืœื“ืช ื”ืžื•ืจืฉืช

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื‘ืœื™ ืœืฉื™ื ืœื‘ ืœื–ื” ื‘ืขืฆืžื, ื”ื ืจืฆื• ืœืขืฉื•ืช ืืช ื–ื” ื”ื›ื™ ื˜ื•ื‘ ืฉืืคืฉืจ, ืื‘ืœ ื–ื” ื”ืชื‘ืจืจ ื›ืžื•ืจืฉืช. ืื™ืš ื–ื” ืงื•ืจื”?

  • ื™ืฉ ืœื ื• ื›ืืŸ ืžืฉื™ืžื” ื“ื—ื•ืคื”, ื‘ื•ืื• ื ืขืฉื” ืคืจื™ืฆื” ืžืœื•ื›ืœื›ืช ื•ืื– ื ืชืงืŸ ืื•ืชื”.
  • ืืชื” ืœื ืฆืจื™ืš ืœื›ืชื•ื‘ ืชื™ืขื•ื“ ื•ื”ื›ืœ ื‘ืจื•ืจ ืžื” ืงื•ืจื” ื›ืืŸ.
  • ืื ื™ ืžื›ื™ืจ ืืช Ansible/Python/Bash/Terraform! ืชืจืื” ืื™ืš ืื ื™ ื™ื›ื•ืœ ืœื”ืชื—ืžืง!
  • ืื ื™ ืžืคืชื— Full Stack Overflow ื•ื”ืขืชืงืชื™ ืืช ื–ื” ืž-stackoverflow, ืื ื™ ืœื ื™ื•ื“ืข ืื™ืš ื–ื” ืขื•ื‘ื“, ืื‘ืœ ื–ื” ื ืจืื” ืžื’ื ื™ื‘ ื•ืคื•ืชืจ ืืช ื”ื‘ืขื™ื”.

ื›ืชื•ืฆืื” ืžื›ืš, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืกื•ื’ ืœื ืžื•ื‘ืŸ ืฉืœ ืงื•ื“ ืฉืื™ืŸ ืœื’ื‘ื™ื• ืชื™ืขื•ื“, ืœื ื‘ืจื•ืจ ืžื” ื”ื•ื ืขื•ืฉื”, ืื ื”ื•ื ื ื—ื•ืฅ, ืื‘ืœ ื”ื‘ืขื™ื” ื”ื™ื ืฉืฆืจื™ืš ืœืคืชื— ืื•ืชื•, ืœืฉื ื•ืช ืื•ืชื•, ืœื”ื•ืกื™ืฃ ืงื‘ื™ื™ื ื•ืชื•ืžื›ื™ื , ืžื” ืฉืžื—ืžื™ืจ ืืช ื”ืžืฆื‘ ืขื•ื“ ื™ื•ืชืจ.

- hosts: localhost
  tasks:
    - shell: echo -n Z >> a.txt && cat a.txt
      register: output
      delay: 1
      retries: 5
      until: not output.stdout.find("ZZZ")

ื™ื•ื ืžืก' 109: ืžื•ื“ืขื•ืช ืœื‘ืขื™ื”

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืžื•ื“ืœ ื”-IAC ืฉื”ื•ืงื ื•ื”ื™ื•ืฉื ื‘ืชื—ื™ืœื” ืื™ื ื• ืขื•ืžื“ ืขื•ื“ ื‘ื“ืจื™ืฉื•ืช ื”ืžืฉืชืžืฉื™ื/ืขืกืงื™ื/ืฆื•ื•ืชื™ื ืื—ืจื™ื, ื•ื”ื–ืžืŸ ืœื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ื‘ืชืฉืชื™ืช ืžืคืกื™ืง ืœื”ื™ื•ืช ืžืงื•ื‘ืœ. ื‘ืจื’ืข ื–ื” ืžื’ื™ืขื” ื”ื”ื‘ื ื” ืฉื”ื’ื™ืข ื”ื–ืžืŸ ืœืขืฉื•ืช ืžืขืฉื”.

Refactoring ืฉืœ IaC

ื™ื•ื ืžืก' 139: ื”ืื ืืชื” ื‘ืืžืช ืฆืจื™ืš ืจื™ืคืงื˜ื•ืจ?

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืœืคื ื™ ืฉืืชื” ืžืžื”ืจ ืœื—ื“ืฉ, ืขืœื™ืš ืœืขื ื•ืช ืขืœ ืžืกืคืจ ืฉืืœื•ืช ื—ืฉื•ื‘ื•ืช:

  1. ืœืžื” ืืชื” ืฆืจื™ืš ืืช ื›ืœ ื–ื”?
  2. ื™ืฉ ืœืš ื–ืžืŸ?
  3. ื”ืื ื™ื“ืข ืžืกืคื™ืง?

ืื ืืชื” ืœื ื™ื•ื“ืข ืื™ืš ืœืขื ื•ืช ืขืœ ื”ืฉืืœื•ืช, ื”ืจื™ืคืงื˜ื•ืจื™ื ื’ ื™ืกืชื™ื™ื ืขื•ื“ ืœืคื ื™ ืฉื”ื•ื ืžืชื—ื™ืœ, ืื• ืฉื”ื•ื ืขืœื•ืœ ืจืง ืœื”ื—ืžื™ืจ. ื›ื™ ื”ื™ื” ื ื™ืกื™ื•ืŸ( ืžื” ืฉืœืžื“ืชื™ ืžื‘ื“ื™ืงืช 200 ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ ืชืฉืชื™ืช), ื•ืื– ื”ืคืจื•ื™ืงื˜ ืงื™ื‘ืœ ื‘ืงืฉื” ืœืขื–ืจื” ืœืชืงืŸ ืืช ื”ืชืคืงื™ื“ื™ื ื•ืœื›ืกื•ืช ืื•ืชื ื‘ืžื‘ื—ื ื™ื.

ื™ื•ื ืžืก' 149: ื”ื›ื ืช ื”ืฉื—ื–ื•ืจ

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ื”ื•ื ืœื”ื›ื™ืŸ. ืชื—ืœื™ื˜ ืžื” ื ืขืฉื”. ืœืฉื ื›ืš, ืื ื• ืžืชืงืฉืจื™ื, ืžื•ืฆืื™ื ืื–ื•ืจื™ื ื‘ืขื™ื™ืชื™ื™ื ื•ืžื•ืฆืื™ื ื“ืจื›ื™ื ืœืคืชื•ืจ ืื•ืชื. ืื ื• ืจื•ืฉืžื™ื ืืช ื”ืžื•ืฉื’ื™ื ื”ืžืชืงื‘ืœื™ื ืื™ื›ืฉื”ื•, ืœืžืฉืœ ืžืืžืจ ื‘ืžืคื’ืฉ, ื›ืš ืฉื›ืืฉืจ ืขื•ืœื” ื”ืฉืืœื” "ืžื” ืขื“ื™ืฃ?" ืื• "ืžื” ื ื›ื•ืŸ?" ืœื ืื™ื‘ื“ื ื• ืืช ื”ื“ืจืš. ื‘ืžืงืจื” ืฉืœื ื•, ื“ื‘ืงื ื• ื‘ืจืขื™ื•ืŸ ืœื”ืคืจื™ื“ ื•ืœืฉืœื•ื˜: ืื ื• ืžืคืจืงื™ื ืืช ื”ืชืฉืชื™ืช ืœื—ืชื™ื›ื•ืช ืงื˜ื ื•ืช/ืœื‘ื ื™ื. ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœืงื—ืช ื—ืœืง ืžื‘ื•ื“ื“ืช ืฉืœ ืชืฉืชื™ืช, ืœื”ื‘ื™ืŸ ืžื” ื”ื™ื ืขื•ืฉื”, ืœื›ืกื•ืช ืื•ืชื” ื‘ื‘ื“ื™ืงื•ืช ื•ืœืฉื ื•ืช ืื•ืชื” ืžื‘ืœื™ ืœื—ืฉื•ืฉ ืœืฉื‘ื•ืจ ื“ื‘ืจ.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืžืกืชื‘ืจ ืฉื‘ื“ื™ืงื•ืช ืชืฉืชื™ืช ื”ื•ืคื›ื•ืช ืœืื‘ืŸ ื”ื™ืกื•ื“ ื•ื›ืืŸ ืจืื•ื™ ืœื”ื–ื›ื™ืจ ืืช ืคื™ืจืžื™ื“ืช ื‘ื“ื™ืงื•ืช ื”ืชืฉืชื™ืช. ื‘ื“ื™ื•ืง ืื•ืชื• ืจืขื™ื•ืŸ ืฉื ืžืฆื ื‘ืคื™ืชื•ื—, ืื‘ืœ ืœืชืฉืชื™ืช: ืื ื—ื ื• ืขื•ื‘ืจื™ื ืžื‘ื“ื™ืงื•ืช ืžื”ื™ืจื•ืช ื–ื•ืœื•ืช ืฉื‘ื•ื“ืงื•ืช ื“ื‘ืจื™ื ืคืฉื•ื˜ื™ื, ื›ืžื• ื”ื–ื—ื”, ืœื‘ื“ื™ืงื•ืช ื™ืงืจื•ืช ืžืŸ ื”ืžื ื™ื™ืŸ ืฉืคื•ืจืกื•ืช ืืช ื›ืœ ื”ืชืฉืชื™ืช.

ื ื™ืกื™ื•ื ื•ืช ื‘ื“ื™ืงื” ืืคืฉืจื™ื™ื

ืœืคื ื™ ืฉื ืœืš ืœืชืืจ ื›ื™ืฆื“ ื›ื™ืกื™ื ื• ืžื‘ื—ื ื™ Ansible ื‘ืคืจื•ื™ืงื˜, ืืชืืจ ืืช ื”ื ื™ืกื™ื•ื ื•ืช ื•ื”ื’ื™ืฉื•ืช ืฉื”ื™ื™ืชื” ืœื™ ื”ื”ื–ื“ืžื ื•ืช ืœื”ืฉืชืžืฉ ื‘ื”ื ืงื•ื“ื ืœื›ืŸ ืขืœ ืžื ืช ืœื”ื‘ื™ืŸ ืืช ื”ื”ืงืฉืจ ืฉืœ ื”ื”ื—ืœื˜ื•ืช ืฉื”ืชืงื‘ืœื•.

ื™ื•ื ืžืก' -997: ืžืชืŸ SDS

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื”ืคืขื ื”ืจืืฉื•ื ื” ืฉื‘ื“ืงืชื™ ืืช Ansible ื”ื™ื™ืชื” ื‘ืคืจื•ื™ืงื˜ ืœืคื™ืชื•ื— SDS (Software Defined Storage). ื™ืฉ ืžืืžืจ ื ืคืจื“ ื‘ื ื•ืฉื ื–ื”
ื›ื™ืฆื“ ืœืฉื‘ื•ืจ ืื•ืคื ื™ื™ื ืขืœ ืงื‘ื™ื™ื ื‘ืขืช ื‘ื“ื™ืงืช ื”ื”ืคืฆื” ืฉืœืš, ืื‘ืœ ื‘ืงื™ืฆื•ืจ, ืกื™ื™ืžื ื• ืขื ืคื™ืจืžื™ื“ืช ื‘ื“ื™ืงื” ื”ืคื•ื›ื” ื•ื‘ื‘ื“ื™ืงื•ืช ื”ืงื“ืฉื ื• 60-90 ื“ืงื•ืช ืขืœ ืชืคืงื™ื“ ืื—ื“, ืฉื–ื” ื”ืจื‘ื” ื–ืžืŸ. ื”ื‘ืกื™ืก ื”ื™ื” ืžื‘ื—ื ื™ e2e, ื›ืœื•ืžืจ. ืคืจืกื ื• ื”ืชืงื ื” ืžืœืื” ื•ืœืื—ืจ ืžื›ืŸ ื‘ื“ืงื ื• ืื•ืชื”. ืžื” ืฉื”ื—ืžื™ืจ ืขื•ื“ ื™ื•ืชืจ ื”ื™ื” ื”ืžืฆืืช ื”ืื•ืคื ื™ื™ื ืฉืœื•. ืื‘ืœ ืื ื™ ื—ื™ื™ื‘ ืœื”ื•ื“ื•ืช, ื”ืคืชืจื•ืŸ ื”ื–ื” ืขื‘ื“ ื•ืืคืฉืจ ืฉื—ืจื•ืจ ื™ืฆื™ื‘.

ื™ื•ื ืžืก' -701: ืžื˜ื‘ื— ืื ืกื™ื‘ืœ ื•ืžื‘ื—ืŸ

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื”ืคื™ืชื•ื— ืฉืœ ืจืขื™ื•ืŸ ื”ื‘ื“ื™ืงื•ืช ืฉืœ Ansible ื”ื™ื” ืฉื™ืžื•ืฉ ื‘ื›ืœื™ื ืžื•ื›ื ื™ื, ื›ืœื•ืžืจ test kitchen / kitchen-ci ื•-inspect. ื”ื‘ื—ื™ืจื” ื ืงื‘ืขื” ืขืœ ื™ื“ื™ ื”ื›ืจืช ืจื•ื‘ื™ (ืœืคืจื˜ื™ื ื ื•ืกืคื™ื, ืจืื” ืžืืžืจ ืขืœ Habrรฉ: ื”ืื ืžืชื›ื ืชื™ YML ื—ื•ืœืžื™ื ืœื‘ื“ื•ืง ืืช Ansible?) ืขื‘ื“ ืžื”ืจ ื™ื•ืชืจ, ื‘ืขืจืš 40 ื“ืงื•ืช ืขื‘ื•ืจ 10 ืชืคืงื™ื“ื™ื. ื™ืฆืจื ื• ื—ื‘ื™ืœื” ืฉืœ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื•ื”ืจืฆื ื• ื‘ืคื ื™ื ื‘ื“ื™ืงื•ืช.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ืคืชืจื•ืŸ ืขื‘ื“, ืื‘ืœ ื”ื™ื” ืงืฆืช ืžืฉืงืขื™ื ื‘ื’ืœืœ ื”ื˜ืจื•ื’ื ื™ื•ืช. ื›ืืฉืจ ืžืกืคืจ ื”ืื ืฉื™ื ืฉื ื‘ื“ืงื• ื”ื•ื’ื“ืœ ืœ-13 ืชืคืงื™ื“ื™ื ื‘ืกื™ืกื™ื™ื ื•-2 ืชืคืงื™ื“ื™ ืžื˜ื ื‘ืฉื™ืœื•ื‘ ืชืคืงื™ื“ื™ื ืงื˜ื ื™ื ื™ื•ืชืจ, ืื– ืคืชืื•ื ื”ื‘ื“ื™ืงื•ืช ื”ื—ืœื• ืœืจื•ืฅ ื‘ืžืฉืš 70 ื“ืงื•ืช, ืฉื–ื” ื›ืžืขื˜ ืคื™ 2 ื™ื•ืชืจ. ื”ื™ื” ืงืฉื” ืœื“ื‘ืจ ืขืœ ืฉื™ื˜ื•ืช XP (ืชื›ื ื•ืช ืงื™ืฆื•ื ื™ื•ืช) ื›ื™... ืืฃ ืื—ื“ ืœื ืจื•ืฆื” ืœื—ื›ื•ืช 70 ื“ืงื•ืช. ื–ื• ื”ื™ื™ืชื” ื”ืกื™ื‘ื” ืœืฉื™ื ื•ื™ ื”ื’ื™ืฉื”

ื™ื•ื ืžืก' -601: Ansible ื•ืžื•ืœืงื•ืœื”

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืžื‘ื—ื™ื ื” ืจืขื™ื•ื ื™ืช, ื–ื” ื“ื•ืžื” ืœ-testkitchen, ืจืง ืฉื”ืขื‘ืจื ื• ืืช ื‘ื“ื™ืงืช ื”ืชืคืงื™ื“ื™ื ืœ-docker ื•ืฉื™ื ื™ื ื• ืืช ื”ืขืจื™ืžื”. ื›ืชื•ืฆืื” ืžื›ืš, ื”ื–ืžืŸ ื”ืฆื˜ืžืฆื ืœื™ืฆื™ื‘ื•ืช ืฉืœ 20-25 ื“ืงื•ืช ืขื‘ื•ืจ 7 ืชืคืงื™ื“ื™ื.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืขืœ ื™ื“ื™ ื”ื’ื“ืœืช ืžืกืคืจ ื”ืชืคืงื™ื“ื™ื ืฉื ื‘ื“ืงื• ืœ-17 ื•ื”ืฆื‘ืช 45 ืชืคืงื™ื“ื™ื, ื”ืจืฆื ื• ืืช ื–ื” ืชื•ืš 28 ื“ืงื•ืช ืขืœ 2 ืขื‘ื“ื™ ื’'ื ืงื™ื ืก.

ื™ื•ื ืžืก' 167: ื”ื•ืกืคืช ืžื‘ื—ื ื™ Ansible ืœืคืจื•ื™ืงื˜

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืœื ื ื™ืชืŸ ื™ื”ื™ื” ืœื‘ืฆืข ืืช ืžืฉื™ืžืช ื”ื—ื–ืจื” ื‘ืžื”ื™ืจื•ืช. ื”ืžืฉื™ืžื” ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื ื™ืชื ืช ืœืžื“ื™ื“ื” ื›ื“ื™ ืฉืชื•ื›ืœื• ืœืฉื‘ื•ืจ ืื•ืชื” ืœื—ืชื™ื›ื•ืช ืงื˜ื ื•ืช ื•ืœืื›ื•ืœ ืืช ื”ืคื™ืœ ื—ืœืง ืื—ืจ ื—ืœืง ืขื ื›ืคื™ืช. ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ื”ื‘ื ื” ื”ืื ืืชื” ืžืชืงื“ื ื‘ื›ื™ื•ื•ืŸ ื”ื ื›ื•ืŸ, ื›ืžื” ืขื•ื“ ืฆืจื™ืš ืœืœื›ืช.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื ืžืฉื ื” ืื™ืš ื–ื” ื™ืชื‘ืฆืข, ืืคืฉืจ ืœื›ืชื•ื‘ ืขืœ ืคื™ืกืช ื ื™ื™ืจ, ืืคืฉืจ ืœืฉื™ื ืžื“ื‘ืงื•ืช ืขืœ ื”ืืจื•ืŸ, ืืคืฉืจ ืœื™ืฆื•ืจ ืžืฉื™ืžื•ืช ื‘ื’'ื™ืจื”, ืื• ืœืคืชื•ื— ื’ื•ื’ืœ ื“ื•ืงืก ื•ืœืจืฉื•ื ืืช ื”ืกื˜ื˜ื•ืก ื”ื ื•ื›ื—ื™ ืฉื. ื”ืจื’ืœื™ื™ื ืฆื•ืžื—ื•ืช ืžื”ืขื•ื‘ื“ื” ืฉื”ืชื”ืœื™ืš ืื™ื ื• ืžื™ื™ื“ื™, ื”ื•ื ื™ื”ื™ื” ืืจื•ืš ื•ืžื™ื™ื’ืข. ืื™ืŸ ื–ื” ืกื‘ื™ืจ ืฉืžื™ืฉื”ื• ืจื•ืฆื” ืฉืชืฉืจื•ืฃ ืืช ื”ืจืขื™ื•ื ื•ืช, ืชืชืขื™ื™ืฃ ื•ืชื”ื™ื” ื”ืžื•ื ื‘ืžื”ืœืš ื”ืขื™ื‘ื•ื“ ืžื—ื“ืฉ.

ื”ืฉื—ื–ื•ืจ ื”ื•ื ืคืฉื•ื˜:

  • ืœืื›ื•ืœ.
  • ืœื™ืฉื•ืŸ.
  • ืœืงื•ื“ื“
  • ืžื‘ื—ืŸ IaC.
  • ืœื—ื–ื•ืจ ืขืœ

ื•ืื ื• ื—ื•ื–ืจื™ื ืขืœ ื›ืš ืขื“ ืฉื ื’ื™ืข ืœื™ืขื“ ื”ืžื™ื•ืขื“.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืื•ืœื™ ืœื ื ื™ืชืŸ ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ื”ื›ืœ ืžื™ื“, ืื– ื”ืžืฉื™ืžื” ื”ืจืืฉื•ื ื” ืฉืœื ื• ื”ื™ื™ืชื” ืœื”ืชื—ื™ืœ ืขื ืžื•ืš ื•ื‘ื“ื™ืงืช ื”ืชื—ื‘ื™ืจ.

ื™ื•ื ืžืก' 181: Green Build Master

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืžื•ืš ื”ื•ื ืฆืขื“ ืจืืฉื•ืŸ ืงื˜ืŸ ืœืงืจืืช Green Build Master. ื–ื” ืœื ื™ืฉื‘ื•ืจ ื›ืžืขื˜ ืฉื•ื ื“ื‘ืจ, ืื‘ืœ ื–ื” ื™ืืคืฉืจ ืœืš ืœื ืคื•ืช ื‘ืื’ื™ื ื‘ืชื”ืœื™ื›ื™ื ื•ืœื™ืฆื•ืจ ื‘ื ื™ื™ื” ื™ืจื•ืงื” ื‘ื’'ื ืงื™ื ืก. ื”ืจืขื™ื•ืŸ ื”ื•ื ืœืคืชื— ื”ืจื’ืœื™ื ื‘ืงืจื‘ ื”ืฆื•ื•ืช:

  • ื‘ื“ื™ืงื•ืช ืื“ื•ืžื•ืช ื–ื” ืจืข.
  • ื‘ืืชื™ ืœืชืงืŸ ืžืฉื”ื• ื•ื‘ืžืงื‘ื™ืœ ืœื”ืคื•ืš ืืช ื”ืงื•ื“ ืœืงืฆืช ื™ื•ืชืจ ื˜ื•ื‘ ืžืžื” ืฉื”ื™ื” ืœืคื ื™ื›ื.

ื™ื•ื ืžืก' 193: ืžืžื•ืš ืœื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื”

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืœืื—ืจ ืฉื‘ื ื™ืช ืืช ืชื”ืœื™ืš ืงื‘ืœืช ื”ืงื•ื“ ืœืžืืกื˜ืจ, ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ื‘ืชื”ืœื™ืš ืฉืœ ืฉื™ืคื•ืจ ืฉืœื‘ ืื—ืจ ืฉืœื‘ - ื”ื—ืœืคืช ืžื•ืš ื‘ืชืคืงื™ื“ื™ ื”ืฉืงื”, ืืชื” ื™ื›ื•ืœ ืืคื™ืœื• ืœืขืฉื•ืช ืืช ื–ื” ืœืœื ืื™ืžืคื•ื˜ื ืฆื™ื”. ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืื™ืš ืœื™ื™ืฉื ืชืคืงื™ื“ื™ื ื•ืื™ืš ื”ื ืขื•ื‘ื“ื™ื.

ื™ื•ื ืžืก' 211: ืžื™ื—ื™ื“ื” ืœืžื‘ื—ื ื™ ืื™ื ื˜ื’ืจืฆื™ื”

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื›ืืฉืจ ืจื•ื‘ ื”ืชืคืงื™ื“ื™ื ืžื›ื•ืกื™ื ื‘ืžื‘ื—ื ื™ ื™ื—ื™ื“ื” ื•ื”ื›ืœ ืžื›ื•ืกื” ืžื•ืš, ื ื™ืชืŸ ืœืขื‘ื•ืจ ืœื”ื•ืกืคืช ืžื‘ื—ื ื™ ืื™ื ื˜ื’ืจืฆื™ื”. ื”ึธื”ึตืŸ. ื‘ื“ื™ืงืช ืœื ืœื‘ื ื” ืื—ืช ื‘ืชืฉืชื™ืช, ืืœื ืฉื™ืœื•ื‘ ืฉืœื”ืŸ, ืœืžืฉืœ, ืชืฆื•ืจืช ืžื•ืคืข ืžืœื.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื‘ืืžืฆืขื•ืช ื’'ื ืงื™ื ืก, ื™ืฆืจื ื• ืฉืœื‘ื™ื ืจื‘ื™ื ืฉื—ื™ื‘ืจื• ืชืคืงื™ื“ื™ื/ืกืคืจื™ ืžืฉื—ืง ื‘ืžืงื‘ื™ืœ, ืื—ืจ ื›ืš ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื•ืช ื‘ืžื™ื›ืœื™ื, ื•ืœื‘ืกื•ืฃ ืžื‘ื—ื ื™ ืื™ื ื˜ื’ืจืฆื™ื”.

Jenkins + Docker + Ansible = ืžื‘ื—ื ื™ื

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

  1. ื‘ื“ื•ืง ืจื™ืคื• ื•ื™ืฆื™ืจืช ืฉืœื‘ื™ ื‘ื ื™ื™ื”.
  2. ื”ืคืขืœ ืืช ืฉืœื‘ื™ ืกืคืจื™ ื”ืžื•ืš ื‘ืžืงื‘ื™ืœ.
  3. ื”ืคืขืœ ืฉืœื‘ื™ ืชืคืงื™ื“ื™ ืžื•ืš ื‘ืžืงื‘ื™ืœ.
  4. ื”ืคืขืœ ืืช ืฉืœื‘ื™ ืชืคืงื™ื“ื™ ื‘ื“ื™ืงืช ื”ืชื—ื‘ื™ืจ ื‘ืžืงื‘ื™ืœ.
  5. ื”ืคืขืœ ืฉืœื‘ื™ ืชืคืงื™ื“ื™ ืžื‘ื—ืŸ ื‘ืžืงื‘ื™ืœ.
    1. ืชืคืงื™ื“ ืžื•ืš.
    2. ื‘ื“ื•ืง ืชืœื•ืช ื‘ืชืคืงื™ื“ื™ื ืื—ืจื™ื.
    3. ื‘ื“ื•ืง ืชื—ื‘ื™ืจ.
    4. ืฆื•ืจ ืžื•ืคืข docker
    5. ื”ืคืขืœ ืืช molecule/default/playbook.yml.
    6. ื‘ื“ื•ืง ืื™ืžืคื•ื˜ื ืฆื™ื”.
  6. ื”ืคืขืœ ืžื‘ื—ื ื™ ืื™ื ื˜ื’ืจืฆื™ื”
  7. ืกื™ื•ื

ื™ื•ื ืžืก' 271: ื’ื•ืจื ืื•ื˜ื•ื‘ื•ืก

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื‘ืชื—ื™ืœื”, ื‘ื•ืฆืขื” ืฉื™ื‘ื•ืฅ ืžื—ื“ืฉ ืขืœ ื™ื“ื™ ืงื‘ื•ืฆื” ืงื˜ื ื” ืฉืœ ืฉื ื™ื™ื ืื• ืฉืœื•ืฉื” ืื ืฉื™ื. ื”ื ื‘ื—ื ื• ืืช ื”ืงื•ื“ ื‘ืžืืกื˜ืจ. ืขื ื”ื–ืžืŸ, ื”ืฆื•ื•ืช ืคื™ืชื— ื™ื“ืข ื›ื™ืฆื“ ืœื›ืชื•ื‘ ืงื•ื“ ื•ืกืงื™ืจืช ืงื•ื“ ืชืจืžื• ืœื”ืคืฆืช ื”ื™ื“ืข ืขืœ ื”ืชืฉืชื™ืช ื•ื›ื™ืฆื“ ื”ื™ื ืคื•ืขืœืช. ื’ื•ืœืช ื”ื›ื•ืชืจืช ื›ืืŸ ื”ื™ื™ืชื” ืฉื”ืกื•ืงืจื™ื ื ื‘ื—ืจื• ืื—ื“ ืื—ื“, ืœืคื™ ืœื•ื— ื–ืžื ื™ื, ื›ืœื•ืžืจ. ื‘ืžื™ื“ื” ืžืกื•ื™ืžืช ืฉืœ ืกื‘ื™ืจื•ืช ืชื˜ืคืก ืœืชื•ืš ืคื™ืกืช ืชืฉืชื™ืช ื—ื“ืฉื”.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื•ืฆืจื™ืš ืœื”ื™ื•ืช ื›ืืŸ ื ื•ื—. ื ื•ื— ืœืขืฉื•ืช ืกืงื™ืจื”, ืœืจืื•ืช ื‘ืžืกื’ืจืช ืื™ื–ื• ืžืฉื™ืžื” ื‘ื•ืฆืขื”, ื•ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืœ ื”ื“ื™ื•ื ื™ื. ืฉื™ืœื‘ื ื• ื’'ื ืงื™ื ืก + ื‘ื™ื˜ื‘ื•ืงื˜ + ื’'ื™ืจื”.

ืื‘ืœ ื›ื›ื–ื”, ืกืงื™ืจื” ื”ื™ื ืœื ืชืจื•ืคืช ืคืœื; ืื™ื›ืฉื”ื•, ื ื›ื ืกื ื• ืœืงื•ื“ ื”ืžืืกื˜ืจ, ืฉื’ืจื ืœื ื• ืœืžื‘ื—ื ื™ ืคืœื•ืค:

- get_url:
    url: "{{ actk_certs }}/{{ item.1 }}"
    dest: "{{ actk_src_tmp }}/"
    username: "{{ actk_mvn_user }}"
    password: "{{ actk_mvn_pass }}"
  with_subelements:
    - "{{ actk_cert_list }}"
    - "{{ actk_certs }}"
  delegate_to: localhost

- copy:
    src: "{{ actk_src_tmp }}/{{ item.1 }}"
    dest: "{{ actk_dst_tmp }}"
  with_subelements:
    - "{{ actk_cert_list }}"
    - "{{ actk_certs }}"

ืื—ืจ ื›ืš ืชื™ืงื ื• ืืช ื–ื”, ืื‘ืœ ื”ืฉืืจื™ื•ืช ื ืฉืืจื•.

get_url:
    url: "{{ actk_certs }}/{{ actk_item }}"
    dest: "{{ actk_src_tmp }}/{{ actk_item }}"
    username: "{{ actk_mvn_user }}"
    password: "{{ actk_mvn_pass }}"
  loop_control:
    loop_var: actk_item
  with_items: "{{ actk_cert_list }}"
  delegate_to: localhost

- copy:
    src: "{{ actk_src_tmp }}/{{ actk_item }}"
    dest: "{{ actk_dst_tmp }}"
  loop_control:
    loop_var: actk_item
  with_items: "{{ actk_cert_list }}"

ื™ื•ื ืžืก' 311: ื–ื™ืจื•ื– ื‘ื“ื™ืงื•ืช

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืขื ื”ื–ืžืŸ, ื”ื™ื• ื™ื•ืชืจ ื‘ื“ื™ืงื•ืช, ื”ื‘ื ื™ื™ื” ืจืฆื” ืœืื˜ ื™ื•ืชืจ, ืขื“ ืฉืขื” ื‘ืžืงืจื” ื”ื’ืจื•ืข. ื‘ืื—ื“ ื”ืจื˜ืจื•ืื™ื ื”ื™ื” ืžืฉืคื˜ ื›ืžื• "ื˜ื•ื‘ ืฉื™ืฉ ืžื‘ื—ื ื™ื, ืื‘ืœ ื”ื ืื™ื˜ื™ื™ื". ื›ืชื•ืฆืื” ืžื›ืš, ื ื˜ืฉื ื• ืืช ืžื‘ื—ื ื™ ื”ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื•ื”ืชืืžื ื• ืื•ืชื ืœ-Docker ื›ื“ื™ ืœื”ืคื•ืš ืื•ืชื• ืœืžื”ื™ืจ ื™ื•ืชืจ. ื›ืžื• ื›ืŸ, ื”ื—ืœืคื ื• ืืช testinfra ื‘-Ansible Verifier ื›ื“ื™ ืœื”ืคื—ื™ืช ืืช ืžืกืคืจ ื”ื›ืœื™ื ื‘ืฉื™ืžื•ืฉ.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื‘ืื•ืคืŸ ืงืคื“ื ื™, ื”ื™ื™ืชื” ืžืขืจื›ืช ืฉืœ ืืžืฆืขื™ื:

  1. ืขื‘ื•ืจ ืืœ docker.
  2. ื”ืกืจ ืืช ื‘ื“ื™ืงืช ื”ืชืคืงื™ื“ื™ื, ื”ืžื•ื›ืคืœืช ืขืงื‘ ืชืœื•ืช.
  3. ืœื”ื’ื“ื™ืœ ืืช ืžืกืคืจ ื”ืขื‘ื“ื™ื.
  4. ืกื“ืจ ืจื™ืฆืช ืžื‘ื—ืŸ.
  5. ื™ื›ื•ืœืช ืžื•ืš ALL ืžืงื•ืžื™ืช ืขื ืคืงื•ื“ื” ืื—ืช.

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื›ืชื•ืฆืื” ืžื›ืš, ื’ื ืฆื™ื ื•ืจ ืขืœ ื’'ื ืงื™ื ืก ื”ื™ื” ืžืื•ื—ื“

  1. ืฆื•ืจ ืฉืœื‘ื™ ื‘ื ื™ื™ื”.
  2. ืžื•ืš ื”ื›ืœ ื‘ืžืงื‘ื™ืœ.
  3. ื”ืคืขืœ ืฉืœื‘ื™ ืชืคืงื™ื“ื™ ืžื‘ื—ืŸ ื‘ืžืงื‘ื™ืœ.
  4. ืกื™ื•ื.

ืœืงื—ื™ื ืฉื”ื•ืคืง

ื”ื™ืžื ืข ืžืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื

Ansible ืžืฉืชืžืฉ ื‘ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื, ื™ืฉ ืคื™ืชืจื•ืŸ ื—ืœืงื™ ื‘ื˜ื•ืคืก ืชืคืงื™ื“ื™ื_ืคืจื˜ื™ื™ื, ืื‘ืœ ื–ื• ืœื ืชืจื•ืคืช ืคืœื.

ืชืŸ ืœื™ ืœืชืช ืœืš ื“ื•ื’ืžื”. ืชืŸ ืœื ื• role_a ะธ role_b

# cat role_a/defaults/main.yml
---
msg: a

# cat role_a/tasks/main.yml
---
- debug:
    msg: role_a={{ msg }}

# cat role_b/defaults/main.yml
---
msg: b

# cat role_b/tasks/main.yml
---
- set_fact:
    msg: b
- debug:
    msg: role_b={{ msg }}

- hosts: localhost
  vars:
    msg: hello
  roles:
    - role: role_a
    - role: role_b
  tasks:
    - debug:
        msg: play={{msg}}

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ื”ื“ื‘ืจ ื”ืžืฆื—ื™ืง ื”ื•ื ืฉื”ืชื•ืฆืื” ืฉืœ ืกืคืจื™ ืžืฉื—ืง ืชื”ื™ื” ืชืœื•ื™ื” ื‘ื“ื‘ืจื™ื ืฉืœื ืชืžื™ื“ ื‘ืจื•ืจื™ื, ื›ืžื• ื”ืกื“ืจ ืฉื‘ื• ืžื•ืคื™ืขื™ื ืชืคืงื™ื“ื™ื. ืœืžืจื‘ื” ื”ืฆืขืจ, ื–ื”ื• ื”ื˜ื‘ืข ืฉืœ Ansible ื•ื”ื“ื‘ืจ ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืฉื ื™ืชืŸ ืœืขืฉื•ืช ื”ื•ื ืœื”ืฉืชืžืฉ ื‘ื”ืกื›ืžื” ื›ืœืฉื”ื™, ืœืžืฉืœ, ื‘ืชื•ืš ืชืคืงื™ื“, ื”ืฉืชืžืฉ ืจืง ื‘ืžืฉืชื ื” ื”ืžืชื•ืืจ ื‘ืชืคืงื™ื“ ื–ื”.

ืจืข: ื”ืฉืชืžืฉ ื‘ืžืฉืชื ื” ื’ืœื•ื‘ืœื™.

# cat roles/some_role/tasks/main.yml
---
debug:
  var: java_home

ื˜ื•ื‘: ื• defaults ืœื”ื’ื“ื™ืจ ืืช ื”ืžืฉืชื ื™ื ื”ื“ืจื•ืฉื™ื ื•ื‘ื”ืžืฉืš ืœื”ืฉืชืžืฉ ืจืง ื‘ื”ื.

# cat roles/some_role/defaults/main.yml
---
r__java_home:
 "{{ java_home | default('/path') }}"

# cat roles/some_role/tasks/main.yml
---
debug:
  var: r__java_home

ืžืฉืชื ื™ ืชืคืงื™ื“ ืงื™ื“ื•ืžืช

ืจืข: ื”ืฉืชืžืฉ ื‘ืžืฉืชื ื” ื’ืœื•ื‘ืœื™.

# cat roles/some_role/defaults/main.yml
---
db_port: 5432

ื˜ื•ื‘: ื‘ืชืคืงื™ื“ื™ื ืœืžืฉืชื ื™ื, ื”ืฉืชืžืฉ ื‘ืžืฉืชื ื™ื ืขื ืงื™ื“ื•ืžืช ืฉื ื”ืชืคืงื™ื“; ื–ื”, ืขืœ ื™ื“ื™ ื”ืชื‘ื•ื ื ื•ืช ื‘ืžืœืื™, ื™ืงืœ ืขืœ ื”ื”ื‘ื ื” ืžื” ืงื•ืจื”.

# cat roles/some_role/defaults/main.yml
---
some_role__db_port: 5432

ื”ืฉืชืžืฉ ื‘ืžืฉืชื ื” ื‘ืงืจืช ืœื•ืœืื”

ืจืข: ื”ืฉืชืžืฉ ื‘ืžืฉืชื ื” ืกื˜ื ื“ืจื˜ื™ ื‘ืœื•ืœืื•ืช item, ืื ื”ืžืฉื™ืžื”/ืกืคืจ ื”ื”ืคืขืœื” ื”ื–ื” ื ื›ืœืœ ืื™ืคืฉื”ื•, ื”ื“ื‘ืจ ืขืœื•ืœ ืœื”ื•ื‘ื™ืœ ืœื”ืชื ื”ื’ื•ืช ื‘ืœืชื™ ืฆืคื•ื™ื”

---
- hosts: localhost
  tasks:
    - debug:
        msg: "{{ item }}"
      loop:
        - item1
        - item2

ื˜ื•ื‘: ื”ื’ื“ืจ ืžื—ื“ืฉ ืžืฉืชื ื” ื‘ืœื•ืœืื” via loop_var.

---
- hosts: localhost
  tasks:
    - debug:
        msg: "{{ item_name }}"
      loop:
        - item1
        - item2
      loop_control:
        loop_var: item_name

ื‘ื“ื•ืง ืžืฉืชื ื™ ืงืœื˜

ื”ืกื›ืžื ื• ืœื”ืฉืชืžืฉ ื‘ืงื™ื“ื•ืžื•ืช ืžืฉืชื ื•ืช; ืœื ื™ื”ื™ื” ืžื™ื•ืชืจ ืœื‘ื“ื•ืง ืฉื”ืŸ ืžื•ื’ื“ืจื•ืช ื›ืคื™ ืฉืื ื• ืžืฆืคื™ื, ื•ืœื“ื•ื’ืžื, ืื™ื ืŸ ื ื“ื—ืงื•ืช ืขืœ ื™ื“ื™ ืขืจืš ืจื™ืง

ื˜ื•ื‘: ื‘ื“ื•ืง ืžืฉืชื ื™ื.

- name: "Verify that required string variables are defined"
  assert:
    that: ahs_var is defined and ahs_var | length > 0 and ahs_var != None
    fail_msg: "{{ ahs_var }} needs to be set for the role to work "
    success_msg: "Required variables {{ ahs_var }} is defined"
  loop_control:
    loop_var: ahs_var
  with_items:
    - ahs_item1
    - ahs_item2
    - ahs_item3

ื”ื™ืžื ืข ืžืžื™ืœื•ื ื™ ื’ื™ื‘ื•ื‘, ื”ืฉืชืžืฉ ื‘ืžื‘ื ื” ืฉื˜ื•ื—

ืื ืชืคืงื™ื“ ืžืฆืคื” ืœ-hash/ืžื™ืœื•ืŸ ื‘ืื—ื“ ืžื”ืคืจืžื˜ืจื™ื ืฉืœื•, ืื– ืื ื ืจืฆื” ืœืฉื ื•ืช ืืช ืื—ื“ ืžืคืจืžื˜ืจื™ ื”ื™ืœื“, ื ืฆื˜ืจืš ืœืขืงื•ืฃ ืืช ื›ืœ ื”-hash/ืžื™ืœื•ืŸ, ืžื” ืฉื™ื’ื“ื™ืœ ืืช ืžื•ืจื›ื‘ื•ืช ื”ืชืฆื•ืจื”.

ืจืข: ื”ืฉืชืžืฉ ื‘-hash/ืžื™ืœื•ืŸ.

---
user:
  name: admin
  group: admin

ื˜ื•ื‘: ื”ืฉืชืžืฉ ื‘ืžื‘ื ื” ืžืฉืชื ื” ืฉื˜ื•ื—.

---
user_name: admin
user_group: "{{ user_name }}"

ืฆื•ืจ ืกืคืจื™ ืžืฉื—ืง ื•ืชืคืงื™ื“ื™ื ื—ืกืจื™ ืขื•ืฆืžื”

ืชืคืงื™ื“ื™ื ื•ืกืคืจื™ ืžืฉื—ืง ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ืื™ืžืคื•ื˜ื ื˜ื™ื™ื, ื›ื™ ืžืคื—ื™ืช ืกื—ื™ืคื” ืฉืœ ืชืฆื•ืจื” ื•ืคื—ื“ ืœืฉื‘ื•ืจ ืžืฉื”ื•. ืื‘ืœ ืื ืืชื” ืžืฉืชืžืฉ ื‘ืžื•ืœืงื•ืœื”, ืื– ื–ื• ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ื”ื™ืžื ืข ืžืฉื™ืžื•ืฉ ื‘ืžื•ื“ื•ืœื™ื ืฉืœ ืžืขื˜ืคืช ืคืงื•ื“ื”

ืฉื™ืžื•ืฉ ื‘ืžื•ื“ื•ืœ ืžืขื˜ืคืช ืžื‘ื™ื ืœืคืจื“ื™ื’ืžืช ืชื™ืื•ืจ ืฆื™ื•ื•ื™, ื‘ืžืงื•ื ื–ื• ื”ื”ืฆื”ืจืชื™ืช, ืฉื”ื™ื ื”ืœื™ื‘ื” ืฉืœ Ansible.

ื‘ื“ื•ืง ืืช ื”ืชืคืงื™ื“ื™ื ืฉืœืš ื‘ืืžืฆืขื•ืช ืžื•ืœืงื•ืœื”

ืžื•ืœืงื•ืœื” ื”ื™ื ื“ื‘ืจ ืžืื•ื“ ื’ืžื™ืฉ, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื›ืžื” ืชืจื—ื™ืฉื™ื.

ืžื•ืœืงื•ืœื” ืžื•ืคืขื™ื ืžืจื•ื‘ื™ื

ะ’ molecule.yml ื‘ืกืขื™ืฃ platforms ืืชื” ื™ื›ื•ืœ ืœืชืืจ ืžืืจื—ื™ื ืจื‘ื™ื ืฉืืชื” ื™ื›ื•ืœ ืœืคืจื•ืก.

---
    driver:
      name: docker
    platforms:
      - name: postgresql-instance
        hostname: postgresql-instance
        image: registry.example.com/postgres10:latest
        pre_build_image: true
        override_command: false
        network_mode: host
      - name: app-instance
        hostname: app-instance
        pre_build_image: true
        image: registry.example.com/docker_centos_ansible_tests
        network_mode: host

ื‘ื”ืชืื ืœื›ืš, ื”ืžืืจื—ื™ื ื”ืœืœื• ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช converge.yml ืฉื™ืžื•ืฉ:

---
- name: Converge all
  hosts: all
  vars:
    ansible_user: root
  roles:
    - role: some_role

- name: Converge db
  hosts: db-instance
  roles:
    - role: some_db_role

- name: Converge app
  hosts: app-instance
  roles:
    - role: some_app_role

ืžืืžืช ืกื‘ื™ืจ

ื‘ืžื•ืœืงื•ืœื” ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘- ansible ื›ื“ื™ ืœื‘ื“ื•ืง ืฉื”ืžื•ืคืข ื”ื•ื’ื“ืจ ื ื›ื•ืŸ, ื™ืชืจ ืขืœ ื›ืŸ, ื–ื• ื”ื™ื™ืชื” ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืžืื– ืฉื—ืจื•ืจ 3. ื–ื” ืœื ื’ืžื™ืฉ ื›ืžื• testinfra/inspec, ืื‘ืœ ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื‘ื“ื•ืง ืฉืชื•ื›ืŸ ื”ืงื•ื‘ืฅ ืชื•ืื ืืช ื”ืฆื™ืคื™ื•ืช ืฉืœื ื•:

---
- name: Verify
  hosts: all
  tasks:
    - name: copy config
      copy:
        src: expected_standalone.conf
        dest: /root/wildfly/bin/standalone.conf
        mode: "0644"
        owner: root
        group: root
      register: config_copy_result

    - name: Certify that standalone.conf changed
      assert:
        that: not config_copy_result.changed

ืื• ืœืคืจื•ืก ืืช ื”ืฉื™ืจื•ืช, ื”ืžืชืŸ ืขื“ ืฉื”ื•ื ื™ื”ืคื•ืš ืœื–ืžื™ืŸ ื•ื‘ืฆืข ื‘ื“ื™ืงืช ืขืฉืŸ:

---
  - name: Verify
    hosts: solr
    tasks:
      - command: /blah/solr/bin/solr start -s /solr_home -p 8983 -force
      - uri:
          url: http://127.0.0.1:8983/solr
          method: GET
          status_code: 200
        register: uri_result
        until: uri_result is not failed
        retries: 12
        delay: 10
      - name: Post documents to solr
        command: /blah/solr/bin/post -c master /exampledocs/books.csv

ื”ื›ื ืก ื”ื™ื’ื™ื•ืŸ ืžื•ืจื›ื‘ ืœืžื•ื“ื•ืœื™ื ื•ืชื•ืกืคื™ื

Ansible ืชื•ืžืš ื‘ื’ื™ืฉื” ื”ืฆื”ืจืชื™ืช, ื›ืš ืฉื›ืืฉืจ ืืชื” ืขื•ืฉื” ื”ืกืชืขืคื•ืช ืงื•ื“, ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืฉืœ ื ืชื•ื ื™ื, ืžื•ื“ื•ืœื™ ืžืขื˜ืคืช, ื”ืงื•ื“ ื”ื•ืคืš ืœื”ื™ื•ืช ืงืฉื” ืœืงืจื™ืื”. ื›ื“ื™ ืœื”ื™ืœื—ื ื‘ื–ื” ื•ืœืฉืžื•ืจ ืขืœ ื–ื” ืคืฉื•ื˜ ืœื”ื‘ื ื”, ื–ื” ืœื ื™ื”ื™ื” ืžื™ื•ืชืจ ืœื”ื™ืœื—ื ื‘ืžื•ืจื›ื‘ื•ืช ื”ื–ื• ืขืœ ื™ื“ื™ ื™ืฆื™ืจืช ืžื•ื“ื•ืœื™ื ืžืฉืœืš.

ืกื™ื›ื•ื ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื

  1. ื”ื™ืžื ืข ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื.
  2. ืžืฉืชื ื™ ืชืคืงื™ื“ ืงื™ื“ื•ืžืช.
  3. ื”ืฉืชืžืฉ ื‘ืžืฉืชื ื” ื‘ืงืจืช ืœื•ืœืื”.
  4. ื‘ื“ื•ืง ืžืฉืชื ื™ ืงืœื˜.
  5. ื”ื™ืžื ืข ืžืžื™ืœื•ื ื™ ื’ื™ื‘ื•ื‘, ื”ืฉืชืžืฉ ื‘ืžื‘ื ื” ืฉื˜ื•ื—.
  6. ืฆื•ืจ ืกืคืจื™ ืžืฉื—ืง ื•ืชืคืงื™ื“ื™ื ื—ืกืจื™ ืขื•ืฆืžื”.
  7. ื”ื™ืžื ืข ืžืฉื™ืžื•ืฉ ื‘ืžื•ื“ื•ืœื™ื ืฉืœ ืžืขื˜ืคืช ืคืงื•ื“ื”.
  8. ื‘ื“ื•ืง ืืช ื”ืชืคืงื™ื“ื™ื ืฉืœืš ื‘ืืžืฆืขื•ืช ืžื•ืœืงื•ืœื”.
  9. ื”ื›ื ืก ื”ื™ื’ื™ื•ืŸ ืžื•ืจื›ื‘ ืœืžื•ื“ื•ืœื™ื ื•ืชื•ืกืคื™ื.

ืžืกืงื ื”

ืื™ืš ืœื”ืชื—ื™ืœ ืœื‘ื“ื•ืง ืืช Ansible, ืœืฉื—ื–ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืขื•ื“ ืฉื ื” ื•ืœื ืœื”ืฉืชื’ืข

ืืชื” ืœื ื™ื›ื•ืœ ืคืฉื•ื˜ ืœืœื›ืช ื•ืœื—ื“ืฉ ืืช ื”ืชืฉืชื™ืช ื‘ืคืจื•ื™ืงื˜, ื’ื ืื ื™ืฉ ืœืš IaC. ื–ื”ื• ืชื”ืœื™ืš ืืจื•ืš ื”ื“ื•ืจืฉ ืกื‘ืœื ื•ืช, ื–ืžืŸ ื•ื™ื“ืข.

UPD1 2020.05.01 20:30 - ืขื‘ื•ืจ ืคืจื•ืคื™ืœ ืจืืฉื™ ืฉืœ ืกืคืจื™ ืžืฉื—ืง ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ callback_whitelist = profile_tasks ืœื”ื‘ื™ืŸ ืžื” ื‘ื“ื™ื•ืง ืขื•ื‘ื“ ืœืื•ืจืš ื–ืžืŸ. ื•ืื– ืื ื—ื ื• ืขื•ื‘ืจื™ื ืงืœืืกื™ืงื•ืช ื”ืืฆื” ืื ืกื™ื‘ื™ืช. ืืชื” ื™ื›ื•ืœ ื’ื ืœื ืกื•ืช ืžื™ื˜ื•ื’ืŸ
UPD2 2020.05.03 16:34 - ื’ืจืกื” ืื ื’ืœื™ืช

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”