
ืืึธืก ืืื ืืขืจ ืืจืึทื ืกืงืจืืคึผื ืืืืฃ :
ืกืืึทืจืืื ื ืคืื ืื ืจืืข ืืืขืจืืขืื, ืงืืื ืงืึธื ืืืขืจื ืืขืืึทื, ืืืืึทื ืขืจืฉื ืืืืขืขืก ืึธื ืืืืื ืฆื ืืืืืขืจืืืฉ ืคืื ืืึทืจื ืคืึทืงื. ืืืก ืืื ื ืืฉื ืืื ืืื ื ืืฉื ืฉืืขืื, ืก'ืืื ื ืืขืืขืืขื ืข ืืืืก ืืื ืฉืืืขืจ ืฆื ืืขื ื'ื ืืื ืืื ืืขื ืืืจืฃ ืืขืื ืืื ืืื. ืืืื ืคืื ืืขื ืคึผืจืึธืฆืขืก ืืื ืจืืคืึทืงืืขืจืื ื. ืจืขืคืึทืงืืืจืื ื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืงืึธื. ืืื ืื ืืขืฉืืืืข ืึธื ืืืืื ืืืืฃ ืืื ืฆื ืจืขืคืึทืงืืึธืจ ืึทื ืกืืืืข ืืื ืึท ืืึธืจ ืืื ื ืืฉื ืืืขืจื ืืฉืืืข.
ืื ืืขืืืจื ืคืื ืืขืืึทื
ืืึธื # 1: ืคึผืึทืฆืืขื ื ื ืื

ืืืื ืืื ืืขืืืขื ื ืืืืื ืืื ื ืคืจืืืขืงื. ืขืก ืืื ืึท ืืขืื ืึทื ืืืืืงืืื ื ืืึทื ืฉืึทืคึฟื ืืื ืึธืคึผืก ืขื ืืืฉืึทื ืืจื. ืืื ืืึธืื ืกืึทืืืื ืื ืืขืืืข ืคึผืจืึธืืืขื: ืืื ืฆื ืฆืขืืืืงืืขื ืกืขืจืืืขืจืก ืืื ืืืืคื ืึท ืึทืคึผืืึทืงืืืฉืึทื. ืืขืจ ืคึผืจืึธืืืขื ืืื ืืขืืืขื ืึทื ืืขืืขืจ ืืึทื ืฉืึทืคึฟื ืกืึทืืืื ืืขื ืคึผืจืึธืืืขื ืืื ืืืึทื ืืืืื ืืืขื. ืืื ืื ืคึผืจืืืขืงื, ืขืก ืืื ืืึทืฉืืึธืกื ืฆื ื ืืฆื Ansible ืฆื ืกืื ืืงืจืึทื ืืื ืืืืกื ืฆืืืืฉื ืื ืืขืื ืืื ืึธืคึผืก ืืืื.
ืืึธื #89: ืืขืจ ืืขืืืจื ืคืื ืืขืืึทื

ืื ืขืก ืืืืื ืืืืขืจืงื, ืืืื ืืื ืืืก ืืขืืืืื ืืื ืืื ืืขืกืืข ืืื ืืขืืืื, ืืืขืจ ืขืก ืืื ืืื ืืจืืืกืืขืฉืืขืื ืืื ืืจืืฉื. ืืื ืึทืืื ืืื ืืึธืก ืคึผืึทืกืืจื?
- ืืืจ ืืึธืื ืืึธ ืึท ืืจืื ืืืขื ืึทืจืืขื, ืืึธืื ืืื ืื ืืึธื ืึท ืฉืืืฆืืง ืืึทืง ืืื ืืขืืึธืื ืคืึทืจืจืืืื ืขืก.
- ืืืจ ืืึธื ื ืื ืืึธืื ืฆื ืฉืจืืึทืื ืืึทืงืืืืขื ืืืืฉืึทื ืืื ืึทืืฅ ืืื ืงืืึธืจ ืืืึธืก ืืื ืืขืฉืขืขื ืืฉ ืืึธ.
- ืืื ืืืืกื Ansible / Python / Bash / Terraform! ืงืืง ืืื ืืื ืงืขื ืขื ืืืกืืืืื!
- ืืื ืืื ืึท ืืึทื ืฅ ืกืืึทืง ืึธืืืขืจืคืืึธืื ืืขืืืขืืึธืคึผืขืจ ืืื ืงืึทืคึผืื ืืขื ืคึฟืื ืกืืึทืงืงืึธืืืขืจืคืืึธืื, ืืื ืืึธื ื ืื ืืืืกื ืืื ืขืก ืึทืจืืขื, ืึธืืขืจ ืขืก ืงืืงื ืงืื ืืื ืกืึทืืืื ืื ืคึผืจืึธืืืขื.
ืืื ืึท ืจืขืืืืืึทื, ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืึท ืื ืืงืึทืืคึผืจืึทืืขื ืกืืืึทื ืืืคึผ ืคืื ืงืึธื ืคึฟืึทืจ ืืืึธืก ืขืก ืืื ืงืืื ืืึทืงืืืืขื ืืืืฉืึทื, ืขืก ืืื ื ืืฉื ืงืืึธืจ ืืืึธืก ืขืก ืืื, ืฆื ืขืก ืืื ืืืจืฃ, ืึธืืขืจ ืื ืคึผืจืึธืืืขื ืืื ืึทื ืืืจ ืืึทืจืคึฟื ืฆื ืึทื ืืืืืงืืขื ืขืก, ืืึธืืืคืืฆืืจื ืขืก, ืืืืื ืงืจืึทืืฉืื ืืื ืฉืืืฆื. , ืืืื ืื ืืฆื ื ืื ืขืจืืขืจ.
- 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: ืืืืกืืงืืึทื ืคืื ืืขื ืคึผืจืึธืืืขื

