ansible devops codestyle
ืืื! ืฉืื
ืืืจืื ืื ืืฆืืข ืืจื ืืืจืื ืืฉืชื ืื ืืคืจืืกื. ืืืจืื ืื ืืืืขื ืืื ืฉืืืจ ืืฉืชืืฉ ืืชืคืงืืืื ืืกืคืจื ืืืฉืืงืื ืฉืืื ืืงืืจื
- ืืืืจ ืฉืืฆืืชื ืืฉืชื ื ืืงืื, ืื ืืคืฉืจ ืืืืื ืืื ืขื ืื ืืื ืืืจืื;
- ืืฉ ืืื ืชืคืงืืืื, ืืืืฉืชื ืื ืฆืจืืืื ืืืืืช ืงืฉืืจืื ืืขืจื ืืื, ืืื ืื ืื ืขืืื;
- ืืชืงืฉืื ืืืกืืืจ ืืืืจืื ืืืฆื ืคืืขื ืืืืืืื ืฉื ืืืฉืชื ืื ืืกืคืจื ืืืฉืืงืื ืฉืืื
ื ืชืงืื ื ืืืขืืืช ืืื ืืคืจืืืงืืื ืืืืจื ืฉืื ื, ืืืชืืฆืื ืืื ืืืขื ื ืืืืื ืขืืฆืื ืืฉืชื ืื ืืกืคืจื ืืืฉืืงืื ืฉืื ื, ืฉืืืืื ืืกืืืืช ืคืชืจื ืืช ืืืขืืืช ืืืื.
ืืฉืชื ืื ืืชืคืงืืืื
ืชืคืงืื ืืื ืืืืืืงื ื ืคืจื ืฉื ืืขืจืืช ืคืจืืกื. ืืื ืื ืืืืืืงื ืฉื ืืืขืจืืช, ืืื ืืืื ืืืืืช ืืขื ืืืฉืง ืืืื ืืจืืงืฆืื ืขื ืฉืืจ ืืืขืจืืช. ืืฉืชื ื ืชืคืงืืืื ืื ืืืฉืง ืืื.
ืงื, ืืืฉื, ืืช ืืชืคืงืื api
, ืืืชืงืื ืืคืืืงืฆืืืช Java ืืฉืจืช. ืืืื ืืฉืชื ืื ืืฉ ืื?
ื ืืชื ืืืืง ืืฉืชื ื ืชืคืงืืืื ื-2 ืกืืืื ืืคื ืกืื:
1. ะกะฒะพะนััะฒะฐ
a) ะฝะตะทะฐะฒะธัะธะผัะต ะพั ััะตะดั
ะฑ) ะทะฐะฒะธัะธะผัะต ะพั ััะตะดั
2. ะกะฒัะทะธ
a) ัะปััะฐัะตะปะธ
ะฑ) ะทะฐะฟัะพัั ะฒะฝัััะธ ัะธััะตะผั
ะฒ) ะทะฐะฟัะพัั ะฒ ััะตะดั
ืืืคืืื ืื ืืฉืชื ืื ืื ืืฉืชื ืื ืืืืืืจืื ืืช ืืืชื ืืืืช ืฉื ืชืคืงืื.
ืืฉืชื ื ืฉืืืืชื ืื ืืฉืชื ืื ืฉืขืจืื ืืฉืืฉ ืืืืขืื ืืฉืืืื ืืืฆืื ืืื ืืชืคืงืื.
ืืืืื ืื ืืฉืชื ืื ืื ืืฉืชื ืื ืฉืืขืจื ืฉืืื ืืฉืืฉ ืืืฆืืจืช ืืฉืชื ื ืฉืืืืชื.
ืืฆื ืฉื ื, 1a, 2a, 2b ืื ืืฉืชื ืื ืฉืืื ื ืชืืืืื ืืกืืืื (ืืจืื, ืืฉืืืื ืืืฆืื ืืื ืืื') ืื ืืชื ืืืื ืืืชื ืืขืจืื ืืจืืจืช ืืืื ืืชืคืงืื ืืจืืจืช ืืืืื. ืขื ืืืช, ืื ื ืืชื ืืืื ืืฉืชื ืื ืืื 1.b ื-2.c ืืขืจืืื ืืืื 'ืืืืื', ืืืืืื ืฉืื ืืฉืชื ื ืืืขืื ืืขืืื ืืืชืื ืืกืืืื.
ืกืื ืื ืงืื
- ืฉื ืืืฉืชื ื ืืืื ืืืชืืื ืืฉื ืืชืคืงืื. ืื ืืืื ืงื ืืืืื ืืขืชืื ืืืืื ืชืคืงืื ืืืืข ืืืฉืชื ื ืืืื ืืื ืืืจืื.
- ืืขืช ืฉืืืืฉ ืืืฉืชื ืื ืืชืคืงืืืื, ืขืืื ืืืงืคืื ืขื ืขืงืจืื ืืื ืงืคืกืืืฆืื ืืืืฉืชืืฉ ืืืฉืชื ืื ืืืืืืจืื ืืชืคืงืื ืขืฆืื ืื ืืชืคืงืืืื ืฉืืื ืชืืื ืื ืืืื.
-
ืืืื ืข ืืฉืืืืฉ ืืืืืื ืื ืืืฉืชื ืื. Ansible ืื ืืืคืฉืจ ืื ืืขืงืืฃ ืื ืืืืช ืขืจืืื ืืืืืื ืืืืืื.
ืืืืื ืืืฉืชื ื ืจืข:
myrole_user: login: admin password: admin
ืืื, ืืื ืืกื ืืื ืืืฉืชื ื ืืืฆืืื ื, ืืืกืืกืื ืืื ืืืฉืชื ื ืืชืืื. ืืื
ืืืืืื ืฉืื ืืฉืืืืื ืืืืืื, ืชืฆืืจื ืืฆืืื ืืืชื ืืืืืื
ืชืืื. ืืื ืืืื ืื ื ืื. ืขืืืฃ ืืื:myrole_user_login: admin myrole_user_password: admin
ืืฉืชื ืื ืืกืคืจื ืืคืจืืกื
ืืขืช ืืืืืจ ืฉื ืคื ืงืก ืคืจืืกื (ืืืื ืคื ืงืก ืืคืขืื), ืื ื ืืงืคืืืื ืขื ืืืื ืฉืืฉ ืืืงื ืืืชื ืืืืืจ ื ืคืจื. ืืืืืง ืืื ืชืคืงืืืื: ืื ืืื ืืืืืจ git ืืฉืื. ืื ืืืคืฉืจ ืื ืืืืื ืฉืืชืคืงืืืื ืืกืคืจ ืืืฉืืงืื ืื ืืืืืืงืืื ืขืฆืืืืื ืฉืื ืื ืฉื ืืขืจืืช ืืคืจืืกื, ืืฉืื ืืืื ืืืืืืืงื ืืื ืื ืืืืจืื ืืืฉืคืืข ืขื ืคืขืืืชื ืฉื ืืฉื ื. ืื ืืืฉื ืขื ืืื ืฉืื ืื ืขืจืื ืืจืืจืช ืืืืื ืฉื ืืืฉืชื ืื.
ืืขืช ืืืืืจ ืฉื ืกืคืจ ืืคืขืื, ืืกืืืื, ื ืืชื ืืขืงืืฃ ืืช ืขืจืื ืืจืืจืช ืืืืื ืฉื ืืฉืชื ื ืชืคืงืืืื ืืฉื ื ืืงืืืืช: ืืืฉืชื ื ืคืืืืืืง ืืืืฉืชื ื ืืืื.
mydeploy # ะะฐัะฐะปะพะณ ะดะตะฟะปะพั
โโโ deploy.yml # ะะปะตะนะฑัะบ ะดะตะฟะปะพั
โโโ group_vars # ะะฐัะฐะปะพะณ ะฟะตัะตะผะตะฝะฝัั
ะฟะปะตะนะฑัะบะฐ
โ โโโ all.yml # ะคะฐะนะป ะดะปั ะฟะตัะตะผะตะฝะฝัั
ัะฒัะทะธ ะฒัะตะน ัะธััะตะผั
โ โโโ myapi.yml # ะคะฐะนะป ะฟะตัะตะผะตะฝะฝัั
ัะฒะพะนััะฒ ะณััะฟะฟั myapi
โโโ inventories #
โโโ prod # ะะฐัะฐะปะพะณ ะพะบััะถะตะฝะธั prod
โโโ prod.ini # ะะฝะฒะตะฝัะพัะธ ัะฐะนะป
โโโ group_vars # ะะฐัะฐะปะพะณ ะดะปั ะฟะตัะตะผะตะฝะฝัั
ะธะฝะฒะตะฝัะพัะธ
โโโ myapi #
โโโ vars.yml # ะกัะตะดะพะทะฐะฒะธัะธะผัะต ะฟะตัะตะผะตะฝะฝัะต ะณััะฟะฟั myapi
โโโ vault.yml # ะกะตะบัะตัั (ะฒัะตะณะดะฐ ััะตะดะพะทะฐะฒะธัะธะผั) *
* -
ืืืืื ืืื ืฉืืฉืชื ืื ืฉื ืกืคืจื ืืฉืืง ืืฉืืฉืื ืชืืื ืืฉืงืืจืืื ืืกืคืจื ืืฉืืง ืฉื ืืฆืืื ืืืืชื ืจืื ืืืชื. ืืืฉืืขืืช ืืื ืฉืืืฉืชื ืื ืืืื ืืฆืืื ืื ืืฉืื ืื ืขืจืื ืืจืืจืช ืืืืื ืฉื ืืฉืชื ืื ืฉืืื ื ืชืืืืื ืืกืืืื. ืืขืืืช ืืืช, ืืฉืชื ื ืืืื ืืฉืืฉื ืจืง ืขืืืจ ืกืืืื ืืกืืืืช, ืฉืืื ืืืืืืืืช ืขืืืจ ืืฉืชื ืื ืกืคืฆืืคืืื ืืกืืืื.
ืืฉืื ืืฆืืื ืฉืขืืืคืืช ืืฉืชื ืื ืื ืชืืคืฉืจ ืืื ืืืืืืจ ืืืืฉ ืืฉืชื ืื ืชืืืื ืืืฉืชื ื Playbook ืืืืืจ ืืื ืื ืคืจื ืืืืชื ืืืื.
ืื ืืืืจ ืฉืืืจ ืืฉืื ืื ืฆืจืื ืืืืืื ืืื ืืืฉืชื ื ืชืืื ืืกืืืื ืื ืื ืืืืงื ืืืชื ืืืงืื ืื ืืื.
ืืืืืื, ืืคืจืืืงื ืืื, ืืืฉืชื ื ืฉืืืจืื ืืืคืขืืช SSL ืืื ืชืืื ืืกืืืื ืืืฉื ืืื ืจื, ืืืืืื ืฉืื ืืืืื ื ืืืคืฉืจ SSL ืืกืืืืช ืฉืืื ื ืืฉืืืืชื ื ืืืื ืืืืื ืื. ืืืืจ ืฉืชืืงื ื ืืช ืืืขืื ืืื, ืืื ืืคืื ืืืืชื ืชืืืื ืืื ืื ืืช ืืขืืจื ืืืฉืชื ื Playbook.
ืืฉืชื ื ื ืืก ืืงืืืฆืืช
ืืืื ื ืจืืื ืืช ืืืืื ืฉืื ื ืืืืืจ 1 ืขื ืืื ืืืกืคืช 2 ืงืืืฆืืช ืฉื ืฉืจืชืื ืขื ืืืฉืื Java ืฉืื ื, ืื ืขื ืืืืจืืช ืฉืื ืืช.
ืชืืจื ืืขืฆืืื ืืื ืืจืื ืกืคืจ ืืืฉืืงืื ืืืงืจื ืื:
- hosts: myapi
roles:
- api
- hosts: bbauth
roles:
- auth
- hosts: ghauth
roles:
- auth
ืืฉ ืื ื ืฉืืืฉ ืงืืืฆืืช ื-Playbook, ืืื ืืืืืฅ ืืืฆืืจ ืืื ืฉืืืชืจ ืงืืฆื ืงืืืฆื ืืืฉืชื ื ืืืื group_vars ืืืฉืชื ื Playbook ืื-ืืื ืืช. ืงืืืฅ ืงืืืฆืชื ืืื ืืืงืจื ืื ืืื ืืชืืืืจ ืฉื ืจืืื ืืื ืฉื ืืืืฉืื ืฉืื ืืกืคืจ ืืืฉืืงืื. ืืืฉืจ ืืชื ืคืืชื ืืช ืงืืืฅ ืืงืืืฆื ืืืฉืชื ื ื-Playbook, ืืชื ืจืืื ืืื ืืช ืื ืืืืืืื ืืืชื ืืืืช ืืจืืจืช ืืืืื ืฉื ืืชืคืงืืืื ืฉืืืงืฆื ืืงืืืฆื. ืืืฉืชื ื ืืืื: ืืืืืื ืืืชื ืืืืช ืืงืืืฆื ืืืืื ืืืืื.
ืงืื ืกืื ืื
- ื ืกื ืื ืืืฉืชืืฉ ืืืฉืชื ื host_vars ืืื, ืืืืืื ืฉืื ืืื ื ืืชืืจืื ืืช ืืืขืจืืช, ืืื ืจืง ืืงืจื ืืืืื, ืืฉืจ ืืืืื ืืืจืื ืืืืื ืืฉืืืืช: "ืืื ืืืืจื ืืื ืฉืื ื ืืืฉืืจ?", ืืชืฉืืื ืขืืื ืืื ืื ืชืืื ืงื ืืืฆืื.
ืืฉืชื ื ืงืืฉืืจ
ืขื ืืืช, ืื ืืืื ืืฉืชื ื ืืืคืืื ืื, ืืื ืื ืืืื ืืฉืชื ื ืงืืฉืืจ?
ืืืืื ืืื ืืื ืืื ืฉืื ืืืืืื ืืืืืช ืืขืื ืขืจื ืืื ืืงืืืฆืืช ืฉืื ืืช.
ืืืชืืื ืืื
hostvars[groups['bbauth'][0]]['auth_bind_port']
, ืืื ืื ื ื ืืฉ ืืื
ืื ืืฉ ืื ืคืืืื. ืจืืฉืืช, ืื ืคื. ืฉื ืืช, ืชืืืช ืืืืจื ืกืคืฆืืคื ืืงืืืฆื. ืฉืืืฉืืช, ืืฉ ืฆืืจื ืืืกืืฃ ืขืืืืืช ืืื ืืืืจืืื ืืคื ื ืชืืืืช ืืคืจืืกื, ืื ืื ืื ื ืื ืจืืฆืื ืืงืื ืฉืืืืช ืืฉืชื ื ืื ืืืืืจืช.
ืืชืืฆืื ืืื ืืืืื ืืืฉืชืืฉ ืืืฉืชื ื ืงืืฉืืจ.
ืืฉืชื ื ืงืืฉืืจ ืื ืืฉืชื ืื ืืฉืืืืื ื-Playbook ืื ืืจืฉืื ืืงืืฉืืจ ืืืืืืงืื ืืขืจืืช.
ืืฉืชื ื ืงืืฉืืจ ืืืืืืกืื ืืืฉืชื ื ืืขืจืืช ืืืืืื group_vars/all/vars
ืืื ื ืืฆืจืื ืขื ืืื ืืกืจืช ืื ืืฉืชื ื ืืืืืื ืืื ืงืืืฆื, ืืืืกืคืช ืฉื ืืงืืืฆื ืืื ื ืืืกืจ ืืืืืื ืืชืืืืช ืืืฉืชื ื.
ืื ืืืืืืช ืืืืืืืช ืืื ืืฆืืืืืช ืืฉืืืช.
ืืืื ื ื ืกื ืืืื ืืฉืชื ืื ืืืืืืื ืืืขืื:
ืชืืจื ืืขืฆืืื ืฉืืฉ ืื ื ืืฉืชื ืื ืืชืืืืื ืื ืืื:
# roles/api/defaults:
# ะะตัะตะผะตะฝะฝะฐั ะทะฐะฟัะพัะฐ
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"
# roles/auth/defaults:
# ะะตัะตะผะตะฝะฝะฐั ัะปััะฐัะตะปั
auth_bind_port: "20000"
ืืืื ื ืฉืื ืืช ืื ืืืฉืชื ืื ื ืคืืฆืื group_vars/all/vars
ืื ืืืืืื ืื, ืืืืกืืคื ืืช ืฉื ืืงืืืฆื ืืฉื:
# group_vars/all/vars
bbauth_auth_bind_port: "20000"
ghauth_auth_bind_port: "30000"
# group_vars/bbauth/vars
auth_bind_port: "{{ bbauth_auth_bind_port }}"
# group_vars/ghauth/vars
auth_bind_port: "{{ ghauth_auth_bind_port }}"
# group_vars/myapi/vars
api_auth1_address: "http://{{ bbauth_auth_service_name }}:{{ bbauth_auth_bind_port }}"
api_auth2_address: "http://{{ ghauth_auth_service_name }}:{{ ghauth_auth_bind_port }}"
ืืขืช, ืขื ืืื ืฉืื ืื ืขืจื ืืืืืจ, ื ืืื ืืืืืื ืฉืืืงืฉื ืชืขืืืจ ืืืืชื ืืงืื ืื ื ืืฆืืช ืืืฆืืื.
ืงืื ืกืื ืื
- ืืืืืื ืฉืชืคืงืืืื ืืงืืืฆืืช ืื ืืืืืืงืื ืืขืจืืช ืฉืื ืื, ืื ืฆืจืืืื ืืงืื ืฉืืืช ืฉืื ืื ืืื ืฉืืฉืชื ื ืืงืืฉืืจ ืืจืื ืืืืืืง ืฉืื ืฉืืืืื ืืงืืืฆืช ืฉืจืชืื ืกืคืฆืืคืืช, ืืื ืืชืคืงืื ืืืขืจืืช.
ืงืืฆื ืกืืืื
ืชืคืงืืืื ืืืืืื ืืืฉืชืืฉ ืืงืืฆืื ืฉืื ืื ืืกืืืื ืืกืืืื.
ืชืขืืืืช SSL ืื ืืืืื ืืงืืฆืื ืืืื. ืืืกื ืืืชื ืืืงืกื
ืืืฉืชื ื ืื ืื ืืืื ื ืื. ืืื ื ืื ืืืืกื ืืช ืื ืชืื ืืืืื ืืชืื ืืฉืชื ื.
ืืืืืื, ืื ื ืืฉืชืืฉืื ืืืฉืชื ื api_ssl_key_file: "/path/to/file"
.
ืืืืืื ืฉืืจืืจ ืฉืืืฉืืจ ืืืคืชื ืืฉืชื ื ืืกืืืื ืืกืืืื, ืืื ืืฉืชื ื ืชืืื ืกืืืื, ืืืืืจ ืฆืจืื ืืืืืช ืืืืงื ืืงืืืฅ
group_vars/myapi/vars
ืืืื ืฉื ืืฉืชื ืื, ืืืืืืื ืืช ืืขืจื 'ืืืืืื'.
ืืืจื ืื ืืื ืืืืชืจ ืืืงืจื ืื ืืื ืืฉืื ืืช ืงืืืฅ ืืืคืชื ืืืืืจ ืกืคืจื ืืืฉืืง ืืืืจื ืื ืชืื
files/prod/certs/myapi.key
, ืื ืืขืจื ืฉื ืืืฉืชื ื ืืืื:
api_ssl_key_file: "prod/certs/myapi.key"
. ืื ืืืืช ืืืื ื ืืขืืืื ืฉืืื ืฉืื ืืืืจืืื ืขื ืคืจืืกืช ืืืขืจืืช ืขื ืืขืื ืืกืืื ืืฉ ืื ืืงืื ืืืขืืื ืืฉืืื ืืืืืจ ืืืืกืื ืืงืืฆืื ืฉืืื. ืืื ืขื ืืืช, ื ืืชืจืช ืืคืฉืจืืช ืืฆืืื ืืช ืื ืชืื ืืืืืื ืืืืฉืืจ ืืฉืจืช, ืืืงืจื ืฉืืชืขืืืืช ืืกืืคืงืืช ืขื ืืื ืืขืจืืช ืืืจืช.
ืืขืืืื ืืจืืืื ืืกืืืื ืืืช
ืืขืชืื ืงืจืืืืช ืืฉ ืฆืืจื ืืคืจืืก ืืื ืกืื ืืื ืืืขื ืืืื ืืืืชื ืกืืืื ืขื ืืืืืื ืืื ืืืืืื. ืืืงืจื ืื, ืื ื ืืืืงืื ืืฉืชื ืื ืชืืืื ืกืืืื ืืืื ืฉืืื ื ืืฉืชื ืื ืืชืื ืกืืืื ืื ืืืืื ืฉืื. ืืื ืื ื ืืืฆืืืื ืืช ืืืืจืื ืืฉืืจืืช ืืงืืฆื ืืืืื ืขืฆืื. ืืืืจ ืื ืืคืืืฆืื ืื, ื ืืชื ืืืฆืืจ ืืืื ื ืืกืฃ ืืฉืืจืืช ืืกืคืจืืืช ืืกืืืื.
ืืื ืืขืฉื ืฉืืืืฉ ืืืืจ ืืืืื group_vars ืืื ืืืื ืืืืืืจ ืืืืฉ ืืื ืืฉืชื ืื ืืฉืืจืืช ืขืืืจ ืขืฆืื.
ืืื ื ืืกืคืจืืืช ืืกืืคื ืขืืืจ ืคืจืืืงื ืืคืจืืกื:
mydeploy # ะะฐัะฐะปะพะณ ะดะตะฟะปะพั
โโโ deploy.yml # ะะปะตะนะฑัะบ ะดะตะฟะปะพั
โโโ files # ะะฐัะฐะปะพะณ ะดะปั ัะฐะนะปะพะฒ ะดะตะฟะปะพั
โ โโโ prod # ะะฐัะพะปะพะณ ะดะปั ััะตะดะพะทะฐะฒะธัะธะผัั
ัะฐะนะปะพะฒ ััะตะฝะดะฐ prod
โ โ โโโ certs #
โ โ โโโ myapi.key #
โ โโโ test1 # ะะฐัะฐะปะพะณ ะดะปั ััะตะดะพะทะฐะฒะธัะธะผัั
ัะฐะนะปะพะฒ ััะตะฝะดะฐ test1
โโโ group_vars # ะะฐัะฐะปะพะณ ะฟะตัะตะผะตะฝะฝัั
ะฟะปะตะนะฑัะบะฐ
โ โโโ all.yml # ะคะฐะนะป ะดะปั ะฟะตัะตะผะตะฝะฝัั
ัะฒัะทะธ ะฒัะตะน ัะธััะตะผั
โ โโโ myapi.yml # ะคะฐะนะป ะฟะตัะตะผะตะฝะฝัั
ัะฒะพะนััะฒ ะณััะฟะฟั myapi
โ โโโ bbauth.yml #
โ โโโ ghauth.yml #
โโโ inventories #
โโโ prod # ะะฐัะฐะปะพะณ ะพะบััะถะตะฝะธั prod
โ โโโ group_vars # ะะฐัะฐะปะพะณ ะดะปั ะฟะตัะตะผะตะฝะฝัั
ะธะฝะฒะตะฝัะพัะธ
โ โ โโโ myapi #
โ โ โ โโโ vars.yml # ะกัะตะดะพะทะฐะฒะธัะธะผัะต ะฟะตัะตะผะตะฝะฝัะต ะณััะฟะฟั myapi
โ โ โ โโโ vault.yml # ะกะตะบัะตัั (ะฒัะตะณะดะฐ ััะตะดะพะทะฐะฒะธัะธะผั)
โ โ โโโ bbauth #
โ โ โ โโโ vars.yml #
โ โ โ โโโ vault.yml #
โ โ โโโ ghauth #
โ โ โโโ vars.yml #
โ โ โโโ vault.yml #
โ โโโ prod.ini # ะะฝะฒะตะฝัะพัะธ ััะตะฝะดะฐ prod
โโโ test # ะะฐัะฐะปะพะณ ะพะบััะถะตะฝะธั test
โโโ group_vars #
โ โโโ myapi #
โ โ โโโ vars.yml #
โ โ โโโ vault.yml #
โ โโโ bbauth #
โ โ โโโ vars.yml #
โ โ โโโ vault.yml #
โ โโโ ghauth #
โ โโโ vars.yml #
โ โโโ vault.yml #
โโโ test1.ini # ะะฝะฒะตะฝัะพัะธ ััะตะฝะดะฐ test1 ะฒ ััะตะดะต test
โโโ test2.ini # ะะฝะฒะตะฝัะพัะธ ััะตะฝะดะฐ test2 ะฒ ััะตะดะต test
ืกืืืื
ืืืืจ ืืจืืื ืืืฉืชื ืื ืืืชืื ืืืืืจ: ืื ืงืืืฅ ืขื ืืฉืชื ืื ืืืจืื ืขื ืืฉืืื ืกืคืฆืืคืืช. ืืืืืืื ืฉืืงืืืฅ ืืฉ ืืฉืืืืช ืืกืืืืืช, ื ืืชื ืืื ืืืงืฆืืช ืืืจืื ืขื ืชืงืื ืืช ืื ืงืืืฅ. ืืืืืื, ืืคืชื ืคืจืืกืช ืืืขืจืืช ืืืคื ืืืืืช ืืืจืื ืืืืืื ื ืืื ืฉื ืืฉืชื ื ื-Playbook, ืืขืื ืฉืืื ืื, ืฉืืขืืื ืฉืื ืืชืืืจืช ืืืืื, ืืืจืื ืืฉืืจืืช ืืืืืื ืืืื ืืืฉืชื ืื.
ืชืคืงืืืื ืืคืื ืืืืืืช ืคืืชืื ืขืฆืืืืช ืขื ืืืฉืง ืืฉืืื, ืื ืฉืืืคืฉืจ ืืืคืชื ืืชืคืงืื ืืคืชื ืชืืื ืืช ืืืงืื ืืืชืืื ืืช ืืชืคืงืื ืื ืฉืืชืืื ืืืขืจืืช. ื ืืฉื ืื ืืื ื ืืื ืืืืืื ืขืืืจ ืชืคืงืืืื ืืฉืืชืคืื ืืื ืืืขืจืืืช ืืงืืคืืื.
ืื ืืื ืืขืจืืช ืืืจ ืื ืฆืจืืืื ืืืืื ืืช ืงืื ืืคืจืืกื. ืื ืื ืฉื ืืจืฉ ืืื ืืคืจืืกื ืืืฆืืืช ืืื ืืืื ืืช ืืงืืฆืื ืฉื ืืฉืชื ื ืืกืืืื.
ืกืคืจืืช
ืืืืจ
ืงืืื'ื ื ืื ืืก ืืืืกื ืืจืืืืฅ'
ืืงืืจ: www.habr.com