เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ–เบญเบ”เบ‚เปเป‰เบ„เบงเบฒเบก เบเบฒเบ™เบชเบฐเปเบ”เบ‡ เบชเบธเบ” DevOps-40 2020-03-18:

เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ—เบตเบชเบญเบ‡, เบฅเบฐเบซเบฑเบ”เปƒเบ”เป†เบเปเปˆเบเบฒเบเป€เบ›เบฑเบ™เบกเปเบฅเบฐเบ”เบปเบ, เป€เบžเบฒเบฐเบงเปˆเบฒ เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป€เบฅเบตเปˆเบกเปเบเบเบญเบญเบเบˆเบฒเบเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ—เบตเปˆเบฎเบธเบ™เปเบฎเบ‡. เบญเบฑเบ™เบ™เบตเป‰เบšเปเปˆเบงเปˆเบฒเบ”เบต เบซเบผเบทเบšเปเปˆเบ”เบต, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เปƒเบซเป‰เบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเป‚เบ•เป‰เปเบเป‰เบ‡ เปเบฅเบฐเบ•เป‰เบญเบ‡เบขเบนเปˆเบเบฑเบš. เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™ refactoring. เบ›เบฑเบšเบ›เบธเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”. เปƒเบซเป‰เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ refactor Ansible เปƒเบ™เบ›เบตเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบšเปเปˆเปƒเบซเป‰ Crazy.

เบเบฒเบ™เป€เบเบตเบ”เบ‚เบญเบ‡เบกเปเบฅเบฐเบ”เบปเบ

เบงเบฑเบ™เบ—เบต 1: เบ„เบปเบ™เป€เบˆเบฑเบšเบชเบนเบ™

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบ„เบฑเป‰เบ‡เปœเบถเปˆเบ‡เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. เบกเบฑเบ™เบกเบตเบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Dev เปเบฅเบฐเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ Ops. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™: เบงเบดเบ—เบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบ—เบตเบกเบ‡เบฒเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบ”เป‰เบงเบเบงเบดเบ—เบตเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ Ansible เป€เบžเบทเปˆเบญ synchronize เบ„เบงเบฒเบกเบฎเบนเป‰เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ—เบตเบก Dev เปเบฅเบฐ Ops.

เบงเบฑเบ™เบ—เบต 89: เบเบฒเบ™เป€เบเบตเบ”เบ‚เบญเบ‡เบกเปเบฅเบฐเบ”เบปเบ

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ•เบปเบงเป€เบญเบ‡, เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบกเบฑเบ™เปƒเบซเป‰เบ”เบตเบ—เบตเปˆเบชเบธเบ”เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เปเบ•เปˆเบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบกเปเบฅเบฐเบ”เบปเบ. เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบ™เบงเปƒเบ”?

  • เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบตโ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบญเบฑเบ™โ€‹เบฎเบตเบšโ€‹เบ”เปˆเบงเบ™โ€‹เบขเบนเปˆโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹, เปƒเบซเป‰โ€‹เบ‚เบญเบ‡โ€‹เป€เบฎเบฑเบ”โ€‹เบเบฒเบ™ hack เป€เบ›เบทเป‰เบญเบ™โ€‹เปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบกเบฑเบ™โ€‹.
  • เบ—เปˆเบฒเบ™เบšเปเปˆ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เบฝเบ™เป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐเบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆ เบเบณ เบฅเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.
  • เบ‚เป‰เบญเบเบฎเบนเป‰เบˆเบฑเบ 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, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบฎเบนเบšเปเบšเบš IaC เบ—เบตเปˆเป„เบ”เป‰เบ„เบดเบ”เป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™ เปเบฅเบฐ เบ›เบฐเบ•เบดเบšเบฑเบ”เบšเปเปˆเป„เบ”เป‰เบ•เบฒเบกเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰ / เบ—เบธเบฅเบฐเบเบดเบ” / เบ—เบตเบกเบ‡เบฒเบ™เบญเบทเปˆเบ™เป†, เปเบฅเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบเปเปˆเบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบเบญเบกเบฎเบฑเบš. เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบกเบฒเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™.