ืื ืืืืืขืก ืงืึทื ืกืืืื ืืื ืืืคึผืืึทืืขื ืึทื ืืึทืง ืืึธืืขื ื ืื ืืขืจ ืืจืขืคื ืื ืืืืขืจืคืขื ืืฉื ืคืื ื ืืฆืขืจืก / ืืขืฉืขืคื / ืื ืืขืจืข ืืืื, ืืื ืื ืฆืืื ืฆื ืืึทืื ืขื ืืขืจืื ืืขื ืฆื ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืกืืกืื ืฆื ืืืื ืคึผืึทืกืืง. ืืื ืืขื ืืึธืืขื ื, ืื ืคืืจืฉืืื ื ืงืืื ืึทื ืขืก ืืื ืฆืืึทื ืฆื ื ืขืืขื ืงืึทืืฃ.
IaC ืจืขืคืึทืงืืืจืื ื
ืืึธื #139: ืฆื ืืืจ ืืึทืงืข ืืึทืจืคึฟื ืจืขืคืึทืงืืึธืจืื ื?

ืืืืืขืจ ืืืจ ืงืึทืืืฉ ืฆื ืจืขืคืึทืงืืึธืจ, ืืืจ ืืืื ืขื ืืคึฟืขืจื ืึท ื ืืืขืจ ืคืื ืืืืืืืง ืคึฟืจืืื:
- ืคืืจืืืืก ืืึธื ืืืจ ืืึทืจืคึฟื ืึทืืข ืืขื?
- ืฆื ืืืจ ืืึธืื ืฆืืึทื?
- ืืื ืืืืกื ืืขื ืื?
ืืืื ืืืจ ืืึธื ื ืื ืืืืกื ืืื ืฆื ืขื ืืคึฟืขืจื ืื ืคึฟืจืืื, ืื ืจืขืคืึทืงืืึธืจืื ื ืืืขื ืกืืฃ ืืืืืขืจ ืขืก ืืืืื ืืื, ืึธืืขืจ ืขืก ืงืขื ื ืึธืจ ืืืขืจื ืขืจืืขืจ. ืืืืึทื ืืื ืืขืจืคืึทืจืื ื ( ), ืืขืืึธืื ืืขืจ ืคึผืจืืืขืงื ืืืงืืืขื ืึท ืืงืฉื ืคึฟืึทืจ ืืืืฃ ืฆื ืคืึทืจืจืืืื ืื ืจืึธืืขืก ืืื ืืขืงื ืืื ืืื ืืขืกืฅ.
ืืึธื #149: ืคึผืจืืคึผืขืจืื ื ืื ืจืขืคืึทืงืืึธืจืื ื

ืืขืจ ืขืจืฉืืขืจ ืืึทื ืืื ืฆื ืฆืืืจืืืื. ืืึทืฉืืืกื ืืืึธืก ืืืจ ืืืขืื ืืึธื. ืฆื ืืึธื ืืึธืก, ืืืจ ืืืขืจืืขืื, ืืขืคึฟืื ืขื ืคึผืจืึธืืืขื ืืขืืืื ืืื ืืขืคึฟืื ืขื ืืืขืื ืฆื ืกืึธืืืืข ืืื. ืืืจ ืจืขืงืึธืจืืืจื ืื ืจืืืึทืืืื ื ืงืึทื ืกืขืคึผืก ืขืคืขืก, ืคึฟืึทืจ ืืืึทืฉืคึผืื ืึทื ืึทืจืืืงื ืืื ืงืึทื ืคืืืึทื ืก, ืึทืืื ืึทื ืืืขื ืื ืงืฉืื ืขืจืืืืึทื "ืืืึธืก ืืื ืืขืกืืขืจ?" ืึธืืขืจ "ืืืึธืก ืืื ืจืืืืืง?" ืืืจ ืืึธืื ื ืื ืคืึทืจืคืึทืื ืืื ืืืขืจ ืืืขื. ืืื ืืื ืืืขืจ ืคืึทื, ืืืจ ืกืืึทืง ืฆื ืืขื ืืขืืึทื ืง ืฆืขืืืืื ืืื ืืขืจืฉื: ืืืจ ืฆืขืืจืขืื ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืงืืืื ืืจืขืงืืขื / ืืจืืงืก. ืืขืจ ืฆืืืึทื ื ืึทืืึทืื ืืืจ ืฆื ื ืขืืขื ืึทื ืืคืืขืืื ืืขืจื ืฉืืืง ืคืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ, ืคึฟืึทืจืฉืืืื ืืืึธืก ืขืก ืืื, ืืขืงื ืขืก ืืื ืืขืกืฅ ืืื ืืืืฉื ืขืก ืึธื ืืืจื ืฆื ืืจืขืื ืขืคึผืขืก.

