{"id":80305,"date":"2020-05-05T01:42:50","date_gmt":"2020-05-04T23:42:50","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek"},"modified":"2020-05-05T01:42:50","modified_gmt":"2020-05-04T23:42:50","slug":"kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek","title":{"rendered":"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/b8981189e3a2d7f8429757cd521b7583.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb shpjegim <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=GdrJv5oypfg\">i fjal\u00ebs<\/a><\/noindex> n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.meetup.com\/DevOps-40\/events\/269140089\/\">DevOps-40 2020-03-18<\/a><\/noindex>:<\/p>\n<p><\/p>\n<p>Duke filluar nga komiti i dyt\u00eb, \u00e7do kod b\u00ebhet legjend\u00eb, sepse ide t\u00eb fillimit fillojn\u00eb t\u00eb ndryshojn\u00eb nga realiteti i ashp\u00ebr. Kjo nuk \u00ebsht\u00eb e mir\u00eb dhe as e keqe, \u00ebsht\u00eb nj\u00eb realitet me t\u00eb cilin \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb debatohet dhe i cili duhet pranuar. Nj\u00eb pjes\u00eb e k\u00ebtij procesi \u00ebsht\u00eb refaktorizimi. Refaktorizimi i Infrastructure as Code. Le t\u00eb filloj\u00eb historia se si t\u00eb refaktorizosh Ansible p\u00ebr nj\u00eb vit pa r\u00ebn\u00eb nga binar\u00ebt.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"zarozhdenie-legacy\">Lindja e Legjend\u00ebs<\/h2>\n<p><\/p>\n<h3 id=\"den--1-nulevoy-pacient\">Dita \u2116 1: Pacienti Zero<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/086414710864293a91a37785854bc096.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ishte nj\u00eb projekt i kusht\u00ebzuar. Kishte nj\u00eb ekip zhvillimi Dev dhe inxhinier\u00eb Ops. Ata zgjidhnin t\u00eb nj\u00ebjt\u00ebn detyr\u00eb: si t\u00eb hapnin serverat dhe t\u00eb lansonin aplikacionin. Problemi ishte se secila ekip zgjidhte k\u00ebt\u00eb detyr\u00eb sipas m\u00ebnyr\u00ebs s\u00eb saj. N\u00eb projekt u mor vendim t\u00eb p\u00ebrdorej Ansible p\u00ebr t\u00eb sinkronizuar informacionin mes ekipeve Dev dhe Ops.<\/p>\n<p><\/p>\n<h3 id=\"den--89-zarozhdenie-legacy\">Dita \u2116 89: Lindja e Legjend\u00ebs<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/329bc3f190ca4d6519be6ac94026bc6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pa e kuptuar, donin t\u00eb b\u00ebnin sa m\u00eb mir\u00eb, por rezultoi legjend\u00eb. Si ndodhi k\u00ebtu?<\/p>\n<p><\/p>\n<ul>\n<li>Kemi nj\u00eb detyr\u00eb urgjente k\u00ebtu, do t\u00eb b\u00ebjm\u00eb nj\u00eb hack t\u00eb pap\u00ebrpunuar \u2014 m\u00eb pas do ta rregullojm\u00eb.<\/li>\n<li>Dokumentacioni mund t\u00eb mos shkruhet, \u00ebsht\u00eb e qart\u00eb se \u00e7far\u00eb po ndodh k\u00ebtu.<\/li>\n<li>Un\u00eb e di Ansible \/ Python \/ Bash \/ Terraform! Shikoni si mund t\u00eb spordohem!<\/li>\n<li>Un Full Stack Overflow Developer e kam kopjuar k\u00ebt\u00eb nga stackoverflow, nuk di si funksionon, por duket mir\u00eb dhe zgjidh problemat.<\/li>\n<\/ul>\n<p><\/p>\n<p>Si rezultat, mund t\u00eb merrni nj\u00eb kod me pamje t\u00eb \u00e7uditshme, p\u00ebr t\u00eb cilin nuk ka dokumentacion, nuk \u00ebsht\u00eb e qart\u00eb se \u00e7far\u00eb b\u00ebn, a \u00ebsht\u00eb i nevojsh\u00ebm, por problemi \u00ebsht\u00eb se duhet ta zhvilloni, ta p\u00ebrmir\u00ebsoni, t\u00eb shtoni mb\u00ebshtetje, duke e b\u00ebr\u00eb situat\u00ebn vet\u00ebm edhe m\u00eb t\u00eb keqe.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- hosts: localhost\n  tasks:\n    - shell: echo -n Z &gt;&gt; a.txt &amp;&amp; cat a.txt\n      register: output\n      delay: 1\n      retries: 5\n      until: not output.stdout.find(&quot;ZZZ&quot;)<\/code><\/pre>\n<p><\/p>\n<h3 id=\"den--109-osoznanie-problemy\">Dita \u2116 109: Ndjenja e problemit<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/b7da9f6aecc5bebab6072ba6e5dfa824.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Modeli i menduar dhe i realizuar fillimisht i IaC ndalon s\u00eb p\u00ebrmbushuri realitetin me k\u00ebrkesat e p\u00ebrdoruesve \/ biznesit \/ ekipeve t\u00eb tjera, koha p\u00ebr t\u00eb b\u00ebr\u00eb ndryshime n\u00eb infrastruktur\u00eb ndalon s\u00eb qen\u00eb e pranueshme. N\u00eb k\u00ebt\u00eb moment, vjen kuptimi se \u00ebsht\u00eb koha p\u00ebr t\u00eb nd\u00ebrmarr\u00eb masa.<\/p>\n<p><\/p>\n<h2 id=\"refaktoring-iac\">Refaktorimi i IaC<\/h2>\n<p><\/p>\n<h3 id=\"den--139-a-vam-tochno-nuzhen-refaktoring\">Dita \u2116 139: A \u00ebsht\u00eb v\u00ebrtet e nevojshme refaktorimi p\u00ebr ju?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/881455f096870d51bc2b9b8f87f171b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para se t\u00eb filloni t\u00eb refaktoroni, duhet t\u00eb p\u00ebrgjigjeni n\u00eb disa pyetje t\u00eb r\u00ebnd\u00ebsishme:<\/p>\n<p><\/p>\n<ol>\n<li>Pse ju nevojitet gjith\u00e7ka kjo?<\/li>\n<li>Keni koh\u00eb?<\/li>\n<li>A keni njohuri t\u00eb mjaftueshme?<\/li>\n<\/ol>\n<p><\/p>\n<p>N\u00ebse nuk e dini si t\u00eb p\u00ebrgjigjeni n\u00eb k\u00ebto pyetje, at\u00ebher\u00eb refaktorimi do t\u00eb p\u00ebrfundoj\u00eb pa filluar ose mund t\u00eb rezultoj\u00eb vet\u00ebm m\u00eb keq. Sepse ka pasur p\u00ebrvoj\u00eb( <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/467171\/\">\u00c7far\u00eb m\u00ebsova kur testova 200,000 rreshta kodi t\u00eb infrastruktur\u00ebs<\/a><\/noindex>), at\u00ebher\u00eb projekti k\u00ebrkoi ndihm\u00eb p\u00ebr t\u00eb korrigjuar rolet dhe p\u00ebr t'i mbuluar ato me teste.<\/p>\n<p><\/p>\n<h3 id=\"den--149-podgotovka-refaktoringa\">Dita \u2116 149: P\u00ebrgatitja p\u00ebr refaktorim<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/3e2d66a81cd162dcb4181f3914fc132d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u043e\u0447\u0435\u0440e\u0434\u043d\u043e\u0435 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0449\u0430\u0435\u043c\u0441\u044f, \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0438 \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u044b \u043a\u0430\u043a-\u0442\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0430\u0442\u044c\u044f \u0432 confluence, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 &quot;\u043a\u0430\u043a \u043b\u0443\u0447\u0448\u0435?&quot; \u0438\u043b\u0438 &quot;\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435?&quot; \u043c\u044b \u043d\u0435 \u0441\u0431\u0438\u043b\u0438\u0441\u044c \u0441 \u043a\u0443\u0440\u0441\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u0434\u0435\u0438 <em>p\u00ebr\u00e7a dhe sundo<\/em>: e coptojm\u00eb infrastruktur\u00ebn n\u00eb copa t\u00eb vogla \/ tulla. Ky qasje na lejon t\u00eb marrim nj\u00eb cop\u00eb t\u00eb izoluar t\u00eb infrastruktur\u00ebs, t\u00eb kuptojm\u00eb se \u00e7far\u00eb b\u00ebn, ta mbulojm\u00eb me teste dhe ta ndryshojm\u00eb pa pasur frik\u00eb se do t\u00eb prishim di\u00e7ka.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/a0ea12ae6568d5c7e97469eaf404d608.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebshtu, testimi i infrastruktur\u00ebs b\u00ebhet thelb\u00ebsor dhe k\u00ebtu duhet p\u00ebrmendur piramida e testimit t\u00eb infrastruktur\u00ebs. E nj\u00ebjta ide si n\u00eb zhvillim, por p\u00ebr infrastruktur\u00ebn: kalojm\u00eb nga testet e lira dhe t\u00eb shpejta q\u00eb kontrollojn\u00eb gj\u00ebra t\u00eb thjeshta, p\u00ebr shembull distancat, n\u00eb teste t\u00eb shtrenjta q\u00eb zgjerojn\u00eb nj\u00eb infrastruktur\u00eb t\u00eb t\u00ebr\u00eb.<\/p>\n<p><\/p>\n<h4 id=\"popytki-testirovaniya-ansible\">P\u00ebrpjekjet p\u00ebr testimin e Ansible<\/h4>\n<p><\/p>\n<p>Para se t\u00eb shkojm\u00eb p\u00ebr t\u00eb p\u00ebrshkruar se si e mbulonim testimin e Ansible n\u00eb projekt, do t\u00eb p\u00ebrshkruaj p\u00ebrpjekjet dhe qasjet q\u00eb kishim p\u00ebrdorur m\u00eb par\u00eb, p\u00ebr t\u00eb kuptuar kontekstin e vendimeve t\u00eb marra.<\/p>\n<p><\/p>\n<h5 id=\"den---997-sds-provision\">Dita \u2116 -997: Prodhimi i SDS<\/h5>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/3d93865fb03c7d7baa055b99e21d9ae9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her\u00ebn e par\u00eb q\u00eb kam testuar Ansible ishte n\u00eb nj\u00eb projekt p\u00ebr zhvillimin e SDS (Storage i Definuar nga Softueri). Ka nj\u00eb artikull t\u00eb ve\u00e7ant\u00eb mbi k\u00ebt\u00eb tem\u00eb.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/342216\/\">Si t\u00eb prish\u00ebsh bi\u00e7ikleta mbi bajpaset gjat\u00eb testimit t\u00eb shp\u00ebrndarjes tuaj<\/a><\/noindex>, por n\u00ebse e shpreh shkurt, kemi pasur nj\u00eb piramid\u00eb t\u00eb p\u00ebrmbysur testimi dhe testimi zgjaste 60-90 minuta p\u00ebr nj\u00eb rol, q\u00eb \u00ebsht\u00eb shum\u00eb. Baza ishin testet e e2e, dmth. ne shp\u00ebrndanim nj\u00eb instalim t\u00eb plot\u00eb dhe pastaj e testonim at\u00eb. Nj\u00eb tjet\u00ebr v\u00ebshtir\u00ebsi ishte shpikja e bi\u00e7iklet\u00ebs son\u00eb. Por duhet pranuar se kjo zgjidhje funksiononte dhe na lejonte t\u00eb l\u00ebshonim versionet n\u00eb m\u00ebnyr\u00eb t\u00eb q\u00ebndrueshme.<\/p>\n<p><\/p>\n<h5 id=\"den---701-ansible-i-test-kitchen\">Dita \u2116 -701: Ansible dhe test kitchen<\/h5>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/1b87eca5b01cace01b48edaf28a4ab7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zhvillimi i ides\u00eb s\u00eb testimit t\u00eb Ansible u b\u00eb p\u00ebrdorimi i mjeteve t\u00eb gatshme, konkretisht test kitchen \/ kitchen-ci dhe inspec. Zgjedhja u bazua n\u00eb njohurit\u00eb p\u00ebr Ruby (m\u00eb shum\u00eb n\u00eb artikullin n\u00eb Habr: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">A dreamojn\u00eb programuesit YML p\u00ebr testimin e Ansible?<\/a><\/noindex>) punoi m\u00eb shpejt p\u00ebr rreth 40 minuta p\u00ebr 10 role. Krijuam nj\u00eb grup makinash virtuale dhe brenda tyre ekzekutuam teste.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/345fe1c82dde1e6a94978781c90f8a85.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, zgjidhja funksionoi, por kishte nj\u00eb ndjenj\u00eb t\u00eb shpejt\u00eb p\u00ebr shkak t\u00eb heterogjenitetit. Kur rrit\u00ebm numrin e testeve n\u00eb 13 role baz\u00eb dhe 2 meta-role q\u00eb kombinonin role m\u00eb t\u00eb vogla, testet papritmas u zgjat\u00ebn n\u00eb 70 minuta, e cila \u00ebsht\u00eb pothuajse dyfishi i koh\u00ebs. Kishim v\u00ebshtir\u00ebsi t\u00eb flisnim p\u00ebr praktikat e XP (programimit ekstrem) pasi askush nuk do t\u00eb donte t\u00eb priste 70 minuta. Kjo ishte nj\u00eb arsyetim p\u00ebr t\u00eb ndryshuar qasjen.<\/p>\n<p><\/p>\n<h5 id=\"den---601-ansible-i-molecule\">Dita \u2116 -601: Ansible dhe molecule<\/h5>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/37e144725fff4adda585781d057782ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Konceptualisht, \u00ebsht\u00eb e ngjashme me testkitchen, vet\u00ebm se ne e transferuam testimin e roleve n\u00eb docker dhe ndryshuam stek. Si rezultat, koha u reduktua n\u00eb 20-25 minuta t\u00eb stabilizuara p\u00ebr 7 role.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/640075d7087c1bc2337cb82ad412c6b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duke rritur numrin e roleve t\u00eb testuara n\u00eb 17 dhe linj\u00ebn e 45 roleve, ne e realizuam k\u00ebt\u00eb brenda 28 minutash n\u00eb 2 slave t\u00eb Jenkins.<\/p>\n<p><\/p>\n<h3 id=\"den--167-dobavlyaem-na-proekt-testy-ansible\">Dita \u2116 167: Shtojm\u00eb teste Ansible n\u00eb projekt<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/e62261eb4000f2bc4df4cea398d38276.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebr nj\u00eb p\u00ebrpjekje e shpejt\u00eb, ka shum\u00eb t\u00eb ngjar\u00eb q\u00eb t\u00eb refaktoroni detyr\u00ebn. Detyra duhet t\u00eb jet\u00eb e matshme, n\u00eb m\u00ebnyr\u00eb q\u00eb ta ndani at\u00eb n\u00eb cop\u00ebza t\u00eb vogla dhe ta hani elefantin me lug\u00eb. Duhet t\u00eb keni nj\u00eb kuptim n\u00ebse po l\u00ebvizni n\u00eb drejtimin e duhur dhe sa koh\u00eb duhet t\u00eb ecni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/daf1f9ba63e7122d5d39311b35de19a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, nuk ka r\u00ebnd\u00ebsi se si do t\u00eb b\u00ebhet, mund t\u00eb shkruhet n\u00eb nj\u00eb let\u00ebr, mund t\u00eb vendosen stikera n\u00eb dollap, mund t\u00eb krijohen detyra n\u00eb Jira, ose mund t\u00eb hapen dokumente Google dhe t\u00eb shkruhet aty statusi aktual. Problemi \u00ebsht\u00eb se procesi nuk \u00ebsht\u00eb nj\u00eb moment; do t\u00eb jet\u00eb i gjat\u00eb dhe i lodhsh\u00ebm. \u00cbsht\u00eb pak e mundshme q\u00eb dikush t\u00eb d\u00ebshiroj\u00eb q\u00eb gjat\u00eb koh\u00ebs s\u00eb ristrukturimit t\u00eb humbas\u00eb interes dhe t\u00eb lodhet.<\/p>\n<p><\/p>\n<p>Ristrukturimi \u00ebsht\u00eb i thjesht\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Hani.<\/li>\n<li>Flini.<\/li>\n<li>Programoni.<\/li>\n<li>Testi IaC.<\/li>\n<li>P\u00ebrs\u00ebritni.<\/li>\n<\/ul>\n<p><\/p>\n<p>dhe k\u00ebshtu p\u00ebrs\u00ebrisim derisa t\u00eb arrijm\u00eb q\u00ebllimin e caktuar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/222fe586d3e4e0bc23051fff1eb7bff4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nuk do t\u00eb jet\u00eb e mundur t\u00eb testoni gjith\u00e7ka menj\u00ebher\u00eb, prandaj detyra jon\u00eb e par\u00eb ishte t\u00eb fillonim me lintimin dhe kontrollin e sintaks\u00ebs. <\/p>\n<p><\/p>\n<h3 id=\"den--181-green-build-master\">Dita \u2116 181: Green Build Master<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/86cf52ede5fd61411e2b87a132c7f386.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lintimi \u00ebsht\u00eb nj\u00eb hap i vog\u00ebl drejt Green Build Master. Nj\u00eb gj\u00eb e till\u00eb nuk do t\u00eb d\u00ebmtoj\u00eb shum\u00eb, por do t\u00eb lejoj\u00eb q\u00eb proceset t\u00eb p\u00ebrshtaten dhe t\u00eb krijohen build-e t\u00eb gjelbra n\u00eb Jenkins. Ideja \u00ebsht\u00eb t\u00eb formohen zakone te ekipi:<\/p>\n<p><\/p>\n<ul>\n<li>Testet e kuqe jan\u00eb t\u00eb k\u00ebqija.<\/li>\n<li>Kur arrini p\u00ebr t\u00eb korrigjuar di\u00e7ka, b\u00ebjeni kodin pak m\u00eb t\u00eb mir\u00eb se sa ishte p\u00ebrpara.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"den--193-ot-lintovki-k-unit-testam\">Dita \u2116 193: Nga lintimi n\u00eb testet unitare.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/2f79eb411cf64976459c7fc53f22b2fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duke organizuar procesin e kalimit t\u00eb kodit n\u00eb master, mund t\u00eb filloni procesin e p\u00ebrmir\u00ebsimit t\u00eb hap pas hapi \u2014 duke z\u00ebvend\u00ebsuar linfimin me ekzekutimin e rol\u00ebve, madje edhe pa idempotenc\u00eb. \u00cbsht\u00eb e nevojshme t\u00eb kuptohet se si t\u00eb aplikohen rollet, si funksionojn\u00eb ato.<\/p>\n<p><\/p>\n<h3 id=\"den--211-ot-unit-k-integration-testam\">Dita \u2116 211: Nga testet unit n\u00eb testet e integrimit<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/9cfeb70b7b637eed4d0c93eb87d9d254.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kur testet unit mbulojn\u00eb shumic\u00ebn e rol\u00ebve dhe gjith\u00e7ka \u00ebsht\u00eb e linfuar, mund t\u00eb kaloni n\u00eb shtimin e testeve t\u00eb integrimit. Kjo n\u00ebnkupton testimin e nj\u00eb kombinimi t\u00eb komponent\u00ebve n\u00eb infrastrukture, p\u00ebr shembull nj\u00eb konfigurim t\u00eb plot\u00eb t\u00eb nj\u00eb instanc\u00eb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/c9cdcde1260df9837b2053b2cc811c84.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb Jenkins, ne gjeneronim shum\u00eb etapa, t\u00eb cilat paralelisht linfonin rol\u00ebt\/plementet, pastaj testet unit n\u00eb kontejner\u00eb dhe n\u00eb fund testet e integrimit.<\/p>\n<p><\/p>\n<h4 id=\"jenkins--docker--ansible--tests\">Jenkins + Docker + Ansible = Testet<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/218b1d768d2b284d18cfcba2370e080a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>Kontrolloni repo dhe gjeneroni etapat e nd\u00ebrtimit.<\/li>\n<li>Ekzekutoni etapat e linfimit t\u00eb pl\u00ebybok\u00ebve n\u00eb paralel.<\/li>\n<li>Ekzekutoni etapat e linfimit t\u00eb rol\u00ebve n\u00eb paralel.<\/li>\n<li>Ekzekutoni etapat e kontrollit t\u00eb sintaks\u00ebs t\u00eb rol\u00ebve n\u00eb paralel.<\/li>\n<li>Ekzekutoni etapat e testeve t\u00eb rol\u00ebve n\u00eb paralel.\n<ol>\n<li>Linfoni rol.<\/li>\n<li>Kontrolloni var\u00ebsin\u00eb nga rollet e tjera.<\/li>\n<li>Kontrolloni sintaks\u00ebn.<\/li>\n<li>Krijoni instanc\u00eb docker<\/li>\n<li>Ekzekutoni molecule\/default\/playbook.yml.<\/li>\n<li>Kontrolloni idempotenc\u00ebn.<\/li>\n<\/ol>\n<\/li>\n<li>Ekzekutoni testet e integrimit<\/li>\n<li>P\u00ebrfundimi<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den--271-bus-factor\">Dita \u2116 271: Bus Factor<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/eb1da11eb32f3f64d573e0414f0e05ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb fillim, nj\u00eb grup i vog\u00ebl prej disa personash merrej me ristrukturimin. Ata b\u00ebnin rishikimin e kodit n\u00eb master. Me kalimin e koh\u00ebs, ekipi zhvilloi njohuri mbi kodin, dhe rishikimi i kodit ndihmoi n\u00eb p\u00ebrhapjen e njohurive mbi infrastruktur\u00ebn dhe si funksionon ajo. E ve\u00e7anta k\u00ebtu ishte se rishikuesit zgjidheshin me radh\u00eb, sipas nj\u00eb grafiku, pra, me nj\u00eb probabilitet t\u00eb caktuar mund t\u00eb jepesh n\u00eb nj\u00eb pjes\u00eb t\u00eb re t\u00eb infrastruktur\u00ebs.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/5ca2cf914f32f69f8a84d6c5bd4e5114.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu duhet t\u00eb jet\u00eb e p\u00ebrshtatshme. E p\u00ebrshtatshme p\u00ebr t\u00eb b\u00ebr\u00eb rishikime, p\u00ebr t\u00eb par\u00eb p\u00ebr \u00e7far\u00eb detyre \u00ebsht\u00eb b\u00ebr\u00eb, historin\u00eb e diskutimeve. Ne integrova jenkins + bitbucket + jira.<\/p>\n<p><\/p>\n<p>Por rishikimi si nj\u00eb e till\u00eb nuk \u00ebsht\u00eb nj\u00eb panac\u00eb, ndodhi q\u00eb n\u00eb master kaloi nj\u00eb kod q\u00eb na solli teste t\u00eb paq\u00ebndrueshme:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- get_url:\n    url: &quot;{{ actk_certs }}\/{{ item.1 }}&quot;\n    dest: &quot;{{ actk_src_tmp }}\/&quot;\n    username: &quot;{{ actk_mvn_user }}&quot;\n    password: &quot;{{ actk_mvn_pass }}&quot;\n  with_subelements:\n    - &quot;{{ actk_cert_list }}&quot;\n    - &quot;{{ actk_certs }}&quot;\n  delegate_to: localhost\n\n- copy:\n    src: &quot;{{ actk_src_tmp }}\/{{ item.1 }}&quot;\n    dest: &quot;{{ actk_dst_tmp }}&quot;\n  with_subelements:\n    - &quot;{{ actk_cert_list }}&quot;\n    - &quot;{{ actk_certs }}&quot;<\/code><\/pre>\n<p><\/p>\n<p>M\u00eb pas, e korrigovuam k\u00ebt\u00eb, por mbeti nj\u00eb shije e keqe.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">get_url:\n    url: &quot;{{ actk_certs }}\/{{ actk_item }}&quot;\n    dest: &quot;{{ actk_src_tmp }}\/{{ actk_item }}&quot;\n    username: &quot;{{ actk_mvn_user }}&quot;\n    password: &quot;{{ actk_mvn_pass }}&quot;\n  loop_control:\n    loop_var: actk_item\n  with_items: &quot;{{ actk_cert_list }}&quot;\n  delegate_to: localhost\n\n- copy:\n    src: &quot;{{ actk_src_tmp }}\/{{ actk_item }}&quot;\n    dest: &quot;{{ actk_dst_tmp }}&quot;\n  loop_control:\n    loop_var: actk_item\n  with_items: &quot;{{ actk_cert_list }}&quot;<\/code><\/pre>\n<p><\/p>\n<h3 id=\"den--311-uskoryaem-testy\">Dita \u2116 311: Shpejtoni provimet<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/ac7c16be6ea3e140916adc5b060286b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0421\u043e \u0432\u0440\u0435\u043d\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0431\u0438\u043b\u0434\u044b \u0431\u0435\u0436\u0430\u043b\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u043e \u0447\u0430\u0441\u0430 \u0432 \u043f\u043b\u043e\u0445\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0440\u0435\u0442\u0440\u043e \u0431\u044b\u043b\u0430 \u0444\u0440\u0430\u0437\u0430 \u043f\u043e \u0442\u0438\u043f\u0443 &quot;\u0445\u043e\u0440\u043e\u0448\u043e \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043d\u043e \u043e\u043d\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435&quot;. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0434 docker, \u0434\u0430\u0431\u044b \u0431\u044b\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0422\u0430\u043a \u0436\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 testinfra \u043d\u0430 ansible verifier \u0447\u0442\u043e \u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b-\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/58576edb7ce00491cd92d7bc6810fc93.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sakt\u00ebsisht, k\u00ebtu kishte nj\u00eb kompleks masash:<\/p>\n<p><\/p>\n<ol>\n<li>Kalimi n\u00eb docker.<\/li>\n<li>Heqja e testimit t\u00eb roleve, q\u00eb dyfishohet p\u00ebr shkak t\u00eb var\u00ebsive.<\/li>\n<li>Rritja e numrit t\u00eb slave-ve.<\/li>\n<li>Rendi i ekzekutimit t\u00eb testeve.<\/li>\n<li>Mund\u00ebsia p\u00ebr t\u00eb krijuar lintim <strong>T\u00cb GJITHA<\/strong> lokalisht me nj\u00eb komand\u00eb.<\/li>\n<\/ol>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/3bcdaf0afc24c74739c852e220aa3b2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb p\u00ebrfundim, Pipeline n\u00eb jenkins gjithashtu u unifikua<\/p>\n<p><\/p>\n<ol>\n<li>Gjeneroni fazat e nd\u00ebrtimit.<\/li>\n<li>Lint gjith\u00e7ka n\u00eb paralel.<\/li>\n<li>Ekzekutoni etapat e testeve t\u00eb rol\u00ebve n\u00eb paralel.<\/li>\n<li>K \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044f.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"lessons-learned\">M\u00ebsimet e nxjerra<\/h2>\n<p><\/p>\n<h3 id=\"avoid-global-variables\">Shmangni variablat globale<\/h3>\n<p><\/p>\n<p>Ansible p\u00ebrdor variabla globale, ka nj\u00eb workaround t\u00eb pjessh\u00ebm n\u00eb form\u00ebn e <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/reference_appendices\/config.html#default-private-role-vars\">private_role_vars<\/a><\/noindex>, por kjo nuk \u00ebsht\u00eb nj\u00eb zgjidhje e plot\u00eb. <\/p>\n<p><\/p>\n<p>Dua t\u00eb jap nj\u00eb shembull. Le t\u00eb themi se kemi <code>role_a<\/code> dhe <code>role_b<\/code><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># cat role_a\/defaults\/main.yml\n---\nmsg: a\n\n# cat role_a\/tasks\/main.yml\n---\n- debug:\n    msg: role_a={{ msg }}<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\"># cat role_b\/defaults\/main.yml\n---\nmsg: b\n\n# cat role_b\/tasks\/main.yml\n---\n- set_fact:\n    msg: b\n- debug:\n    msg: role_b={{ msg }}<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">- hosts: localhost\n  vars:\n    msg: hello\n  roles:\n    - role: role_a\n    - role: role_b\n  tasks:\n    - debug:\n        msg: play={{msg}}<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/7712ba529596ee00eaac22c9e59f7abe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00eb gj\u00eb e \u00e7uditshme \u00ebsht\u00eb se rezultati i ekzekutimit t\u00eb playbook-\u00ebve do t\u00eb varet nga gj\u00ebra q\u00eb nuk jan\u00eb gjithmon\u00eb t\u00eb qarta, si p\u00ebr shembull renditja e roleve. Fatkeq\u00ebsisht, kjo \u00ebsht\u00eb natyra e Ansible dhe gj\u00ebja m\u00eb e mir\u00eb q\u00eb mund t\u00eb b\u00ebni \u00ebsht\u00eb t\u00eb p\u00ebrdorni disa marr\u00ebveshje, p\u00ebr shembull, brenda rolit t\u00eb p\u00ebrdorni vet\u00ebm variablat e p\u00ebrshkruara n\u00eb k\u00ebt\u00eb rol.<\/p>\n<p><\/p>\n<p><strong>KEQ<\/strong>: p\u00ebrdorni nj\u00eb variab\u00ebl globale.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># cat roles\/some_role\/tasks\/main.yml\n---\ndebug:\n  var: java_home<\/code><\/pre>\n<p><\/p>\n<p><strong>BENE<\/strong>: N\u00eb <code>defaults<\/code> p\u00ebrcaktoni variabl\u00ebn e nevojshme dhe m\u00eb pas p\u00ebrdorni vet\u00ebm ato.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># cat roles\/some_role\/defaults\/main.yml\n---\nr__java_home:\n &quot;{{ java_home | default('\/path') }}&quot;\n\n# cat roles\/some_role\/tasks\/main.yml\n---\ndebug:\n  var: r__java_home\n<\/code><\/pre>\n<p><\/p>\n<h3 id=\"prefix-role-variables\">Variablat e rolit me prefiks<\/h3>\n<p><\/p>\n<p><strong>KEQ<\/strong>: p\u00ebrdorni nj\u00eb variab\u00ebl globale.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># cat roles\/some_role\/defaults\/main.yml\n---\ndb_port: 5432<\/code><\/pre>\n<p><\/p>\n<p><strong>BENE<\/strong>: N\u00eb rol p\u00ebr variablat, p\u00ebrdorni variablat me prefiksin e emrit t\u00eb rolit, q\u00eb do ta leht\u00ebsoj\u00eb kuptimin e asaj q\u00eb po ndodh kur shikoni inventarin.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># cat roles\/some_role\/defaults\/main.yml\n---\nsome_role__db_port: 5432<\/code><\/pre>\n<p><\/p>\n<h3 id=\"use-loop-control-variable\">P\u00ebrdorni variablin e kontrollit t\u00eb ciklit<\/h3>\n<p><\/p>\n<p><strong>KEQ<\/strong>: P\u00ebrdorni n\u00eb cikle variablin standard <code>item<\/code>, n\u00ebse ky detyr\u00eb\/playbook do t\u00eb p\u00ebrfshihet diku, mund t\u00eb \u00e7oj\u00eb n\u00eb sjellje t\u00eb paparashikueshme<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- hosts: localhost\n  tasks:\n    - debug:\n        msg: &quot;{{ item }}&quot;\n      loop:\n        - item1\n        - item2\n<\/code><\/pre>\n<p><\/p>\n<p><strong>BENE<\/strong>: Rishkruani variablin n\u00eb cik\u00ebl p\u00ebrmes <code>loop_var<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- hosts: localhost\n  tasks:\n    - debug:\n        msg: &quot;{{ item_name }}&quot;\n      loop:\n        - item1\n        - item2\n      loop_control:\n        loop_var: item_name\n<\/code><\/pre>\n<p><\/p>\n<h3 id=\"check-input-variables\">Kontrolloni variablat e inputit<\/h3>\n<p><\/p>\n<p>Kemi dakorduar t\u00eb p\u00ebrdorim prefikset e variablave, nuk do t\u00eb ishte e tep\u00ebrt t\u00eb kontrollonim n\u00ebse ato jan\u00eb t\u00eb p\u00ebrcaktuara si\u00e7 e presim dhe, p\u00ebr shembull, nuk jan\u00eb mbuluar nga nj\u00eb vler\u00eb e zbraz\u00ebt.<\/p>\n<p><\/p>\n<p><strong>BENE<\/strong>: Kontrolloni variablat.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- name: &quot;Verify that required string variables are defined&quot;\n  assert:\n    that: ahs_var is defined and ahs_var | length &gt; 0 and ahs_var != None\n    fail_msg: &quot;{{ ahs_var }} needs to be set for the role to work &quot;\n    success_msg: &quot;Required variables {{ ahs_var }} is defined&quot;\n  loop_control:\n    loop_var: ahs_var\n  with_items:\n    - ahs_item1\n    - ahs_item2\n    - ahs_item3<\/code><\/pre>\n<p><\/p>\n<h3 id=\"avoid-hashes-dictionaries-use-flat-structure\">Shmangni fjalor\u00ebt hash, p\u00ebrdorni struktur\u00eb t\u00eb thjesht\u00eb.<\/h3>\n<p><\/p>\n<p>N\u00ebse roli pret nj\u00eb hash\/fjalor n\u00eb nj\u00ebrin nga parametrat, at\u00ebher\u00eb n\u00ebse d\u00ebshirojm\u00eb t\u00eb korrigjojm\u00eb nj\u00ebrin nga parametrat f\u00ebmij\u00eb, na nevojitet t\u00eb rip\u00ebrcaktojm\u00eb t\u00eb gjith\u00eb hash\/fjalorin, q\u00eb do t\u00eb rris\u00eb kompleksitetin e konfigurimit.<\/p>\n<p><\/p>\n<p><strong>KEQ<\/strong>: P\u00ebrdorni hash\/fjalor.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nuser:\n  name: admin\n  group: admin<\/code><\/pre>\n<p><\/p>\n<p><strong>BENE<\/strong>: P\u00ebrdorni struktur\u00ebn e thjesht\u00eb t\u00eb variablave.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nuser_name: admin\nuser_group: &quot;{{ user_name }}&quot;<\/code><\/pre>\n<p><\/p>\n<h3 id=\"create-idempotent-playbooks--roles\">Krijoni playbooks &amp; role idempotente.<\/h3>\n<p><\/p>\n<p>Rolat dhe playbook-at duhet t\u00eb jen\u00eb idempotente, pasi kjo zvog\u00eblon drift-in e konfigurimit dhe frik\u00ebn p\u00ebr t\u00eb thyer di\u00e7ka. Por n\u00ebse p\u00ebrdorni molecule, at\u00ebher\u00eb kjo sjellje \u00ebsht\u00eb e paracaktuar.<\/p>\n<p><\/p>\n<h3 id=\"avoid-using-command-shell-modules\">Shmangni p\u00ebrdorimin e moduleve t\u00eb shell.<\/h3>\n<p><\/p>\n<p>P\u00ebrdorimi i modulit shell \u00e7on n\u00eb nj\u00eb paradig\u00ebm imperativ t\u00eb p\u00ebrshkrimit, n\u00eb vend t\u00eb nj\u00eb paradigme deklarative, e cila \u00ebsht\u00eb thelb\u00ebsore p\u00ebr Ansible.<\/p>\n<p><\/p>\n<h3 id=\"test-your-roles-via-molecule\">Testoni rolat tuaja p\u00ebrmes molecule.<\/h3>\n<p><\/p>\n<p>Molecule \u00ebsht\u00eb nj\u00eb mjet tep\u00ebr fleksib\u00ebl, le t\u00eb shqyrtojm\u00eb disa skenar\u00eb.<\/p>\n<p><\/p>\n<h4 id=\"molecule-multiple-instances\">Molecule Shum\u00eb instance<\/h4>\n<p><\/p>\n<p>N\u00eb <code>molecule.yml<\/code> n\u00eb seksionin <code>platformat<\/code> mund t\u00eb p\u00ebrshkruaj\u00eb shum\u00eb host-e q\u00eb do t\u00eb vendosen.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n    driver:\n      name: docker\n    platforms:\n      - name: postgresql-instance\n        hostname: postgresql-instance\n        image: registry.example.com\/postgres10:latest\n        pre_build_image: true\n        override_command: false\n        network_mode: host\n      - name: app-instance\n        hostname: app-instance\n        pre_build_image: true\n        image: registry.example.com\/docker_centos_ansible_tests\n        network_mode: host<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr pasoj\u00eb, k\u00ebto host-e mund t\u00eb p\u00ebrdoreshin m\u00eb von\u00eb n\u00eb <code>converge.yml<\/code> p\u00ebr t\u00eb p\u00ebrdorur:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Converge all\n  hosts: all\n  vars:\n    ansible_user: root\n  roles:\n    - role: some_role\n\n- name: Converge db\n  hosts: db-instance\n  roles:\n    - role: some_db_role\n\n- name: Converge app\n  hosts: app-instance\n  roles:\n    - role: some_app_role<\/code><\/pre>\n<p><\/p>\n<h4 id=\"ansible-verifier\">Verifikues Ansible<\/h4>\n<p><\/p>\n<p>N\u00eb molecule ka mund\u00ebsin\u00eb t\u00eb p\u00ebrdor\u00eb ansible p\u00ebr t\u00eb verifikuar se instanca \u00ebsht\u00eb konfiguruar si\u00e7 duhet, madje q\u00eb nga versioni 3 \u00ebsht\u00eb kjo opcione e parazgjedhur. Nuk \u00ebsht\u00eb aq fleksib\u00ebl sa testinfra\/inspec, por mund t\u00eb verifikoj\u00eb se p\u00ebrmbajtja e skedarit p\u00ebrputhet me pritshm\u00ebrit\u00eb tona:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Verify\n  hosts: all\n  tasks:\n    - name: copy config\n      copy:\n        src: expected_standalone.conf\n        dest: \/root\/wildfly\/bin\/standalone.conf\n        mode: &quot;0644&quot;\n        owner: root\n        group: root\n      register: config_copy_result\n\n    - name: Certify that standalone.conf changed\n      assert:\n        that: not config_copy_result.changed<\/code><\/pre>\n<p><\/p>\n<p>Ose t\u00eb hapni sh\u00ebrbimin, prisni q\u00eb t\u00eb jet\u00eb n\u00eb dispozicion dhe b\u00ebni testin e vog\u00ebl:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n  - emri: Verifiko\n    host-et: solr\n    detyra:\n      - komand\u00eb: \/blah\/solr\/bin\/solr start -s \/solr_home -p 8983 -force\n      - uri:\n          url: http:\/\/127.0.0.1:8983\/solr\n          metoda: GET\n          status_code: 200\n        regjistro: uri_result\n        deri: uri_result \u00ebsht\u00eb jo d\u00ebshtuar\n        p\u00ebrpjekje: 12\n        vones\u00eb: 10\n      - emri: Posto dokumente n\u00eb solr\n        komand\u00eb: \/blah\/solr\/bin\/post -c master \/exampledocs\/books.csv<\/code><\/pre>\n<p><\/p>\n<h3 id=\"put-complex-logic-into-modules--plugins\">Vendosni logjik\u00ebn komplekse n\u00eb module &amp; plugina<\/h3>\n<p><\/p>\n<p>Ansible predikon nj\u00eb qasje deklarative, prandaj kur b\u00ebni dega t\u00eb kodit, transformim t\u00eb t\u00eb dh\u00ebnave, module shell, kodi b\u00ebhet i v\u00ebshtir\u00eb p\u00ebr t'u lexuar. P\u00ebr ta luftuar k\u00ebt\u00eb dhe p\u00ebr ta mbajtur t\u00eb thjesht\u00eb p\u00ebr t'u kuptuar, do t\u00eb ishte e dobishme t\u00eb luftoni me k\u00ebt\u00eb kompleksitet duke krijuar modulet tuaja.<\/p>\n<p><\/p>\n<h3 id=\"summarize-tips--tricks\">P\u00ebrmbledhni K\u00ebshilla &amp; Trik\u00eb<\/h3>\n<p><\/p>\n<ol>\n<li>Shmangni variablat globale.<\/li>\n<li>Prefiksoni variablat e rolit.<\/li>\n<li>P\u00ebrdorni variablin e kontrollit t\u00eb ciklit.<\/li>\n<li>Kontrolloni variablat e inputit.<\/li>\n<li>Shmangni hashes dictionaries, p\u00ebrdorni struktur\u00eb t\u00eb shesht\u00eb.<\/li>\n<li>Krijoni playbooks &amp; role idempotente.<\/li>\n<li>Shmangni p\u00ebrdorimin e moduleve t\u00eb komand\u00ebs shell.<\/li>\n<li>Testoni rolet tuaja p\u00ebrmes molekul\u00ebs.<\/li>\n<li>Vendosni logjik\u00ebn komplekse n\u00eb module &amp; plugina.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">P\u00ebrfundimi<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si t\u00eb fillosh t\u00eb testosh Ansible, t\u00eb ristrukturosh projektin p\u00ebr nj\u00eb vit dhe t\u00eb mos b\u00ebsh \u00e7menduri.\" src=\"\/wp-content\/uploads\/2020\/05\/c52a13f6ba5500fce506fb0d448b496e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nuk mund t\u00eb merrni dhe t\u00eb refaktoroni infrastruktur\u00ebn n\u00eb projekt, madje edhe n\u00ebse keni IaC. Ky \u00ebsht\u00eb nj\u00eb proces i gjat\u00eb q\u00eb k\u00ebrkon durim, koh\u00eb dhe njohuri.<\/p>\n<p><\/p>\n<h2 id=\"links\">Links<\/h2>\n<p><\/p>\n<ul>\n<li>Prezantimet <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.mail.ru\/public\/266x\/3hJ2mQBzf\">How to test Ansible and don&#8217;t go nuts<\/a><\/noindex><\/li>\n<li>Video <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=GdrJv5oypfg\">How to test Ansible and don&#8217;t go nuts<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/467171\">\u00c7far\u00eb m\u00ebsova kur testova 200,000 rreshta kodi t\u00eb infrastruktur\u00ebs<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500040\/\">Ansible: Migrimi i konfiguracionit 120 VM nga Coreos n\u00eb Centos brenda 18 muajve<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/342216\/\">Si t\u00eb prish\u00ebsh bi\u00e7ikleta mbi bajpaset gjat\u00eb testimit t\u00eb shp\u00ebrndarjes tuaj<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">M\u00eb testoni n\u00ebse mund t\u00eb porositeni ose a \u00ebnd\u00ebrrojn\u00eb programuesit YML p\u00ebr testimin ansible?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ultral\/awesome-iac-testing\">Nj\u00eb list\u00eb e artikujve, fjalimeve &amp; lidhjeve t\u00eb shk\u00eblqyera p\u00ebr testimin e IaC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/ansible-testing-ru.html\">postim i kryq\u00ebzuar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500226\/\">Versioni n\u00eb anglisht<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p><strong>UPD1 2020.05.01 20:30<\/strong> \u2014 P\u00ebr profilizimin fillestar t\u00eb playbook-\u00ebve mund t\u00eb p\u00ebrdoret <code>callback_whitelist = profile_tasks<\/code> p\u00ebr t\u00eb kuptuar se \u00e7far\u00eb funksionon ngadal\u00eb. Pas k\u00ebsaj kalojm\u00eb te <noindex><a rel=\"nofollow\" href=\"https:\/\/shadow-soft.com\/turbo-charge-your-ansible\/\">klasika e p\u00ebrshpejtimit t\u00eb ansible<\/a><\/noindex>. Mund t\u00eb provoni <noindex><a rel=\"nofollow\" href=\"https:\/\/mitogen.networkgenomics.com\/ansible_detailed.html\">mitogen<\/a><\/noindex><br \/>\n<strong>UPD2 2020.05.03 16:34<\/strong> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500226\/\">Versioni n\u00eb anglisht<\/a><\/noindex><\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/500058\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 DevOps-40 2020-03-18: \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f legacy, \u0442.\u043a. \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0443\u043c\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0441\u0443\u0440\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u042d\u0442\u043e \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043d\u0435 \u043f\u043b\u043e\u0445\u043e, \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0430\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 Infrastructure as Code. \u0414\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u0430\u043a \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c Ansible \u0437\u0430 \u0433\u043e\u0434 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80306,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 DevOps-40 2020-03-18: \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f legacy, \u0442.\u043a. \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0443\u043c\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0441\u0443\u0440\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u042d\u0442\u043e \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043d\u0435 \u043f\u043b\u043e\u0445\u043e, \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0430\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 Infrastructure as Code. \u0414\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u0430\u043a \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c Ansible \u0437\u0430 \u0433\u043e\u0434 \u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c Ansible, \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430 \u0433\u043e\u0434 \u0438 \u043d\u0435 \u0441\u043b\u0435\u0442\u0435\u0442\u044c \u0441 \u043a\u0430\u0442\u0443\u0448\u0435\u043a | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 DevOps-40 2020-03-18: \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f legacy, \u0442.\u043a. \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0443\u043c\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0441\u0443\u0440\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u042d\u0442\u043e \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043d\u0435 \u043f\u043b\u043e\u0445\u043e, \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0430\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 Infrastructure as Code. \u0414\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u0430\u043a \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c Ansible \u0437\u0430 \u0433\u043e\u0434 \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-04T23:42:50+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T23:42:50+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Si t\u00eb filloni t\u00eb testoni Ansible, t\u00eb refaktorizoni projektin brenda nj\u00eb viti dhe t\u00eb mos humbni tramoin | ProHoster","description":"Kjo \u00ebsht\u00eb nj\u00eb p\u00ebrmbledhje e fjalimit n\u00eb DevOps-40 2020-03-18: Q\u00eb nga commiti i dyt\u00eb, \u00e7do kod b\u00ebhet legacy, pasi ide t\u00eb fillimit fillojn\u00eb t\u00eb largohen nga realiteti i fort\u00eb. Kjo nuk \u00ebsht\u00eb e mir\u00eb dhe as e keqe, \u00ebsht\u00eb nj\u00eb realitet me t\u00eb cilin \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb polemizosh dhe q\u00eb duhet t\u00eb jetosh. Nj\u00eb pjes\u00eb e k\u00ebtij procesi \u00ebsht\u00eb refaktorizimi. Refaktorizimi i Infrastruktur\u00ebs si Kod. Le t\u00eb fillojm\u00eb historin\u00eb se si t\u00eb refaktorizojm\u00eb Ansible brenda nj\u00eb viti dhe","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c Ansible, \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430 \u0433\u043e\u0434 \u0438 \u043d\u0435 \u0441\u043b\u0435\u0442\u0435\u0442\u044c \u0441 \u043a\u0430\u0442\u0443\u0448\u0435\u043a | ProHoster","og:description":"\u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 DevOps-40 2020-03-18: \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f legacy, \u0442.\u043a. \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0443\u043c\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0441\u0443\u0440\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u042d\u0442\u043e \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043d\u0435 \u043f\u043b\u043e\u0445\u043e, \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0427\u0430\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 Infrastructure as Code. \u0414\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u0430\u043a \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c Ansible \u0437\u0430 \u0433\u043e\u0434 \u0438","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-nachat-testirovat-ansible-otrefaktorit-proekt-za-god-i-ne-sletet-s-katushek","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-04T23:42:50+00:00","article:modified_time":"2020-05-04T23:42:50+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80305","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:20:41","updated":"2022-09-29 15:21:39"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/80305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=80305"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/80305\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/80306"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=80305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=80305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=80305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}