دا نقل دی
د دویمې ژمنې څخه پیل کول، هر کوډ میراث کیږي، ځکه چې لومړني نظرونه د سخت واقعیت څخه په جلا کیدو پیل کوي. دا نه ښه دی او نه بد، دا هغه څه دي چې په اړه یې بحث کول ستونزمن دي او باید ورسره ژوند وشي. د دې پروسې یوه برخه بیا کار کول دي. د کوډ په توګه زیربنا بیاکتنه. اجازه راکړئ کیسه په دې پیل وکړو چې څنګه په یو کال کې ځواب ورکوونکی ریفکتور وکړو او لیونی نه شو.
د میراث زیږون
ورځ # 1: ناروغ صفر
یو وخت یو مشروط پروژه وه. دا د دیو پرمختیایی ټیم او د Ops انجینران درلودل. دوی ورته ستونزه حل کوله: څنګه سرورونه ځای په ځای کول او غوښتنلیک چلول. ستونزه دا وه چې هرې ډلې دا ستونزه په خپله طریقه حل کړه. په پروژه کې، پریکړه وشوه چې د دیو او اوپس ټیمونو ترمنځ د پوهې همغږي کولو لپاره د ځواب ورکوونکي څخه کار واخلئ.
ورځ # 89: د میراث زیږون
پرته لدې چې پخپله دې ته پام وکړي ، دوی غوښتل دا د امکان تر حده غوره ترسره کړي ، مګر دا په میراث بدل شو. دا څنګه کیږي؟
- موږ دلته یو عاجل کار لرو، راځئ چې یو ناپاک هیک وکړو او بیا یې حل کړو.
- تاسو اړتیا نلرئ اسناد ولیکئ او هرڅه روښانه دي چې دلته څه پیښیږي.
- زه ځواب ورکوونکی/پیتون/بش/ټرافارم پیژنم! وګوره چې څنګه کولی شم له ځانه وژغورم!
- زه د بشپړ سټیک اوور فلو پراختیا کونکی یم او دا د سټیک اوور فلو څخه کاپي شوی ، زه نه پوهیږم چې دا څنګه کار کوي ، مګر دا ښه ښکاري او ستونزه حل کوي.
د پایلې په توګه ، تاسو کولی شئ د نه پوهیدو وړ ډول کوډ ترلاسه کړئ د کوم لپاره چې هیڅ سند شتون نلري ، دا روښانه نده چې دا څه کوي ، ایا ورته اړتیا ده ، مګر ستونزه دا ده چې تاسو اړتیا لرئ دا رامینځته کړئ ، ترمیم یې کړئ ، کرچچونه او ملاتړ اضافه کړئ. ، وضعیت نور هم خرابوي.
- 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 ماډل نور د کاروونکو / سوداګرۍ / نورو ټیمونو اړتیاوې نه پوره کوي ، او په زیربنا کې د بدلونونو وخت د منلو وړ پاتې کیږي. پدې شیبه کې ، پوهه راځي چې دا د عمل کولو وخت دی.
د IaC ریفیکٹرینګ
ورځ # 139: ایا تاسو واقعیا ریفکتور کولو ته اړتیا لرئ؟
مخکې لدې چې تاسو ریفیکٹر ته ګړندۍ شئ ، تاسو باید یو شمیر مهم پوښتنو ته ځواب ووایاست:
- تاسو ولې دې ټولو ته اړتیا لرئ؟
- ایاتاسو وخت لرئ؟
- ایا پوهه کافي ده؟
که تاسو نه پوهیږئ چې څنګه پوښتنو ته ځواب ووایاست، نو بیا به بیاکتنه پای ته ورسیږي مخکې له دې چې پیل شي، یا دا ممکن یوازې خراب شي. ځکه تجربه درلوده(
ورځ # 149: د بیاکتنې چمتو کول
لومړی شی چمتو کول دي. پریکړه وکړئ چې موږ به څه وکړو. د دې کولو لپاره، موږ اړیکه ونیسو، د ستونزې ساحې ومومئ او د حل لپاره لارې چارې ومومئ. موږ نتیجه اخیستونکي مفکورې په یو ډول ثبت کوو، د بیلګې په توګه په کنفرنس کې یوه مقاله، نو کله چې پوښتنه راپورته کیږي "څه شی دی؟" یا "کوم سم دی؟" موږ خپله لاره نه ده ورکه کړې. زموږ په قضیه کې، موږ مفکورې ته ودرېږو تقسیم او حکومت کول: موږ زیربنا په کوچنیو ټوټو / خښتو ویشو. دا طریقه تاسو ته اجازه درکوي چې د زیربنا یوه جلا ټوټه واخلئ، پوه شئ چې دا څه کوي، د ازموینو سره پوښ کړئ او د هیڅ شی ماتولو ویره پرته یې بدل کړئ.
دا معلومه شوه چې د زیربنا ازموینه د بنسټ ډبره کیږي او دلته د زیربنا ازموینې پیرامیډ د یادولو وړ دی. په سمه توګه ورته نظر چې د پراختیا په حال کې دی، مګر د زیربنا لپاره: موږ د ارزانه ګړندي ازموینو څخه حرکت کوو چې ساده شیان چک کوي، لکه انډینټیشن، ګران بشپړ ازموینې ته چې ټول زیربنا ځای پرځای کوي.
د ځواب وړ ازموینې هڅې
مخکې له دې چې موږ تشریح کړو چې څنګه موږ په پروژه کې ځواب ورکوونکي ازموینې پوښلې، زه به هغه هڅې او طریقې بیان کړم چې ما د دې پریکړو په شرایطو د پوهیدو لپاره مخکې د کارولو فرصت درلود.
ورځ نمبر -997: د SDS چمتو کول
لومړی ځل چې ما د ځواب ورکولو ازموینه وکړه د SDS (د سافټویر تعریف شوي ذخیره) رامینځته کولو پروژه کې وه. په دې اړه جلا مقاله شتون لري
ورځ # -701: د ځواب وړ او ازموینې پخلنځي
د ځواب وړ ازموینې مفکورې پراختیا د چمتو شوي وسیلو کارول و، د بیلګې په توګه د پخلنځي / پخلنځي-ci او معاینه ازموینه. انتخاب د روبي د پوهې له مخې ټاکل شوی و (د نورو جزیاتو لپاره، د هابري مقاله وګورئ:
په عموم کې، حل کار وکړ، مګر د متفاوتۍ له امله یو څه تخریب شتون درلود. کله چې د ازمول شوي خلکو شمیر 13 لومړني رولونو او 2 میټا رولونو ته لوړ شو چې کوچني رولونه ترکیب کوي ، نو ناڅاپه ازموینې د 70 دقیقو لپاره پیل شوې ، کوم چې نږدې 2 ځله اوږد دی. دا ستونزمنه وه چې د XP (ډیرې برنامه کولو) تمرینونو په اړه خبرې وکړئ ځکه چې ... هیڅوک نه غواړي چې 70 دقیقې انتظار وکړي. دا د چلند د بدلون لامل و
ورځ # -601: ځواب ورکوونکی او مالیکول
په تصور کې، دا د ټیسټ کیچن سره ورته دی، یوازې موږ د رول ټیسټ ډاکر ته لیږدول او سټیک یې بدل کړ. د پایلې په توګه، وخت د 20 رولونو لپاره مستحکم 25-7 دقیقو ته راټیټ شو.
د ازمول شوي رولونو شمیر 17 ته په زیاتولو او د 45 رولونو په مینځلو سره، موږ دا په 28 دقیقو کې په 2 جینکنز غلامانو کې پرمخ یوسو.
ورځ # 167: پروژې ته د ځواب وړ ازموینې اضافه کول
ډیری احتمال، دا به امکان ونلري چې د بیا رغونې دنده په چټکۍ سره ترسره کړي. دنده باید د اندازه کولو وړ وي نو تاسو کولی شئ دا په کوچنیو ټوټو وویشئ او د هاتین ټوټه د یو چای چمچ سره وخورئ. دلته باید پوهه وي چې ایا تاسو سم لوري ته روان یاست، څومره وخت ته ځي.
په عموم کې، دا مهمه نده چې دا به څنګه ترسره شي، تاسو کولی شئ د کاغذ په یوه ټوټه ولیکئ، تاسو کولی شئ په المارۍ کې سټیکر واچوئ، تاسو کولی شئ په جیرا کې دندې رامینځته کړئ، یا تاسو کولی شئ د ګوګل ډاکس خلاص کړئ او اوسنی حالت ولیکئ. هلته. پښې د دې حقیقت څخه وده کوي چې پروسه سمدستي نه وي، دا به اوږد او ستړي وي. دا امکان نلري چې څوک وغواړي چې تاسو د نظرونو څخه جلا شئ، ستړی شئ، او د بیاکتنې په جریان کې ډوب شئ.
بیاکتنه ساده ده:
- وخورئ.
- خوب.
- کوډ.
- د IaC ازموینه
- تکرار کړئ
او موږ دا تر هغه وخته تکراروو تر څو چې ټاکل شوي هدف ته ورسیږو.
دا ممکن نه وي چې سمدلاسه د هرڅه ازموینه پیل کړئ ، نو زموږ لومړی دنده دا وه چې د لینټینګ او ترکیب چک کولو سره پیل وکړو.
ورځ #181: د شنه جوړونې ماسټر
لینټینګ د ګرین بلډ ماسټر په لور یو کوچنی لومړی ګام دی. دا به تقریبا هیڅ شی مات نکړي، مګر دا به تاسو ته اجازه درکړي چې پروسې ډیبګ کړئ او په جینکنز کې شنه جوړونه جوړ کړئ. نظر دا دی چې د ټیم ترمنځ عادتونه رامینځته کړي:
- سور ټیسټونه خراب دي.
- زه د یو څه د سمولو لپاره راغلی یم او په ورته وخت کې کوډ یو څه ښه کړئ چې ستاسو دمخه و.
ورځ # 193: له لینټینګ څخه د واحد ازموینې پورې
ماسټر ته د کوډ ترلاسه کولو پروسې رامینځته کولو سره ، تاسو کولی شئ د ګام په ګام د پرمختګ پروسه پیل کړئ - د پیل کولو رولونو سره د لینډینګ ځای په ځای کول ، تاسو حتی کولی شئ دا د بې کفایتۍ پرته ترسره کړئ. تاسو اړتیا لرئ پوه شئ چې څنګه رولونه پلي کړئ او دوی څنګه کار کوي.
ورځ #211: له واحد څخه د ادغام ازموینې پورې
کله چې ډیری رولونه د واحد ټیسټونو سره پوښل شوي وي او هرڅه لینټ شوي وي، تاسو کولی شئ د ادغام ازموینې اضافه کولو ته لاړ شئ. هغوی. په زیربنا کې د یوې خښتې ازموینه نه ده، مګر د دوی یو ترکیب، د بیلګې په توګه، د بشپړ مثال ترتیب.
د جینکنز په کارولو سره، موږ ډیری مرحلې رامینځته کړې چې په موازي ډول د رولونو / لوبو کتابونه په موازي توګه، بیا په کانټینرونو کې د واحد ازموینې، او په پای کې د ادغام ازموینې.
جینکنز + ډاکر + ځواب وړ = ازموینې
- ریپو چیک کړئ او د جوړیدو مرحلې رامینځته کړئ.
- د لینټ پلی بوک مرحلې په موازي ډول پرمخ وړئ.
- د لینټ رول مرحلې په موازي توګه پرمخ وړئ.
- په موازي توګه د نحوي چک رول مرحلې پرمخ وړئ.
- په موازي ډول د ازموینې رول مرحلې پرمخ وړئ.
- د لینټ رول.
- په نورو رولونو تکیه چیک کړئ.
- ترکیب چک کړئ.
- د ډاکر مثال جوړ کړئ
- molecule/default/playbook.yml چلول.
- هوښیارتیا چیک کړئ.
- د ادغام ازموینې ترسره کړئ
- فنلند
ورځ #271: د بس فاکتور
په لومړي سر کې، د بیا رغونې کار د دوو یا دریو کسانو د یوې کوچنۍ ډلې لخوا ترسره شو. دوی په ماسټر کې کوډ بیاکتنه وکړه. د وخت په تیریدو سره، ټیم د کوډ لیکلو څرنګوالي پوهه رامینځته کړه او د کوډ بیاکتنې د زیربنا او دا څنګه کار کوي په اړه د پوهې خپرولو کې مرسته وکړه. دلته مهمه خبره دا وه چې بیاکتونکي د یو مهال ویش سره سم یو یو انتخاب شوي وو، i.e. د یو څه احتمال سره تاسو به د زیربنا یوې نوې برخې ته ورشئ.
او دا باید دلته آرام وي. دا مناسبه ده چې بیاکتنه ترسره کړئ، د کوم کار په چوکاټ کې وګورئ، او د خبرو اترو تاریخ. موږ جینکنز + بټ بکټ + جیرا مدغم کړی دی.
مګر د ورته په څیر، بیاکتنه یوه درملنه نه ده؛ یو څه، موږ ماسټر کوډ ته ورسیدو، کوم چې موږ ته فلاپ ازموینې وکړې:
- 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: د ازموینو ګړندی کول
د وخت په تیریدو سره، ډیرې ازموینې وې، جوړونه ورو ورو، په بدترین حالت کې تر یو ساعت پورې. په یو ریټرو کې یوه جمله وه لکه "دا ښه ده چې ازموینې شتون لري ، مګر دوی ورو دي." د پایلې په توګه، موږ په مجازی ماشینونو کې د ادغام ازموینې پریښودې او د ډاکر لپاره یې تطبیق کړل ترڅو دا ګړندي کړي. موږ د کارول شوي وسیلو شمیر کمولو لپاره د ځواب وړ تصدیق کونکي سره testinfra هم ځای په ځای کړ.
په کلکه خبرې کول، د اقداماتو یوه ټولګه وه:
- ډاکر ته واړوئ.
- د رول ازموینې لرې کړئ، کوم چې د انحصار له امله نقل شوی.
- د غلامانو شمیر زیات کړئ.
- د ټیسټ چلولو امر.
- د لینټ کولو وړتیا ټول په محلي توګه د یوې قوماندې سره.
د پایلې په توګه، د جینکنز پایپ لاین هم متحد شو
- د جوړولو مرحلې پیدا کړئ.
- ټول په موازي توګه لینټ کړئ.
- په موازي ډول د ازموینې رول مرحلې پرمخ وړئ.
- ختمول
زده کړل شوي درسونه
د نړیوال تغیراتو څخه ډډه وکړئ
ځواب ورکوونکي نړیوال متغیرونه کاروي، په فورمه کې یو اړخیز کار شتون لري
اجازه راکړئ تاسو ته یو مثال درکړم. اجازه راکړئ 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}}
په زړه پورې خبره دا ده چې د لوبو کتابونو پایله به په هغه شیانو پورې اړه ولري چې تل څرګند نه وي ، لکه په ترتیب کې چې رولونه لیست شوي. له بده مرغه، دا د ځواب وړ طبیعت دی او ترټولو غوره شی چې ترسره کیدی شي د یو ډول موافقې کارول دي، د بیلګې په توګه، د رول دننه، یوازې په دې رول کې بیان شوي متغیر وکاروئ.
BAD: نړیوال متغیر وکاروئ.
# 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
مخفف رول متغیرات
BAD: نړیوال متغیر وکاروئ.
# cat roles/some_role/defaults/main.yml
---
db_port: 5432
ښه: د متغیرونو لپاره په رول کې، د رول نوم سره مخکینۍ متغیرات وکاروئ؛ دا، د لیست په کتلو سره، دا به اسانه کړي چې پوه شي چې څه پیښیږي.
# cat roles/some_role/defaults/main.yml
---
some_role__db_port: 5432
د لوپ کنټرول متغیر وکاروئ
BAD: په لوپس کې معیاري متغیر وکاروئ 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
د هش لغتونو څخه ډډه وکړئ، فلیټ جوړښت وکاروئ
که چیرې یو رول د هغې په یوه پیرامیټر کې د هش / قاموس تمه وکړي ، نو که موږ غواړو د ماشوم پیرامیټونو څخه یو یې بدل کړو ، نو موږ به اړتیا ولرو چې ټول هش / قاموس له پامه غورځوو ، کوم چې به د ترتیب پیچلتیا زیاته کړي.
BAD: هش/ لغت وکاروئ.
---
user:
name: admin
group: admin
ښه: د فلیټ متغیر جوړښت څخه کار واخلئ.
---
user_name: admin
user_group: "{{ user_name }}"
د نامتو لوبو کتابونه او رولونه جوړ کړئ
رولونه او د لوبو کتابونه باید د پام وړ وي، ځکه د تشکیلاتو جریان کموي او د یو څه ماتیدو ویره. مګر که تاسو مالیکول وکاروئ ، نو دا اصلي چلند دی.
د کمانډ شیل ماډلونو کارولو څخه ډډه وکړئ
د شیل ماډل کارول د اعالمیه پر ځای د لازمي توضیحي تمثیل پایله لري ، کوم چې د ځواب اصلي اساس دی.
خپل رول د مالیکول له لارې ازموئ
مالیکول یو ډیر انعطاف منونکی شی دی، راځئ چې یو څو سناریو وګورو.
مالیکول څو مثالونه
В 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 خوشې کیدو راهیسې ډیفالټ دی. دا د 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
پیچلي منطق په ماډلونو او پلگ انونو کې واچوئ
ځواب ورکوونکي د اعلاناتي تګلارې ملاتړ کوي، نو کله چې تاسو د کوډ برانچینګ، د معلوماتو بدلون، شیل ماډلونه ترسره کوئ، د کوډ لوستل ستونزمن کیږي. د دې سره د مبارزې لپاره او د پوهیدو لپاره یې ساده وساتئ، دا به بې ګټې نه وي چې د خپل ماډلونو په جوړولو سره د دې پیچلتیا سره مبارزه وکړئ.
د لارښوونو او چلونو لنډیز
- د نړیوال تغیراتو څخه ډډه وکړئ.
- د مخفف رول متغیرات.
- د لوپ کنټرول متغیر وکاروئ.
- د ننوتلو متغیرات چیک کړئ.
- د هش لغتونو څخه ډډه وکړئ، فلیټ جوړښت وکاروئ.
- د نامتو لوبو کتابونه او رولونه جوړ کړئ.
- د کمانډ شیل ماډلونو کارولو څخه ډډه وکړئ.
- خپل رول د مالیکول له لارې ازموئ.
- پیچلي منطق په ماډلونو او پلگ انونو کې واچوئ.
پایلې
تاسو نشئ کولی یوازې لاړ شئ او په یوه پروژه کې زیربنا بیا تنظیم کړئ ، حتی که تاسو IaC لرئ. دا یوه اوږده پروسه ده چې صبر، وخت او پوهې ته اړتیا لري.
دویب
- سلايډونه
څنګه د ځواب وړ ازموینه وکړو او مغز مه کوئ - ویډیو
څنګه د ځواب وړ ازموینه وکړو او مغز مه کوئ هغه څه چې ما د زیربنا کوډ 200 لینونو ازموینې څخه زده کړل ځواب: په 120 میاشتو کې د کوروس څخه سینټوس ته د 18 VM ترتیب مهاجرت کله چې ستاسو د توزیع آزموینه کوئ څنګه بایسکلونه په کرچونو مات کړئ ما ازموینه وکړئ که تاسو کولی شئ یا د YML پروګرام کونکي د ځواب وړ ازموینې خوب وکړئ؟ د عالي IaC ازموینې مقالو ، ویناو او لینکونو لیست کراس پوسټ انګلیسي نسخه
UPD1 2020.05.01 20:30 - د لوبو کتابونو لومړني پروفایل کولو لپاره تاسو کارولی شئ callback_whitelist = profile_tasks
ترڅو پوه شي چې دقیقا د اوږدې مودې لپاره څه کار کوي. بیا موږ له لارې ځو
UPD2 2020.05.03 16:34 -
سرچینه: www.habr.com