ืขืก ืืืจื ืก ืืืืก ืึทื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืขืกืืื ื ืืืขืจื ืืขืจ ืงืึธืจื ืขืจืกืืึธืื ืืื ืืึธ ืขืก ืืื ืืืขืจื ืืขืจืืึธื ืขื ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืขืกืืื ื ืคึผืืจืึทืืื. ืคึผืื ืงื ืืขืจ ืืขืืืืงืขืจ ืืขืืึทื ืง ืืืึธืก ืืื ืืื ืึทื ืืืืืงืืื ื, ืึธืืขืจ ืคึฟืึทืจ ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ: ืืืจ ืืึทื ืคืื ืืืืืง ืฉื ืขื ืืขืกืฅ ืืืึธืก ืงืึธื ืืจืึธืืืจื ืคึผืฉืื ืืืื, ืึทืืึท ืืื ืื ืืขื ืืืืฉืึทื, ืฆื ืืืึทืขืจ ืคืื-ืคืืขืืืฉื ืืขืกืฅ ืืืึธืก ืฆืขืืืืงืืขื ืื ืืื ืฆืข ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ.
ืึทื ืกืืืืข ืืขืกืืื ื ืคืจืืืื
ืืืืืขืจ ืืืจ ืืืื ืฆื ืืึทืฉืจืืึทืื ืืื ืืืจ ืงืึทืืืขืจื Ansible ืืขืกืฅ ืืืืฃ ืื ืคึผืจืืืขืงื, ืืื ืืืขื ืืึทืฉืจืืึทืื ืื ืคืจืืืื ืืื ืึทืคึผืจืึธืืืฉืื ืืืึธืก ืืื ืืขืืื ืื ืืขืืขืื ืืืื ืฆื ื ืืฆื ืคืจืืขืจ ืฆื ืคึฟืึทืจืฉืืืื ืืขื ืงืึธื ืืขืงืกื ืคืื ืื ืืืกืืืฉืึทื ื ืืขืืืื.
ืืึธื ื ืื -997: SDS ืื ืืึท

ืืขืจ ืขืจืฉืืขืจ ืืึธื ืืื ืืขืกืืขื Ansible ืืื ืืขืืืขื ืืืืฃ ืึท ืคึผืจืืืขืงื ืฆื ืึทื ืืืืืงืืขื SDS (Software Defined Storage). ืขืก ืืื ืึท ืืึทืืื ืืขืจ ืึทืจืืืงื ืืืืฃ ืืขื ืืขืืข
, ืึธืืขืจ ืืื ืงืืจืฅ, ืืืจ ืขื ืืืงื ืืื ืืื ืึท ืื ืืืขืจืืื ืืขืกืืื ื ืคึผืืจืึทืืื ืืื ืืขืกืืื ื ืืืจ ืคืืจืืจืืื 60-90 ืืื ืื ืืืืฃ ืืืื ืจืึธืืข, ืืืึธืก ืืื ืึท ืืึทื ื ืฆืืึทื. ืืขืจ ืืกืื ืืื ืืขืืืขื ืข2ืข ืืขืกืฅ, ื.ื. ืืืจ ืืึธืื ืืืคึผืืืื ืึท ืคืื-ืคืืขืืืฉื ืื ืกืืึทืืืจืื ื ืืื ืืขืืึธืื ืืขืกืืขื ืขืก. ืืืึธืก ืืื ืืขืืืขื ืืคืืื ืืขืจ ืึทืืจืึทืืืืืืื ื ืืื ืื ืืขืจืคืื ืืื ื ืคืื ืืืื ืืืืื ืืืขืืึธืกืืคึผืขื. ืึธืืขืจ ืืื ืืืื ืึทืจืืึทื ืืึธืื, ืื ืืืืืื ื ืืขืืจืืขื ืืื ืขืจืืืืื ืคึฟืึทืจ ืึท ืกืืึทืืื ืืขืืืื ื.
ืืึธื # -701: ืึทื ืกืืืืข ืืื ืคึผืจืืืืจื ืงืื

