Ansible وايي چې پیل شو، خو WireGuard لا هم په زاړه ترتیباتو کار کوي
state: started له مخکې روان unit سره لاس نه وهي، نو بیا لیکل شوی wg0.conf هېڅکله نه پلي کېږي. د بدلون لپاره handler ورزیات کړئ او بیا ژوندی وسیله له فایل سره پرتله کړئ.
د playbook چلېدنه شنه پای ته رسېږي، د WireGuard unit فعال دی، handshake کار کوي، او نوی peer بیا هم چېرې نه رسېږي. لیدل چې playbook بریالیتوب اعلانوي او سرور د پرون ترتیباتو سره روان دی، ځانګړې ستومانتیا ده، ځکه په پایله کې هېڅ غلط نه دی. Ansible هغه څه وکړل چې غوښتل شوي وو: یې ډاډ ترلاسه کړ چې unit پیل شوی، او unit مخکې پیل شوی و. بیا لیکل شوي ترتیباتو فایل پلي کول بېل کار دی، او یوازې هغه وخت پېښېږي چې یو څه خدماتو ته ووایي چې بیا یې ولولي.
وګورئ دویم چلېدنه په رښتیا څه اعلانوي
playbook د بدل شوي ترتیباتو سره دوه ځله چل کړئ او لنډیز پرتله کړئ. دویم چلېدنه باید د unit دنده changed نه، ok وښیي، ځکه مخکې روانه خدمت په ډیزاین سره آرام پرېښودل کېږي. دا هغه idempotence ده چې سم کار کوي، او همدا لامل دی چې نوی فایل هېڅکله kernel ته نه رسېږي.
د diff پایلې سره یوه کتنه چلېدنه ورزیاته کړئ ترڅو وګورئ کوم کارونه به هېڅ شي ته لاس ووهي.
ansible-playbook -i inventory site.yml --check --diff
systemctl show wg-quick@wg0 -p ActiveEnterTimestamp -p NRestarts
stat -c '%y %n' /etc/wireguard/wg0.confدرې وخت مهرونه کیسه د یوې log کرښې له لوستلو دمخه بیانوي. که ترتیباتو فایل له هغې لحظې نوی وي چې unit فعال شو، روان interface د زاړه فایل څخه جوړ شوی، او ټول وروستي نښې له همدې ځایه راځي.
دا د Ansible نیمګړتیا نه ده. همدا چلند په هر هغه ترتیباتو مدیریت وسیله کې ښکاري چې «ډاډه شې چې روان دی» له «ډاډه شې چې همدا روانوي» نه جلا کوي. دا توپیر تر هغې چې یوه ماسپښین ورکړي، ډېر نری ښکاري.
پیل شوی یو حالت دی، بیا لوستل نه
state: started د unit په اړه یو شرط بیانوي. دا ژمنه نه کوي چې خدمت به خپل inputs بیا ولولي، او نه شي کولای پوه شي چې کوم فایل چې هېڅکله یې نه دی پرانیستی بدل شوی. په wg-quick ځای پرځای کولو کې inputs د interface ترتیبات، پتې، لارې، DNS ثبتونه او هر post-up hook شامل دي.
له همدې کبله تازه شوی فایل کولای شي نوی peer، بله پته یا بدله شوې لارښود ولري، پداسې حال کې چې ژوندی interface لا هم زاړه ټولګه وړاندې کوي. handshake بیا هم بریالی کېږي ځکه چې بار شوي کیلي او پای ټکي لا هم معتبر دي. همدا ناکامي سخت لیدل کېدونکې کوي، او همدا لامل دی چې خلک د وخت مهر له کتلو دمخه یو ساعت DNS تعقیبوي.
د ماډول دوه نورې خوښې ډېری وختونه حل بلل کېږي. daemon_reload systemd اړ باسي چې د unit فایلونه بیا ولولي، چې د WireGuard ترتیباتو فایل ته اړوند نه دی. state: reloaded له unit څخه غواړي چې د بیا لوستلو عمل ترسره کړي، او دا چې ستاسو اړتیا پوره کوي که نه، په بشپړ ډول unit ته اړه لري. هېڅ یو یې د دې پوهېدو ځای نه نیسي چې روان بهیر په رښتیا کوم inputs لوستلي.
فایل نصب کړئ، بیا handler ته خبر ورکړئ
هغه بڼه چې idempotence ساتي او بیا هم بدلونونه پلي کوي، عادي ده: هغه دنده چې فایل لیکي handler ته خبر ورکوي، او handler یوازې هغه وخت ځي چې فایل په رښتیا بدل شوی وي. پرته له سمونې دویم چلېدنه هېڅ نه کوي، او تاسو همدا غواړئ.
- name: write the interface configuration
ansible.builtin.template:
src: wg0.conf.j2
dest: /etc/wireguard/wg0.conf
owner: root
mode: "0600"
notify: apply wg0
- name: ensure the interface unit is enabled
ansible.builtin.systemd_service:
name: wg-quick@wg0
enabled: true
state: started
- name: apply wg0
listen: apply wg0
ansible.builtin.systemd_service:
name: wg-quick@wg0
state: restartedhandlerونه د play په پای کې، له هغو دندو وروسته چې خبر یې ورکړی، ځي، نو په همدې play کې وروستې دنده لا هم زاړه interface ویني. که ترتیب مهم وي، نو د نوي ترتیباتو پورې تړلې دندې دمخه handlerونه په څرګند ډول د meta: flush_handlers په مرسته تش کړئ.
د unit د بیا لوستلو عمل تر کتنې پورې reload پرځای restart وکاروئ. Upstream wg-quick unit یو ته ملاتړ کوي او WireGuard ترتیبات همغږي کوي، خو د پتو، لارو، DNS یا hookونو ترتیبات بیا نه چلوي. له همدې کبله د لارې لارښود له زیاتولو وروسته reload بریالی ښکاري او هېڅ نه بدلوي.
ژوندی وسیله له فایل سره پرتله کړئ
هغه کتنه چې دې ټولګې تېروتنې بندوي، د kernel لرل شوي او د فایل ویلي شوي ترمنځ پرتله ده. دوه امرونه د پرتلې وړ پایله ورکوي، او توپیر هماغه انحراف دی.
sudo wg showconf wg0
sudo wg-quick strip wg0
sudo diff <(sudo wg showconf wg0) <(sudo wg-quick strip wg0)wg showconf ژوندی وسیله، د شخصي کیلي سره، چاپوي، نو هغه پایله راز وګڼئ او په ټکټ کې یې مه نښلوئ. wg-quick strip فایل د wg-quick ځانګړو کیليو پرته چاپوي، او همدا لامل دی چې دواړه پرتلنې وړ دي.
په peer لیست کې توپیر مانا دا ده چې فایل هېڅکله نه دی پلي شوی. توپیر یوازې په هغو کیليو یا پای ټکو کې چې د بدلون تمه یې لرله مانا دا ده چې یو څه یې جزوي پلي کړی. هېڅ توپیر نه لرل مانا دا ده چې ترتیبات اوسني دي او ستونزه بل ځای کې ده، چې په خپله ګټوره پایله ده.
د بیا پیل بیه په پوهاوي سره ورکړئ
د interface بیا پیل tunnel پرې کوي، او که هغه tunnel ستاسو اداري ناسته وړي، بیا پیل هغه ناسته پای ته رسوي چې غوښتنه یې کړې وه. handler د بدلون کړکۍ تر شا کېږدئ، یا playbook له هغه مدیریتي لارې چل کړئ چې د interface بیا پیل ته اړه نه لري.
همدا بیه خلک reload ته نژدې کوي. دا معقول instinct دی او هغه وخت سم کېږي چې پوه شئ reload په رښتیا کوم بدلونونه پلي کوي. په upstream wg-quick unit کې د peer او کیلي بدلونونو لپاره بسنه کوي؛ د پتو، لارښوونې او hookونو لپاره نه. یو ځل دا روښانه کول د بدلون کړکۍ په جریان کې د کشف کولو نه ارزانه دي.
د systemd_service ماډول اسناد د started، restarted او reloaded ترمنځ توپیر بیانوي، او د شنې لنډیز نه د اټکل کولو پرځای یو ځل لوستل ښه دي. په دې لارښود کې هر څه له همدې یو توپیر څخه راځي.