playbook ධාවනය කොළ පැහැයෙන් අවසන් වේ, WireGuard unit සක්‍රීයයි, handshake ක්‍රියා කරයි, නමුත් නව peer කිසිවකට ළඟා නොවේ. සේවාදායකය ඊයේ වින්‍යාසයෙන් ක්‍රියා කරන අතර playbook සාර්ථකත්වය වාර්තා කරනු දැකීම විශේෂ කේන්තියකි, මන්ද නිමැවුමේ කිසිවක් වැරදි නොවේ. Ansible ඉල්ලූ දේ හරියටම කළේය: 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

ටයිම්ස්ටෑම්ප තුනක් එක් ලොග් පේළියක් කියවීමට පෙරම කතාව කියයි. වින්‍යාස ගොනුව unit සක්‍රීය වූ මොහොතට වඩා නව නම්, ක්‍රියාත්මක වන අතුරුමුහුණත පැරණි ගොනුවකින් ගොඩනගා ඇත, සහ පසුව එන සියලු රෝග ලක්ෂණ එතැනින් එයි.

මෙය Ansible දෝෂයක් නොවේ. «එය ක්‍රියාත්මක වන බව සහතික කරන්න» සහ «එය මෙයම ක්‍රියාත්මක කරන බව සහතික කරන්න» ලෙස වෙන් කරන ඕනෑම වින්‍යාස කළමනාකරණ මෙවලමක මෙම හැසිරීම දක්නට ලැබේ. මෙම වෙනස දහවල් එකක් නාස්ති වන තුරු ඉතා සියුම් ලෙස පෙනේ.

ආරම්භ කළ බව තත්ත්වයක් මිස නැවත පූරණයක් නොවේ

state: started unit ගැන කොන්දේසියක් ප්‍රකාශ කරයි. සේවාව එහි ආදාන නැවත කියවන බව එය පොරොන්දු නොවේ, තමා කිසිදා නොවිවෘත කළ ගොනුවක් වෙනස් වී ඇති බව දැනගත නොහැක. wg-quick යෙදවීමකදී ආදානවලට අතුරුමුහුණත් වින්‍යාසය, ලිපින, මාර්ග, DNS සටහන් සහ ඕනෑම post-up කොක්ක ඇතුළත් වේ.

එබැවින් යාවත්කාලීන කළ ගොනුවක නව peer, වෙනත් ලිපිනයක් හෝ වෙනස් කළ මාර්ගගත කිරීමේ උපදෙසක් තිබිය හැකි අතර, සජීවී අතුරුමුහුණත පැරණි කට්ටලයම සේවා කරයි. handshake තවමත් සාර්ථක වන්නේ පූරණය කළ යතුරු සහ අන්ත ලක්ෂ්‍ය තවමත් වලංගු නිසාය. එයම අසාර්ථකත්වය දැකීමට අපහසු කරයි, සහ මිනිසුන් ටයිම්ස්ටෑම්පයක් පරීක්ෂා කිරීමට පෙර පැයක් DNS පසුපස දුවන්නේ එබැවිනි.

මොඩියුලයේ තවත් විකල්ප දෙකක් බොහෝ විට විසඳුමක් ලෙස සැලකේ. daemon_reload systemd හට unit ගොනු නැවත කියවීමට සලස්වයි, එය WireGuard වින්‍යාස ගොනුවට අදාළ නොවේ. state: reloaded unit හට එහි නැවත පූරණ ක්‍රියාව ක්‍රියාත්මක කරන ලෙස ඉල්ලයි, එය ඔබට අවශ්‍ය දේ කරන්නේද යන්න සම්පූර්ණයෙන්ම unit මත රඳා පවතී. දෙකම ක්‍රියාත්මක වන ක්‍රියාවලිය ඇත්තටම කුමන ආදාන කියවා ඇත්දැයි දැනගැනීම සඳහා ආදේශකයක් නොවේ.

ගොනුව ස්ථාපනය කරන්න, පසුව 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: restarted

handler ධාවනය වන්නේ play අවසානයේ, ඒවා දන්වා ඇති කාර්යයන්ට පසුවය, එබැවින් එම play හි පසුව එන කාර්යයකට තවමත් පැරණි අතුරුමුහුණත දැකිය හැක. අනුපිළිවෙල වැදගත් නම්, නව වින්‍යාසය මත රඳා පවතින කාර්යයට පෙර meta: flush_handlers මගින් handler පැහැදිලිවම හිස් කරන්න.

unit හි නැවත පූරණ ක්‍රියාව තහවුරු කර නොමැති නම් reload වෙනුවට restart භාවිත කරන්න. upstream wg-quick unit එයට සහාය දෙන අතර WireGuard වින්‍යාසය සමමුහුර්ත කරයි, නමුත් ලිපින, මාර්ග, DNS හෝ කොක්ක සැකසීම නැවත ක්‍රියාත්මක නොකරයි. එබැවින් මාර්ග උපදෙසක් එක් කිරීමෙන් පසු 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 ලැයිස්තුවේ වෙනසක් යනු ගොනුව කිසිදා යොදා නොගත් බවයි. වෙනස් වනු ඇතැයි ඔබ බලාපොරොත්තු වූ යතුරු හෝ අන්ත ලක්ෂ්‍යවල පමණක් වෙනසක් යනු යමක් එය අංශිකව යොදා ඇති බවයි. කිසිදු වෙනසක් නොමැති නම් වින්‍යාසය වර්තමාන වන අතර දෝෂය වෙනත් තැනක ඇත, එයද ප්‍රයෝජනවත් ප්‍රතිඵලයකි.

නැවත ආරම්භයේ පිරිවැය දැනුවත්ව ගෙවන්න

අතුරුමුහුණත නැවත ආරම්භ කිරීමෙන් උමග කැඩී යයි, එම උමග ඔබේ පරිපාලන සැසිය රැගෙන යන්නේ නම්, නැවත ආරම්භය එය ඉල්ලා සිටි සැසිය අවසන් කරයි. handler වෙනස්කම් කවුළුවක් පිටුපස තබන්න, නැතහොත් අතුරුමුහුණත නැවත ආරම්භය මත රඳා නොපවතින කළමනාකරණ මාර්ගයකින් playbook ධාවනය කරන්න.

මෙම පිරිවැය නිසාම මිනිසුන් reload වෙත නැඹුරු වේ. එය සාධාරණ ප්‍රවණතාවක් වන අතර, reload ඇත්තටම කුමන වෙනස්කම් යෙදේදැයි දැනගත් විට එය නිවැරදි වේ. upstream wg-quick unit තුළ peer සහ යතුරු වෙනස්කම් සඳහා එය ප්‍රමාණවත්ය; ලිපින, මාර්ගගත කිරීම සහ කොක්ක සඳහා නොවේ. මෙය එක් වරක් පැහැදිලි කර ගැනීම වෙනස්කම් කවුළුවක් තුළ සොයා ගැනීමට වඩා ලාභදායකය.

systemd_service මොඩියුලයේ ලේඛන started, restarted සහ reloaded අතර වෙනස පැහැදිලි කරයි, කොළ සාරාංශයකින් අනුමාන කිරීමට වඩා එක් වරක් කියවීම වටී. මෙම මුළු සාකච්ඡාවම එම එකම වෙනසෙන් පැමිණේ.

අදාළ ලිපි