ืื ืึทื ืืืืืงืืื ื ืคืื ืื ืึทื ืกืืืืข ืืขืกืืื ื ืืขืืึทื ืง ืืื ืืขืืืขื ืื ื ืืฆื ืคืื ืคืึทืจืืืง ืืืฉืืจืื, ื ืืืืื ืคึผืจืืืืจื ืงืื / ืงืื-ืกื ืืื ืื ืกืคึผืขืง. ืื ืืจืืจื ืืื ืืืฉืืืกื ืืืจื ืืืืกื ืคืื ืจืืื (ืคึฟืึทืจ ืืขืจ ืืขืืึทืืืก, ืืขื ืืขื ืึทืจืืืงื ืืืืฃ Habrรฉ: ) ืืขืืจืืขื ืคืึทืกืืขืจ, ืืืขืื 40 ืืื ืื ืคึฟืึทืจ 10 ืจืึธืืขืก. ืืืจ ืืืฉืืคื ืึท ืคึผืึทืง ืคืื ืืืืจืืืึทื ืืืฉืื ืขื ืืื ืืืืคื ืืขืกืฅ ืื.

ืืื ืึทืืืขืืืื, ืื ืืืืืื ื ืืขืืจืืขื, ืึธืืขืจ ืขืก ืืื ืืขืืืขื ืขืืืขืืข ืึธืคึผืืึทืฅ ืจืขืื ืฆื ืืขืืขืจืึธืืขื ืขืืื. ืืืขื ืื ื ืืืขืจ ืคืื ืืขื ืืฉื ืืขืกืืขื ืืื ืืขืืืืงืกื ืฆื 13 ืืงืขืจืืืง ืจืึธืืขืก ืืื 2 ืืขืืึท ืจืึธืืขืก ืงืึทืืืืื ืื ื ืงืืขื ืขืจืขืจ ืจืึธืืขืก, ืคึผืืืฆืืื ื ืื ืืขืกืฅ ืื ืืขืืืืื ืฆื ืืืืคื ืคึฟืึทืจ 70 ืืื ืื, ืืืึธืก ืืื ืึผืืขื 2 ืืื ืืขืจ. ืขืก ืืื ืืขืืืขื ืฉืืืขืจ ืฆื ืจืขืื ืืืขืื XP (ืขืงืกืืจืขื ืคึผืจืึธืืจืึทืืืื ื) ืคึผืจืึทืงืืืกืื ืืืืึทื ... ืงืืื ืขืจ ืืืื ื ืืฉื ืืืึทืจืื 70 ืืื ืื. ืืึธืก ืืื ืืขืืืขื ืื ืกืืื ืคึฟืึทืจ ืืฉืึทื ืืื ื ืืขื ืฆืืืึทื ื
ืืึธื # -601: ืึทื ืกืืืืข ืืื ืืึทืืึทืงืืื

ืงืึทื ืกืขืคึผืืฉืืึทืื, ืืึธืก ืืื ืขื ืืขื ืฆื ืืขืกืืงืืืฉืขื, ื ืึธืจ ืืืจ ืืจืืืขืจืืขืคืืจื ืจืึธืืข ืืขืกืืื ื ืฆื ืืึธืงืงืขืจ ืืื ืืขืืืื ืืขื ืึธื ืืืืื. ืืื ืึท ืจืขืืืืืึทื, ืื ืฆืืื ืืื ืจืืืืกื ืฆื ืึท ืกืืึทืืื 20-25 ืืื ืื ืคึฟืึทืจ 7 ืจืึธืืขืก.

ืืืจื ืื ืงืจืืกืื ื ืื ื ืืืขืจ ืคืื ืืขืกืืขื ืจืึธืืขืก ืฆื 17 ืืื ืืื ืืื ื 45 ืจืึธืืขืก, ืืืจ ืืืืคื ืืขื ืืื 28 ืืื ืื ืืืืฃ 2 ืืืฉืขื ืงืื ืก ืกืืึทืืืขืก.
ืืึธื #167: ืึทืืื ื ืึทื ืกืืืืข ืืขืกืฅ ืฆื ืื ืคึผืจืืืขืงื