IaC refactoring

เบกเบทเป‰เบ—เบต 139: เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ refactor เปเบ—เป‰เป†เบšเป?

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบŸเป‰เบฒเบงเป„เบ›เบซเบฒ refactor, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ•เบญเบšเบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡:

  1. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰?
  2. เป€เบˆเบปเป‰เบฒเบกเบตเป€เบงเบฅเบฒเบšเป?
  3. เบ„เบงเบฒเบกเบฎเบนเป‰เบžเบฝเบ‡เบžเปเบšเป?

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบ•เบญเบšเบ„เปเบฒเบ–เบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบซเบผเบทเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™ ( เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบˆเบฒเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš 200 เป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปเบฅเบฐเบเบงเบกเป€เบญเบปเบฒเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

เบกเบทเป‰เบ—เบต 149: เบเบฒเบ™เบเบฐเบเบฝเบก refactoring

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบเบฐเบเบฝเบก. เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™, เบŠเบญเบเบซเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบšเบฑเบ™เบซเบฒเปเบฅเบฐเบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบžเบงเบเป€เบฎเบปเบฒเบšเบฑเบ™เบ—เบถเบเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบšเบฒเบ‡เบญเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™เบˆเบธเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบ„เปเบฒเบ–เบฒเบกเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบงเปˆเบฒ "เบญเบฑเบ™เปƒเบ”เบ”เบตเบ—เบตเปˆเบชเบธเบ”?" เบซเบผเบท "เบญเบฑเบ™เปƒเบ”เบ–เบทเบเบ•เป‰เบญเบ‡?" เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบนเบ™เป€เบชเบเบ—เบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒ stuck เบเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ” เปเบšเปˆเบ‡โ€‹เปเบเบโ€‹เปเบฅเบฐโ€‹เบ›เบปเบโ€‹เบ„เบญเบ‡โ€‹: เบžเบงเบเป€เบฎเบปเบฒเปเบเบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบญเบญเบเป€เบ›เบฑเบ™เบ•เปˆเบญเบ™เบ™เป‰เบญเบเป†/เบญเบดเบ”. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบง, เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เป€เบฎเบฑเบ”, เบเบงเบกเป€เบญเบปเบฒเบกเบฑเบ™เบ”เป‰เบงเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เบกเบฑเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบขเป‰เบฒเบ™เบเบปเบงเบ—เบตเปˆเบˆเบฐเบ—เปเบฒเบฅเบฒเบเบชเบดเปˆเบ‡เปƒเบ”.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เป‚เบ„เบ‡โ€‹เบฅเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹เปเบฅเบฐโ€‹เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เบกเบฑเบ™โ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เบเปˆเบฒเบงโ€‹เป€เบ–เบดเบ‡ pyramid เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป‚เบ„เบ‡โ€‹เบฅเปˆเบฒเบ‡โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบงเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™: เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบˆเบฒเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป„เบงเบฅเบฒเบ„เบฒเบ–เบทเบเบ—เบตเปˆเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เป€เบŠเบฑเปˆเบ™: indentation, เป„เบ›เบซเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ•เบฑเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบฒเบ„เบฒเปเบžเบ‡เบ—เบตเปˆ deploy เป‚เบ„เบ‡เบฅเปˆเบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบปเบ”เบชเบญเบš Ansible

เบเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ›เบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เบ‚เป‰เบญเบเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ.

เบงเบฑเบ™เบ—เบต -997: เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡ SDS

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเบ—เบปเบ”เบชเบญเบš Ansible เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ SDS (Software Defined Storage). เบกเบตเบšเบปเบ”เบ„เบงเบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰
เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบฅเบฒเบเบฅเบปเบ”เบ–เบตเบšเบœเปˆเบฒเบ™เป„เบกเป‰เบ„เป‰เบญเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบ•เปˆเปƒเบ™เบชเบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบ”เป‰เบงเบ pyramid เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš inverted เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒ 60-90 เบ™เบฒเบ—เบตเปƒเบ™เบซเบ™เบถเปˆเบ‡เบšเบปเบ”เบšเบฒเบ”, เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™. เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš e2e, i.e. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบ•เบฑเบกโ€‹เบ—เบตเปˆโ€‹เปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบกเบฑเบ™โ€‹. เบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ”เบดเบ”เบฅเบปเบ”เบ–เบตเบšเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เปเบ•เปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบญเบกเบฎเบฑเบš, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡.

เบกเบทเป‰ # -701: เป€เบฎเบทเบญเบ™เบ„เบปเบง Ansible เปเบฅเบฐเบ—เบปเบ”เบชเบญเบš

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบ‚เบญเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบ„เบดเบ”โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบš Ansible เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบ—เบตเปˆโ€‹เบเบฝเบกโ€‹เบžเป‰เบญเบกโ€‹, เบ„เบทโ€‹เบซเป‰เบญเบ‡โ€‹เบ„เบปเบงโ€‹เบ—เบปเบ”โ€‹เบชเบญเบš / kitchen-ci เปเบฅเบฐ inspecโ€‹. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡ Ruby (เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เป€เบšเบดเปˆเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบš Habrรฉ: เบœเบนเป‰เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก YML เบเบฑเบ™เบขเบฒเบเบ—เบปเบ”เบชเบญเบš Ansible เบšเป?) เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเป„เบงเบ‚เบถเป‰เบ™, เบ›เบฐเบกเบฒเบ™ 40 เบ™เบฒเบ—เบตเบชเปเบฒเบฅเบฑเบš 10 เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เปเบฅเบฐเปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบžเบฒเบเปƒเบ™.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบเบฒเบ™เปเบเป‰เป„เบ‚เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆเบกเบตเบ•เบฐเบเบญเบ™เบšเบฒเบ‡เบญเบฑเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป€เบกเบทเปˆเบญเบˆเปเบฒเบ™เบงเบ™เบ„เบปเบ™เบ—เบตเปˆเบ–เบทเบเบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เป€เบ–เบดเบ‡ 13 เบšเบปเบ”เบšเบฒเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐ 2 เบšเบปเบ”เบšเบฒเบ” meta เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบฅเบตเปˆเบกเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš 70 เบ™เบฒเบ—เบต, เป€เบŠเบดเปˆเบ‡เป€เบเบทเบญเบš 2 เป€เบ—เบปเปˆเบฒ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš XP (เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบฎเบธเบ™เปเบฎเบ‡) เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบžเบฒเบฐเบงเปˆเบฒ ... เบšเปเปˆเบกเบตเปƒเบœเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเปเบ–เป‰เบฒ 70 เบ™เบฒเบ—เบต. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เบงเบดเบ—เบตเบเบฒเบ™

เบกเบทเป‰ # -601: Ansible เปเบฅเบฐเป‚เบกเป€เบฅเบเบธเบ™

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

Conceptually, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš testkitchen, เบžเบฝเบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเป‰เบฒเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบปเบ”เบšเบฒเบ”เป€เบ›เบฑเบ™ docker เปเบฅเบฐเบ›เปˆเบฝเบ™ stack เป„เบ”เป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบงเบฅเบฒเป„เบ”เป‰เบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡ 20-25 เบ™เบฒเบ—เบตเบชเปเบฒเบฅเบฑเบš 7 เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบšเบปเบ”เบšเบฒเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ›เบฑเบ™ 17 เปเบฅเบฐ linting 45 เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”, เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ™เบตเป‰เปƒเบ™ 28 เบ™เบฒเบ—เบตเบเปˆเบฝเบงเบเบฑเบš 2 jenkins เบชเปเบฒเบฅเบญเบ‡.

เบงเบฑเบ™เบ—เบต #167: เป€เบžเบตเปˆเบกเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible เป€เบ‚เบปเป‰เบฒเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐ, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบชเบฑเบ‡เบ‚เบญเบ™เบขเปˆเบฒเบ‡เบฎเบตเบšเบ”เปˆเบงเบ™. เบงเบฝเบเบ‡เบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ—เปเบฒเบฅเบฒเบเบกเบฑเบ™เป€เบ›เบฑเบ™เบ•เปˆเบญเบ™เบ™เป‰เบญเบเป†เปเบฅเบฐเบเบดเบ™เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบŠเป‰เบฒเบ‡เบ”เป‰เบงเบเบšเปˆเบงเบ‡เบเบฒเป€เบŸ. เบ•เป‰เบญเบ‡เบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบงเปˆเบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบเป‰เบฒเบงเป„เบ›เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเป„เบ›.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เปƒเบชเปˆเป€เบˆเป‰เบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบชเบฐเบ•เบดเบเป€เบเบตเปƒเบ™ closet, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบงเบฝเบเบ‡เบฒเบ™เปƒเบ™ Jira, เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ” Google Docs เปเบฅเบฐเบ‚เบฝเบ™เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบ›เบฐเบˆเบธเบšเบฑเบ™. เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบ‚เบฒเบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบšเปเปˆเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”, เบกเบฑเบ™เบˆเบฐเบเบฒเบงเปเบฅเบฐเบซเบ™เป‰เบฒเป€เบšเบทเปˆเบญเบซเบ™เปˆเบฒเบ. เบกเบฑเบ™เบšเปเปˆเปœเป‰เบฒเบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเปƒเบœเบขเบฒเบเปƒเบซเป‰เป€เบˆเบปเป‰เบฒเป€เบœเบปเบฒเบœเบฒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”, เป€เบกเบทเปˆเบญเบเบฅเป‰เบฒ, เปเบฅเบฐ เบˆเบปเบกเบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบน.

เบเบฒเบ™ refactoring เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ:

  • เบเบดเบ™เป€เบ‚เบปเป‰เบฒ.
  • เบ™เบญเบ™.
  • เบฅเบฐเบซเบฑเบ”.
  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš IaC.
  • Repeat

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เป€เบฅเบทเป‰เบกเบ„เบทเบ™เบ™เบตเป‰เบˆเบปเบ™เบเปˆเบงเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเบฑเบ™เบฅเบธเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบ•เบฑเป‰เบ‡เป„เบงเป‰.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบ—เบฑเบ™เบ—เบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบงเบฝเบเบ‡เบฒเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ linting เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡ syntax.

เบงเบฑเบ™เบ—เบต #181: Green Build Master

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

Linting เป€เบ›เบฑเบ™เบšเบฒเบ”เบเป‰เบฒเบงเบ—เปเบฒเบญเบดเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเป„เบ›เบชเบนเปˆ Green Build Master. เบ™เบตเป‰เบˆเบฐเบšเปเปˆเบ—เปเบฒเบฅเบฒเบเป€เบเบทเบญเบšเบ—เบธเบเบขเปˆเบฒเบ‡, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบตเบ‚เบฝเบงเปƒเบ™ Jenkins. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ™เบดเป„เบชเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ—เบตเบกเบ‡เบฒเบ™:

  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเบตเปเบ”เบ‡เปเบกเปˆเบ™เบšเปเปˆเบ”เบต.
  • เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบกเบฒเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบเบ”เบตเบเบงเปˆเบฒเบกเบฑเบ™เบเปˆเบญเบ™เบ—เปˆเบฒเบ™.

เบกเบทเป‰ #193: เบˆเบฒเบ linting เบเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบ

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป„เบ”เป‰เบชเป‰เบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบกเปˆเบšเบปเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป€เบ—เบทเปˆเบญเบฅเบฐเบเป‰เบฒเบง - เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ—เบ™ linting เบเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง, เบ—เปˆเบฒเบ™เบเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบกเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ idempotency. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.

เบงเบฑเบ™เบ—เบต #211: เบˆเบฒเบเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เป„เบ›เบซเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ–เบทเบเบ›เบปเบเบ„เบธเบกเบ”เป‰เบงเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ linted, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เป€เบžเบตเปˆเบกเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเปเปˆเปเบกเปˆเบ™เบ”เบดเบ™เบˆเบตเปˆเบ”เบฝเบงเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™, เปเบ•เปˆเบเบฒเบ™เบฅเบงเบกเบเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ jenkins, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆ linted เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ” / playbooks เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เปƒเบ™ containers, เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡.

Jenkins + Docker + Ansible = เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

  1. Checkout repo เปเบฅเบฐเบชเป‰เบฒเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡.
  2. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบ›เบทเป‰เบกเบซเบผเบดเป‰เบ™ lint เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™.
  3. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡ lint เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™.
  4. เบ”เปเบฒเป€เบ™เบตเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบš syntax เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™.
  5. เบ”เปเบฒเป€เบ™เบตเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบปเบ”เบšเบฒเบ”เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™.
    1. เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡ Lint.
    2. เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบญเบทเปˆเบ™เป†.
    3. เบเบงเบ”เป€เบšเบดเปˆเบ‡ syntax.
    4. เบชเป‰เบฒเบ‡ docker instance
    5. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ molecule/default/playbook.yml.
    6. เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบ„เบงเบฒเบกโ€‹เป€เบ‚เบฑเป‰เบกโ€‹เปเบ‚เบ‡โ€‹.
  6. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡
  7. เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบฎเบนเบš

เบงเบฑเบ™เบ—เบต #271: เบ›เบฑเบ”เป„เบˆเบฅเบปเบ”เป€เบก

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”, refactoring เปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ”เบเบเบธเปˆเบกเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบชเบญเบ‡เบซเบผเบทเบชเบฒเบกเบ„เบปเบ™. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™เปเบกเปˆเบšเบปเบ”. เปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒ, เบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เบงเบฒเบกเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบ„เบงเบฒเบกเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เบˆเบธเบ”เป€เบ”เบฑเปˆเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบฑเบเบ—เบปเบšเบ—เบงเบ™เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบเบซเบ™เบถเปˆเบ‡เป‚เบ”เบเบซเบ™เบถเปˆเบ‡, เบญเบตเบ‡เบ•เบฒเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, i.e. เบ”เป‰เบงเบเบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบˆเบฐเบเป‰เบฒเบงเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเปเปˆ.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เปเบฅเบฐเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบกเบฑเบ™เบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™, เป€เบšเบดเปˆเบ‡เปƒเบ™เบ‚เบญเบšเบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰, เปเบฅเบฐเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ jenkins + bitbucket + jira.

เปเบ•เปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบšเปเปˆเปเบกเปˆเบ™ panacea; เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ—เบปเบ”เบชเบญเบš flop:

- 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, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป€เบกเบทเปˆเบญเป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›, เบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™, เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเปˆเบ™เบŠเป‰เบฒเบฅเบปเบ‡, เป€เบ–เบดเบ‡เบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”. เปƒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ retros เบกเบตเบ›เบฐเป‚เบซเบเบเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบท "เบกเบฑเบ™เบ”เบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เปเบ•เปˆเบกเบฑเบ™เบŠเป‰เบฒ." เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ–เบดเป‰เบกเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เปเบฅเบฐเบ”เบฑเบ”เปเบ›เบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบš Docker เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป„เบงเบ‚เบถเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ—เบ™ testinfra เบ”เป‰เบงเบเบ•เบปเบงเบขเบฑเป‰เบ‡เบขเบทเบ™ ansible เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเปƒเบŠเป‰.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เป€เบงเบปเป‰เบฒเบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”, เบกเบตเบŠเบธเบ”เบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบเบฒเบ™:

  1. เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ docker.
  2. เป€เบญเบปเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบปเบ”เบšเบฒเบ”, เบ—เบตเปˆเบŠเป‰เปเบฒเบเบฑเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš.
  3. เป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เบชเปเบฒเบฅเบญเบ‡.
  4. เบ—เบปเบ”เบชเบญเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เปเบฅเปˆเบ™.
  5. เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™ lint เบ—เบฑเบ‡เปเบปเบ” เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบฝเบง.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, Pipeline on jenkins เบเบฑเบ‡เป„เบ”เป‰เป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบš

  1. เบชเป‰เบฒเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡.
  2. Lint เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™.
  3. เบ”เปเบฒเป€เบ™เบตเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบปเบ”เบšเบฒเบ”เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™.
  4. Finish

เบ–เบญเบ”โ€‹เบ–เบญเบ™โ€‹เบšเบปเบ”โ€‹เบฎเบฝเบ™

เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ

Ansible เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ, เบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฒเบ‡เบชเปˆเบงเบ™เปƒเบ™เบฎเบนเบšเปเบšเบš private_role_vars, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™ panacea.

เปƒเบซเป‰เบ‚เป‰เบญเบเบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒ. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบต 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, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เบฐเบซเบฅเบปเบเปเบกเปˆเบ™เบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡ playbooks เบˆเบฐเบ‚เบถเป‰เบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบชเบฐ เป€เปเบต เป„เบ›, เป€เบŠเบฑเปˆเบ™: เบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡ Ansible เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบ•เบปเบเบฅเบปเบ‡, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบฒเบเปƒเบ™เบšเบปเบ”เบšเบฒเบ”, เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเปเบ›เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ™เบตเป‰.

BAD: เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ.

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

GOOD: เบงเบต 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

เบ„เบณเบ™เบณเปœเป‰เบฒเบ•เบปเบงเปเบ›เบšเบปเบ”เบšเบฒเบ”

BAD: เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ.

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

GOOD: เปƒเบ™เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเปเบ›, เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ™เปเบฒเบซเบ™เป‰เบฒเบ”เป‰เบงเบเบŠเบทเปˆเบšเบปเบ”เบšเบฒเบ”; เบ™เบตเป‰, เป‚เบ”เบเป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบชเบดเบ™เบ„เป‰เบฒเบ„เบปเบ‡เบ„เบฑเบ‡, เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™.

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

เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบเบฒเบ™เบ„เบงเบšเบ„เบธเบก loop

BAD: เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™ loops item, เบ–เป‰เบฒเบงเบฝเบเบ‡เบฒเบ™ / playbook เบ™เบตเป‰เบ–เบทเบเบฅเบงเบกเบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡, เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”

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

GOOD: เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™ loop เบœเปˆเบฒเบ™ loop_var.

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

เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ•เบปเบงเปเบ›เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ•เบปเบโ€‹เบฅเบปเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เปเบฒโ€‹เบ™เปเบฒโ€‹เบซเบ™เป‰เบฒโ€‹เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เป„เบ”เป‰โ€‹; เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป€เบ›เบฑเบ™ superfluous เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป„เบงเป‰โ€‹เบ•เบฒเบกโ€‹เบ—เบตเปˆโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ„เบฒเบ”โ€‹เบซเบงเบฑเบ‡โ€‹เปเบฅเบฐโ€‹, เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹, เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบฅเบปเบšโ€‹เบฅเป‰เบฒเบ‡โ€‹เป‚เบ”เบโ€‹เบ„เปˆเบฒโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เป€เบ›เบปเปˆเบฒ

GOOD: เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ•เบปเบงเปเบ›.

- 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

เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก hashes, เปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฎเบฒเบšเบžเบฝเบ‡

เบ–เป‰เบฒเบšเบปเบ”เบšเบฒเบ”เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบกเบต hash/dictionary เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบกเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡เบฅเบนเบเบซเบ™เบถเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡ override hash/dictionary เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

BAD: เปƒเบŠเป‰ hash/dictionary.

---
user:
  name: admin
  group: admin

GOOD: เปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบปเบงเปเบ›เปเบ›.

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

เบชเป‰เบฒเบ‡เบ›เบถเป‰เบกเบซเบผเบดเป‰เบ™ เปเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเบšเปเปˆเป€เปเบฒเบฐเบชเบปเบก

เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปเบฅเบฐ playbooks เบˆเบฐเบ•เป‰เบญเบ‡ ideempotent, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ เปเบฅเบฐเบ„เบงเบฒเบกเบขเป‰เบฒเบ™เบเบปเบงเบ—เบตเปˆเบˆเบฐเบ—เปเบฒเบฅเบฒเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เป‚เบกเป€เบฅเบเบธเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบžเบถเบ”เบ•เบดเบเปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™ shell เบ„เปเบฒเบชเบฑเปˆเบ‡

เบเบฒเบ™เปƒเบŠเป‰เป‚เบกเบ”เบนเบ™ shell เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบกเบต paradigm เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบเบฒเบ”, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบซเบผเบฑเบเบ‚เบญเบ‡ Ansible.

เบ—เบปเบ”เบชเบญเบšเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบœเปˆเบฒเบ™เป‚เบกเป€เบฅเบเบธเบ™

เป‚เบกเป€เบฅเบเบธเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบซเบผเบฒเบ, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡.

เป‚เบกเป€เบฅเบเบธเบ™เบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡

ะ’ molecule.yml เปƒเบ™เบžเบฒเบ platforms เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบ hosts เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” deploy.

---
    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

เป€เบญเบปเบฒเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบกเบ”เบนเบ™ & plugins

Ansible เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบเบฒเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบฅเบฐเบซเบฑเบ”เบชเบฒเบ‚เบฒ, เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™, เป‚เบกเบ”เบนเบ™เปเบเบฐ, เบฅเบฐเบซเบฑเบ”เบเบฒเบเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบเบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™. เป€เบžเบทเปˆเบญเบ•เป‰เบฒเบ™เบเบฒเบ™เบ™เบตเป‰เปเบฅเบฐเบฎเบฑเบเบชเบฒเบกเบฑเบ™เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ‡เปˆเบฒเบ, เบกเบฑเบ™เบˆเบฐเบšเปเปˆ superfluous เบ—เบตเปˆเบˆเบฐเบ•เปเปˆเบชเบนเป‰เบเบฑเบšเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡.

เบชเบฐเบซเบผเบธเบšเป€เบ„เบฑเบ”เบฅเบฑเบš & Tricks

  1. เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ.
  2. เบ„เบณเบ™เบณเปœเป‰เบฒเบ•เบปเบงเปเบ›เบšเบปเบ”เบšเบฒเบ”.
  3. เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบเบฒเบ™เบ„เบงเบšเบ„เบธเบก loop.
  4. เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ•เบปเบงเปเบ›เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™.
  5. เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก hashes, เปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฎเบฒเบšเบžเบฝเบ‡.
  6. เบชเป‰เบฒเบ‡เบ›เบถเป‰เบกเบซเบผเบดเป‰เบ™ เปเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเบšเปเปˆเป€เปเบฒเบฐเบชเบปเบก.
  7. เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™ shell เบ„เปเบฒเบชเบฑเปˆเบ‡.
  8. เบ—เบปเบ”เบชเบญเบšเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบœเปˆเบฒเบ™เป‚เบกเป€เบฅเบเบธเบ™.
  9. เป€เบญเบปเบฒเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบกเบ”เบนเบ™ & plugins.

เบชเบฐเบซเบฅเบธเบš

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Ansible, refactor เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบ›เบตเปเบฅเบฐเบšเปเปˆเป„เบ› Crazy

เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเป„เบ›เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบต IaC. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบเบฒเบงเบ™เบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบญเบปเบ”เบ—เบปเบ™, เป€เบงเบฅเบฒเปเบฅเบฐเบ„เบงเบฒเบกเบฎเบนเป‰.

UPD1 2020.05.01 20:30 โ€” เบชเปเบฒโ€‹เบฅเบฑเบš profile เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹เบ‚เบญเบ‡ playbooks เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ callback_whitelist = profile_tasks เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบœเปˆเบฒเบ™ เบ„เบฅเบฒเบชเบชเบดเบเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡ Ansible. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบก เป„เบกเป‚เบ•เป€เบˆเบ™
UPD2 2020.05.03 16:34 - เบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™