{"id":1036,"date":"2024-04-03T12:35:19","date_gmt":"2024-04-03T12:35:19","guid":{"rendered":"https:\/\/www.linuxsystems.ovh\/?p=1036"},"modified":"2024-04-03T12:35:21","modified_gmt":"2024-04-03T12:35:21","slug":"pierwsza-udostepniona-rola-ansible-a-wraz-z-nim-poradnik-odnosnie-ansible","status":"publish","type":"post","link":"https:\/\/www.linuxsystems.ovh\/?p=1036","title":{"rendered":"Pierwsza udost\u0119pniona rola ansible, a wraz z nim poradnik odno\u015bnie ansible."},"content":{"rendered":"\n<p>Chcia\u0142bym zacz\u0105\u0107 cykl od nauki ansible, z racji tego, \u017ce uczy\u0107 najlepiej si\u0119\u00a0na przyk\u0142adach, postaram si\u0119\u00a0wam to pokaza\u0107 na przyk\u0142adzie roli ansible s\u0142u\u017c\u0105cej do instalacji dockera.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Dzisiaj chcia\u0142bym pokaza\u0107 wam moj\u0105 pierwsz\u0105\u00a0rol\u0105 idea, s\u0142u\u017c\u0105c\u0105\u00a0do instalacji dockera:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/liske310\/ansible-docker\/tree\/master\">https:\/\/github.com\/liske310\/ansible-docker\/tree\/master<\/a><\/p>\n\n\n\n<p>Rola ta s\u0142u\u017cy do instalacji dockera na rocky linux (i wszystkich pochodnych RedHata).<\/p>\n\n\n\n<p>Ka\u017cda rola w ansible sk\u0142ada si\u0119 z kilku folder\u00f3w &#8211; g\u0142\u00f3wnie u\u017cywane to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>tasks<\/strong> -> folder s\u0142u\u017c\u0105cy do przechowywania plik\u00f3w z taskami (zadaniami)<\/li>\n\n\n\n<li><strong>defaults<\/strong> -> folder s\u0142u\u017c\u0105cy do przechowywania plik\u00f3w z defaultowymi zmiennymi<\/li>\n\n\n\n<li><strong>vars<\/strong> -> folder s\u0142u\u017c\u0105cy do przechowywania plik\u00f3w z zmiennymi, kt\u00f3re mog\u0105\u00a0by\u0107 r\u00f3\u017cni\u0107 si\u0119 np. poprzez dystrybucje <\/li>\n\n\n\n<li><strong>handlers<\/strong> -> folder s\u0142u\u017c\u0105cy do przechowywania plik\u00f3w z handlerami (po PL obs\u0142ugiwacze zdarze\u0144).<\/li>\n<\/ul>\n\n\n\n<p>W tym przypadku rola ta sk\u0142ada si\u0119\u00a0tylko i wy\u0142\u0105cznie z jednego folderu tasks &#8211; poniewa\u017c zosta\u0142a napisana tylko na RedHata, poniewa\u017c tylko na ten ekosystem by\u0142a mi ta rola potrzebna, a wi\u0119c w folderze tasks posiadamy 2 pliki:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>redhat.yml<\/li>\n\n\n\n<li>main.yml<\/li>\n<\/ul>\n\n\n\n<p>W takim main.yml znajduje si\u0119&nbsp;jeden task:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\n- name: \"Redhat\"\n  when: ansible_facts&#91;'os_family'] == \"RedHat\"\n  include_tasks: redhat.yml\n  tags: &#91;redhat, docker-redhat]\n<\/code><\/pre>\n\n\n\n<p>Ten jeden task s\u0142u\u017cy do tego, aby sprawdzi\u0142, czy rodzina danego systemu operacyjnego to RedHat (dzia\u0142a na CentOS\/RockyLinux\/Redhat\/Fedora i inne). Je\u017celi tak to r\u00f3b taski z pliku podanego w parametrze include_tasks, czyli redhat.yml.<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<p>W pliku redhat.yml znajduje si\u0119 kilka task\u00f3w odno\u015bnie instalacji dockera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\n- name: \"add docker repository\"\n  shell: \"dnf config-manager --add-repo=https:\/\/download.docker.com\/linux\/centos\/docker-ce.repo\"\n\n- name: \"install docker-ce\"\n  shell: \"dnf install docker-ce --nobest -y\"\n\n- name: \"start&amp;enable docker daemon\"\n  systemd:\n    name: docker\n    state: started\n    enabled: yes<\/code><\/pre>\n\n\n\n<p>a wi\u0119c po kolei:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pierwszy task odpowiada za dodanie repozytorium dockera<\/li>\n\n\n\n<li>Drugi task odpowiada za to, aby by\u0142 zainstalowany docker-ce &#8211; w tym przypadku zosta\u0142 u\u017cyty &#8211;nobest, poniewa\u017c po dodaniu repozytorium, dnf czepia\u0142 si\u0119\u00a0nowego certyfikatu po dodaniu repozytorium<\/li>\n\n\n\n<li>Trzeci task odpowiada za uruchomienie i ustawienie enable w systemd us\u0142ugi docker.<\/li>\n<\/ol>\n\n\n\n<p>Jak j\u0105 uruchamiamy?<\/p>\n\n\n\n<p>Musimy mie\u0107 na serwerze dost\u0119p po SSH do serwera, najlepiej po kluczu i wtedy tworzymy nast\u0119puj\u0105c\u0105 struktur\u0119 plik\u00f3w:<\/p>\n\n\n\n<p>[root@ansible ansible]# tree<br>.<br>\u251c\u2500\u2500 roles<br>\u2502\u00a0\u00a0 \u251c\u2500\u2500 docker<br>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 tasks<br>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.yml<br>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 redhat.yml<br>\u2514\u2500\u2500 variables<br>\u251c\u2500\u2500 docker.yml<br>\u251c\u2500\u2500 hosts<\/p>\n\n\n\n<p>Gdzie plik hosts wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;all]\nnaszserver.local<\/code><\/pre>\n\n\n\n<p>Gdzie naszserver.local jest to nazwa DNS naszego serwera &#8211; ja mam lokalny serwer dns dlatego nazwa\u0142em go naszserver.local, kt\u00f3ry znajduje si\u0119\u00a0w grupie [all] .<\/p>\n\n\n\n<p>Nic nie stoi na przeszkodzie, aby plik wygl\u0105da\u0142 tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;all]\nnaszserver.local\n\n&#91;mailserver]\nnaszserver.local<\/code><\/pre>\n\n\n\n<p>albo jeszcze inaczej -> jeden serwer mo\u017ce wyst\u0119powa\u0107 w wielu grupach, nie ma to najmniejszego problemu<\/p>\n\n\n\n<p>A plik docker.yml wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\n- name: \"docker\"\n  hosts:\n    - all\n  roles:\n    - { role: ..\/roles\/docker }<\/code><\/pre>\n\n\n\n<p>S\u0142u\u017cy on do tego, aby wskaza\u0107, jakie hosty mog\u0105 u\u017cywa\u0107 tej roli (w tym przpadku wszystkie z grupy all), oraz jakie role ma uruchomi\u0107 &#8211; mo\u017ce by\u0107 ich kilka o czym b\u0119dziemy m\u00f3wili w przysz\u0142ych poradnikach.<\/p>\n\n\n\n<p>Teraz przechodzimy do katalogu variables i wydajemy poni\u017csze polecenie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>variables $ ansible-playbook -i hosts docker.yml -l naszserver.local\n\nPLAY &#91;docker] ******************************************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;naszserver.local]\n\nTASK &#91;..\/roles\/docker : Redhat] ************************************************\nincluded: \/opt\/ansible\/roles\/docker\/tasks\/redhat.yml for naszserver.local\n\nTASK &#91;..\/roles\/docker : add docker repository] *********************************\nchanged: &#91;naszserver.local]\n\nTASK &#91;..\/roles\/docker : install docker-ce] *************************************\nchanged: &#91;naszserver.local]\n\nTASK &#91;..\/roles\/docker : start&amp;enable docker daemon] ****************************\nok: &#91;naszserver.local]\n\nPLAY RECAP *********************************************************************\nnaszserver.local           : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \n\n<\/code><\/pre>\n\n\n\n<p>W tym przypadku widzimy, \u017ce na naszserver.local doda\u0142 repozytorium dockera i doinstalowa\u0142.<\/p>\n\n\n\n<p>We\u017amy na tapet\u0119\u00a0sobie jeszcze polecenie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible-playbook -i hosts docker.yml -l naszserver.local<\/code><\/pre>\n\n\n\n<p>hosts to jest nasz plik hosts z hostami kt\u00f3re ma ansible<\/p>\n\n\n\n<p>docker.yml to jest nasz &#8222;playbook&#8221; czyli plik w kt\u00f3rym zapisujemy co ma rola uruchomi\u0107, oraz na jakich hostach mo\u017ce<\/p>\n\n\n\n<p>-l naszserver.local to jest ograniczenie, aby dzia\u0142a\u0142o tylko na naszserwer.local &#8211; je\u017celi by\u015bmy mieli w pliku hosts:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;all]\nnaszserver.local\nnaszserver2.local\nnaszserver3.local\n\n&#91;mailserver]\nnaszserver.local\nnaszserver2.local\n\n&#91;minecraftserver]\nnaszserver3.local<\/code><\/pre>\n\n\n\n<p>To s\u0142u\u017cy do tego, aby nie uruchamia\u0107 tego playbooka na wszystkich hostach, a tylko na jednym z nich.<\/p>\n\n\n\n<p>Dlaczego to robimy ansiblem a nie r\u0119cznie?<br>Wyobra\u017a sobie, \u017ce masz teraz 1 tysi\u0105c serwer\u00f3w na kt\u00f3rych musisz zainstalowa\u0107 dockera&#8230; zrobi\u0142by\u015b to r\u0119cznie z ch\u0119ci\u0105? Czy wola\u0142by\u015b pu\u015bci\u0107 jeden automat w kt\u00f3rym wskaza\u0142by\u015b tylko grup\u0119\u00a0tego 1 tysi\u0105ca serwer\u00f3w i robi\u0142oby si\u0119 to automatycznie?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chcia\u0142bym zacz\u0105\u0107 cykl od nauki ansible, z racji tego, \u017ce uczy\u0107 najlepiej si\u0119\u00a0na przyk\u0142adach, postaram si\u0119\u00a0wam to pokaza\u0107 na przyk\u0142adzie roli ansible s\u0142u\u017c\u0105cej do instalacji dockera.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60],"tags":[],"class_list":["post-1036","post","type-post","status-publish","format-standard","hentry","category-ansible"],"_links":{"self":[{"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=\/wp\/v2\/posts\/1036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1036"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=\/wp\/v2\/posts\/1036\/revisions"}],"predecessor-version":[{"id":1042,"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=\/wp\/v2\/posts\/1036\/revisions\/1042"}],"wp:attachment":[{"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxsystems.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}