ืจืืึฟ ืืกืชึผืื, ืขืก ืืืขื ื ืื ืืืื ืืขืืืขื ืฆื ืืึธื ืื ืจืขืคืึทืงืืึธืจืื ื ืึทืจืืขื ืืื ืึท ืืึทืื. ืื ืึทืจืืขื ืืืื ืืืื ืืขืืฉืขืจืึทืืึทื ืึทืืื ืึทื ืืืจ ืงืขื ืขื ืืจืขืื ืขืก ืืื ืงืืืื ืืจืขืงืืขื ืืื ืขืกื ืืขื ืืขืืคืึทื ื ืฉืืืง ืคึฟืึทืจ ืฉืืืง ืืื ืึท ืืขืคืขืืข. ืขืก ืืืื ืืืื ืึท ืคืืจืฉืืื ื ืคืื ืฆื ืืืจ ืืึทื ืืื ืื ืจืขืื ืจืืืืื ื, ืืื ืืึทื ื ืฆื ืืืื.

ืืื ืึทืืืขืืืื, ืขืก ืืื ื ืืฉื ืขื ืื ืืื ืขืก ืืืขื ืืืื ืืขืืื, ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืืืืฃ ืึท ืฉืืืง ืคืื ืคึผืึทืคึผืืจ, ืืืจ ืงืขื ืขื ืืืืื ืกืืืงืขืจื ืืืืฃ ืื ืฉืึทืคืข, ืืืจ ืงืขื ืขื ืืึทืื ืืึทืกืงืก ืืื ืืืฉืืจืึท, ืึธืืขืจ ืืืจ ืงืขื ืขื ืขืคืขื ืขื Google ืืึธืงืก ืืื ืฉืจืืึทืื ืื ืงืจืึทื ื ืกืืึทืืืก ืืึธืจืื. ืื ืืขืืก ืืืึทืงืกื ืคืื ืื ืคืึทืงื ืึทื ืืขืจ ืคึผืจืึธืฆืขืก ืืื ื ืืฉื ืืึทืืืืง, ืขืก ืืืขื ืืืื ืืึทื ื ืืื ืืืืืึทืก. ืขืก ืืื ืึทื ืืืืงืื ืึทื ืืืขืจ ืขืก ืื ืืืื ืืืจ ืฆื ืืจืขื ืขื ืืืืก ืคืื ืืขืืื ืงืขื, ืืึทืงืืืขื ืืื ืืื ืืืขืจื ืึธืืืืขืจืืืืขืืื ืืขืฉืึทืก ืจืืคืึทืงืืขืจืื ื.
ืื ืจืขืคืึทืงืืืจืื ื ืืื ืคึผืฉืื:
- ืขืกื.
- ืฉืืึธืคื.
- ืงืึธืืขืงืก.
- ืืึทืง ืคึผืจืืืืจื.
- ืืืขืจืืึทืืขืจื
ืืื ืืืจ ืืืืขืจืืืจื ืืึธืก ืืื ืืืจ ืืขืจืืจืืืื ืืขื ืืืขื ืฆืื.

ืขืก ืงืขื ื ืืฉื ืืืื ืืขืืืขื ืฆื ืึธื ืืืืื ืืขืกืืื ื ืึทืืฅ ืจืขืื ืึทืืืขืง, ืึทืืื ืืื ืืืขืจ ืขืจืฉืืขืจ ืึทืจืืขื ืืื ืืขืืืขื ืฆื ืึธื ืืืืื ืืื ืืื ืืื ื ืืื ืงืึธื ืืจืึธืืืจื ืื ืกืื ืืึทืงืก.
ืืึธื #181: ืืจืื ืืืืขื ืืืจ

ืืื ืืื ื ืืื ืึท ืงืืืื ืขืจืฉืืขืจ ืฉืจืื ืฆื ืืจืื ืืืืขื ืืืจ. ืืึธืก ืืืขื ื ืืฉื ืืจืขืื ืึผืืขื ืขืคึผืขืก, ืึธืืขืจ ืขืก ืืืขื ืืึธืื ืืืจ ืฆื ืืขืืื ืคึผืจืึทืกืขืกืึทื ืืื ืืึทืื ืืจืื ืืืืขื ืืื Jenkins. ืืขืจ ืืขืืึทื ืง ืืื ืฆื ืึทื ืืืืืงืืขื ืืขืืืืื ืืืืื ืฆืืืืฉื ืื ืืึทื ืฉืึทืคึฟื:
- ืจืืื ืืขืกืฅ ืืขื ืขื ืฉืืขืื.
- ืืื ืืขืงืืืขื ืขืคึผืขืก ืคืึทืจืจืืืื ืืื ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืึทื ืืึทืื ืื ืงืึธื ืึท ืืืกื ืืขืกืขืจ ืืื ืขืก ืืื ืืขืืืขื ืืืืืขืจ ืืืจ.
ืืึธื #193: ืคึฟืื ืืื ืืื ื ืฆื ืึทืคึผืึทืจืึทื ืืขืกืฅ

ืืืขื ืืืจ ืืึธื ืืขืืืื ืืขื ืคึผืจืึธืฆืขืก ืคืื ืืึทืงืืืขื ืื ืงืึธื ืืื ืื ืืขื, ืืืจ ืงืขื ืขื ืึธื ืืืืื ืืขื ืคึผืจืึธืฆืขืก ืคืื ืฉืจืื-ืืืจื-ืฉืจืื ืคึฟืึทืจืืขืกืขืจืื ื - ืจืืคึผืืืืกืื ื ืืื ืืื ื ืืื ืืึธื ืืฉืื ื ืจืึธืืขืก, ืืืจ ืงืขื ืขื ืืคืืื ืืึธื ืืึธืก ืึธื ืืืขืืึธืืขื ืกื. ืืืจ ืืึทืจืคึฟื ืฆื ืคึฟืึทืจืฉืืืื ืืื ืฆื ืฆืืืืืื ืจืึธืืขืก ืืื ืืื ืืื ืึทืจืืขืื.
ืืึธื #211: ืคึฟืื ืึทืคึผืึทืจืึทื ืฆื ืื ืืึทืืจืืืฉืึทื ืืขืกืฅ

ืืืขื ืจืืึฟ ืจืึธืืขืก ืืขื ืขื ืืืืขืงื ืืื ืึทืคึผืึทืจืึทื ืืขืกืฅ ืืื ืึทืืฅ ืืื ืืื ืืขื, ืืืจ ืงืขื ืขื ืคืึธืจืืขืฆื ืฆื ืืืืื ืื ืืึทืืจืืืฉืึทื ืืขืกืฅ. ืืขื ืข. ืืขืกืืื ื ื ืืฉื ืึท ืืืื ืฆืืื ืืื ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ, ืึธืืขืจ ืึท ืงืึธืืืื ืึทืฆืืข ืคืื โโโโืืื, ืืืฉื, ืึท ืคืื ืืืึทืฉืคึผืื ืงืึทื ืคืืืืขืจืืืฉืึทื.

ืืื ืืืฉืขื ืงืื ืก, ืืืจ ืืืฉืขื ืขืจืืืืึทื ืคืืืข ืกืืึทืืขืก ืืืึธืก ืืื ืืขื ืจืึธืืขืก / ืคึผืืืึทืืึธืึธืงืก ืืื ืคึผืึทืจืึทืืขื, ืืขืจื ืึธื ืึทืคึผืึทืจืึทื ืืขืกืฅ ืืื ืงืึทื ืืืื ืขืจื ืืื ืืขืกืึธืฃ ืื ืืึทืืจืืืฉืึทื ืืขืกืฅ.
Jenkins + Docker + Ansible = ืืขืกืฅ

- ืืืกืฉืจืืึทืื ืจืขืคึผืึธ ืืื ืืืฉืขื ืขืจืืื ืืืืขื ืกืืึทืืขืก.
- ืืืืคื ืืื ื ืคึผืืืึทืืึธืึธืง ืกืืึทืืขืก ืืื ืคึผืึทืจืึทืืขื.
- ืืืืคื ืืื ื ืจืึธืืข ืกืืึทืืขืก ืืื ืคึผืึทืจืึทืืขื.
- ืืืืคื ืกืื ืืึทืงืก ืงืึธื ืืจืึธื ืจืึธืืข ืกืืึทืืขืก ืืื ืคึผืึทืจืึทืืขื.
- ืืืืคื ืคึผืจืืืืจื ืจืึธืืข ืกืืึทืืขืก ืืื ืคึผืึทืจืึทืืขื.
- ืืื ื ืจืึธืืข.
- ืงืืง ืึธืคืขื ืืืงืืึทื ืืืืฃ ืื ืืขืจืข ืจืึธืืขืก.
- ืงืืง ืกืื ืืึทืงืก.
- ืฉืึทืคึฟื ืึท ืืึธืงืงืขืจ ืืืึทืฉืคึผืื
- ืืืืคื molecule/default/playbook.yml.
- ืงืึธื ืืจืึธืืืจื ืื ืืืืขืคึผืึธืืขื ืกื.
- ืืืืคื ืื ืืึทืืจืืืฉืึทื ืืขืกืฅ
- ืขื ืืืงื
ืืึธื #271: ืืืืึธืืืก ืคืึทืงืืึธืจ

ืืื ืขืจืฉืืขืจ, ืจืืคืึทืงืืขืจืื ื ืืื ืืืจืืืขืงืึธืื ืืืจื ืึท ืงืืืื ืืจืืคึผืข ืคืื โโืฆืืืื ืึธืืขืจ ืืจืืึท ืืขื ืืฉื. ืืื ืจืืืืืื ืื ืงืึธื ืืื ืื ืืขื. ืืืืขืจ ืฆืืึทื, ืื ืืึทื ืฉืึทืคึฟื ืืขืืืขืืึธืคึผืขื ืืืืกื ืคืื ืืื ืฆื ืฉืจืืึทืื ืงืึธื ืืื ืงืึธื ืจืขืฆืขื ืืืข ืงืึทื ืืจืืืืืืื ืฆื ืื ืืืกืขืืึทื ืืืฉืึทื ืคืื ืืืืกื ืืืขืื ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืืื ืขืก ืึทืจืืขื. ืืขืจ ืืืืืคึผืื ืงื ืืึธ ืืื ืืขืืืขื ืึทื ืื ืจืขืฆืขื ืืืขืก ืืขื ืขื ืืืืกืืขืงืืืื ืืขืืืึธืจื ืืืื ืก ืืื ืืืื ืก, ืืืื ืึท ืคึผืืึทื, ื.ื. ืืื ืขืืืขืืข ืืึทืฉืืึธืขืก ืืืจ ืืืขื ืงืจืืื ืืื ืึท ื ืืึท ืฉืืืง ืคืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ.

ืืื ืขืก ืืึธื ืืืื ืืึทืงืืืขื ืืึธ. ืขืก ืืื ืืึทืงืืืขื ืฆื ืืึธื ืึท ืจืขืฆืขื ืืืข, ืืขื ืืื ืื ืคืจืืืืืืขืจืง ืคืื ืืืึธืก ืึทืจืืขื ืขืก ืืื ืืขืืื, ืืื ืื ืืขืฉืืืืข ืคืื โโืืืกืงืืกืืขืก. ืืืจ ืืึธืื ืื ืึทืืจืืืืื ืืืฉืขื ืงืื ืก + ืืืืืืงืงืขื + ืืืฉืืจืึท.
ืึธืืขืจ ืืื ืึทืืึท, ืึท ืจืขืฆืขื ืืืข ืืื ื ืืฉื ืึท ืคึผืึทื ืึทืกืืึท, ืืืจ ืืึธืื ืืื ืืื ืื ืืขื ืงืึธื, ืืืึธืก ืืขืืืื ืืื ืื ืคืืึทืคึผ ืืขืกืฅ:
- 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 ื ืืฆื ืืืืืืืข ืืืขืจืืึทืืึทืื, ืขืก ืืื ืึท ืคึผืึทืจืืืืืฉ ืืืึธืจืงืึทืจืึธืื ื ืืื ืื ืคืึธืจืขื , ืึธืืขืจ ืืึธืก ืืื ื ืืฉื ืึท ืคึผืึทื ืึทืกืืึท.
ืืืืืจ ืืืจ ืืขืื ื ืืืืฉืคืื. ืืื ืืื ืื ืืึธืื 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 ืืื ืืขืจ ืืขืกืืขืจ ืืึทื ืืืึธืก ืงืขื ืขื ืืืื ืืขืืื ืืื ืฆื ื ืืฆื ืึท ืืื ืคืื ืืขืกืงืขื, ืืืฉื, ืืื ืึท ืจืึธืืข, ื ืืฆื ืืืืื ืื ืืืขืจืืึทืืึทืื ืืืกืงืจืืืื ืืื ืืขื ืจืึธืืข.
ืฉืืขืื: ื ืืฆื ืืืืืืืข ืืืึทืืขืืืืืง.
# 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
ืืื: ืจืืืืคืืื ืึท ืืืึทืืขืืืืืง ืืื ืึท ืฉืืืืฃ ืืืจื 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ืืืกืืืืื ืืึทืฉืื ืืืงืฉืึทื ืขืจืื, ื ืืฆื ืคืืึทื ืกืืจืืงืืืจ
ืืืื ืึท ืจืึธืืข ืืงืกืคึผืขืงืฅ ืึท ืืึทืฉ / ืืืขืจืืขืจืืื ืืื ืืืื ืขืจ ืคืื ืืืึทื ืคึผืึทืจืึทืืขืืขืจืก, ืืืื ืืืจ ืืืืื ืฆื ืืืืฉื ืืืื ืขืจ ืคืื ืื ืงืื ื ืคึผืึทืจืึทืืขืืขืจืก, ืืืจ ืืึทืจืคึฟื ืฆื ืึธืืืืขืจืจืืื ืื ืืื ืฆืข ืืึทืฉ / ืืืขืจืืขืจืืื, ืืืึธืก ืืืขื ืคืึทืจืืจืขืกืขืจื ืงืึทื ืคืืืืขืจืืืฉืึทื ืงืึทืืคึผืืขืงืกืืื.
ืฉืืขืื: ื ืืฆื ืืึทืฉ / ืืืขืจืืขืจืืื.
---
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ืึทื ืกืืืืข ืืืขืจืึทืคืืืขืจ
ืืื ืืึทืืึทืงืืื ืขืก ืืื ืืขืืืขื ืฆื ื ืืฆื ืึทื ืกืืืืข ืฆื ืงืึธื ืืจืึธืืืจื ืึทื ืื ืืืึทืฉืคึผืื ืืื ืงืึทื ืคืืืืขืจื ืจืืืืืง, ืืขืจืฆื, ืืึธืก ืืื ืืขืืืขื ืื ืคืขืืืงืืึทื ืืื ื ืืขืืืื ื 3. ืขืก ืืื ื ืืฉื ืึทืืื ืคืืขืงืกืึทืืึทื ืืื ืืขืกืืื ืคืจืึท / ืื ืกืคึผืขืง, ืึธืืขืจ ืืืจ ืงืขื ืขื ืงืึธื ืืจืึธืืืจื ืึทื ืื ืืื ืืึทืื ืคืื ืืขืจ ืืขืงืข ืืืืึทืื ืืื ืืืขืจ ืขืงืกืคึผืขืงืืืืฉืึทื ื:
---
- 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ืฉืืขืื ืงืึธืืคึผืืขืงืก ืืึธืืืง ืืื ืืึทืืืฉืืื & ืคึผืืืืื ืก
ืึทื ืกืืืืข ืึทืืืืึทืงืึทืฅ ืึท ืืขืงืืึทืจืึทืืืืืข ืฆืืืึทื ื, ืึทืืื ืืืขื ืืืจ ืืึธื ืงืึธื ืืจืึทื ืืฉืื ื, ืืึทืื ืืจืึทื ืกืคืึธืจืืึทืฆืืข, ืฉืึธื ืืึทืืืฉืืื, ืื ืงืึธื ืืืขืจื ืฉืืืขืจ ืฆื ืืืืขื ืขื. ืฆื ืงืึทืืืึทื ืืขื ืืื ืืึทืืื ืขืก ืคึผืฉืื ืฆื ืคึฟืึทืจืฉืืืื, ืขืก ืืืึธืื ื ืืฉื ืืืื ืืืขืจืืง ืฆื ืงืึทืืืึทื ืืขื ืงืึทืืคึผืืขืงืกืืื ืืืจื ืฉืึทืคึฟื ืืืื ืืืืืขื ืข ืืึทืืืฉืืื.
ืกืึทืืขืจืืื ืขืฆืืช ืืื ืืจืืงืก
- ืืืกืืืืื ืืืืืืืข ืืืขืจืืึทืืึทืื.
- ืคึผืจืขืคืืงืก ืจืึธืืข ืืืขืจืืึทืืึทืื.
- ื ืืฆื ืฉืืืืฃ ืงืึธื ืืจืึธื ืืืึทืืขืืืืืง.
- ืงืึธื ืืจืึธืืืจื ืึทืจืืึทื ืฉืจืืึทื ืืืขืจืืึทืืึทืื.
- ืืืกืืืืื ืืึทืฉืขืก ืืืงืฉืึทื ืขืจืื, ื ืืฆื ืคืืึทื ืกืืจืืงืืืจ.
- ืฉืึทืคึฟื ืืืืขืืึธืืขื ื ืคึผืืืึทืืึธืึธืงืก ืืื ืจืึธืืขืก.
- ืืืกืืืืื ื ืืฆื ืืึทืคึฟืขืื ืฉืึธื ืืึทืืืฉืืื.
- ืคึผืจืืืืจื ืืืื ืจืึธืืขืก ืืืจื ืืึทืืึทืงืืื.
- ืฉืืขืื ืงืึธืืคึผืืขืงืก ืืึธืืืง ืืื ืืึทืืืฉืืื & ืคึผืืืืื ืก.
ืกืึธืฃ

ืืืจ ืงืขื ื ื ืืฉื ื ืึธืจ ืืืื ืืื ืจืขืคืึทืงืืึธืจ ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืึท ืคึผืจืืืขืงื, ืืคืืื ืืืื ืืืจ ืืึธืื ืืึทืง. ืืึธืก ืืื ืึท ืืึทื ื ืคึผืจืึธืฆืขืก ืืืึธืก ืจืืงืืืืืขืจื ืืขืืืื, ืฆืืื ืืื ืืืืกื.
ืืื ืงืก
- ืกืืืืื
- ืืืืืขื
UPD1 2020.05.01 20:30 - ืคึฟืึทืจ ืขืจืฉืืืง ืคึผืจืึธืคืืืื ื ืคืื ืคึผืืืึทืืึธืึธืงืก ืืืจ ืงืขื ืขื ื ืืฆื callback_whitelist = profile_tasks ืฆื ืคึฟืึทืจืฉืืืื ืืืึธืก ืคึผืื ืงื ืึทืจืืขื ืคึฟืึทืจ ืึท ืืึทื ื ืฆืืึทื. ืืขืืึธืื ืืืจ ืืืื ืืืจื . ืืืจ ืงืขื ืขื ืืืื ืคึผืจืืืืจื
UPD2 2020.05.03 16:34 -
ืืงืืจ: www.habr.com
