{"id":138,"date":"2019-06-30T22:33:14","date_gmt":"2019-06-30T20:33:14","guid":{"rendered":"https:\/\/jochem.jochemenbianca.nl\/?p=138"},"modified":"2019-07-01T23:06:32","modified_gmt":"2019-07-01T21:06:32","slug":"ansible-roles-deel-1","status":"publish","type":"post","link":"https:\/\/jochem.jochemenbianca.nl\/?p=138","title":{"rendered":"Ansible Roles (deel 1)"},"content":{"rendered":"<p>Om Ansible nog beter te gebruiken is het gebruik van Roles aan te raden. Met roles kunnen onafhankelijke collecties van taken, variabelen, templates, bestanden en modules worden gemaakt.<br \/>\nIn mijn voorbeeld wil ik een x aantal webservers installeren met php welke de bestanden van een NFS share halen en daarbij ook een haproxy loadbalancer installeren. Voor de eenvoud installeren we de load balancer op dezelfde server als de NFS. In de praktijk is dat natuurlijk niet aan te raden. Het ip nummer plan ziet er als volgt uit:<br \/>\nansiblemaster 192.168.57.100<br \/>\nansiblenode1 192.168.57.101<br \/>\nansiblenode2 192.168.57.102<br \/>\nnfsserver\/haproxy 192.168.57.103<\/p>\n<p>Eerst sommen we even op wat er allemaal gedaan moet worden.<br \/>\n&#8211; Zoals in mijn voorgaande post moet ansible ge\u00efnstalleerd worden op alle nodes.<br \/>\n&#8211; Installatie van de NFS server<br \/>\n&#8211; Installatie van de NFS clients<br \/>\n&#8211; Mount de NFS clients aan de NFS server<br \/>\n&#8211; Installatie Apache webserver met PHP en configureren<br \/>\n&#8211; Installatie haproxy en configureren<\/p>\n<p>We beginnen met de inventory file: \/etc\/ansible\/hosts<\/p>\n<pre>[local]\r\nlocalhost\r\n\r\n[test12]\r\n192.168.57.101\r\n192.168.57.102\r\n\r\n[test3]\r\n192.168.57.103\r\n<\/pre>\n<p>Groep test12 is zijn de webserver nodes. test3 is de nfs\/haproxy server.<br \/>\nAls we dat gedaan hebben kunnen we de roles aanmaken. Hiervoor maken we gebruik van het ansible-galaxy commando<\/p>\n<pre>mkdir -p \/home\/ansible\/ansible\/\r\ncd \/home\/ansible\/ansible\/\r\nansible-galaxy init --init-path=\/home\/ansible\/ansible\/roles\/ webserver\r\nansible-galaxy init --init-path=\/home\/ansible\/ansible\/roles\/ nfsclient\r\nansible-galaxy init --init-path=\/home\/ansible\/ansible\/roles\/ nfsserver\r\nansible-galaxy init --init-path=\/home\/ansible\/ansible\/roles\/ haproxy<\/pre>\n<p>&nbsp;<\/p>\n<p>Aangezien ik graag wat dingen apart wil houden maak ik meerdere tasks aan. Voor de haproxy gebuik ik wel de main.yml file.<br \/>\nIn de tasks file van de webserver maken we een aantal bestanden aan.<br \/>\nTen eerste de apache.yml. Deze ziet er als volgt uit.<\/p>\n<pre>---\r\n- name: Disable SELinux\r\n  selinux:\r\n    state: disabled\r\n- name: install apache\r\n  with_items:\r\n    - httpd\r\n    - php\r\n    - php-mcrypt \r\n    - php-gd \r\n    - php-curl\r\n  yum:\r\n    name: \"{{ item }}\"\r\n    state: latest\r\n- name: start apache\r\n  service:\r\n    name: httpd\r\n    state: started\r\n    enabled: true\r\n- name: Enable Firewall\r\n  firewalld:\r\n    service: http\r\n    permanent: yes\r\n    state: enabled\r\n  ignore_errors: true\r\n<\/pre>\n<p>Vervolgens een changeconfig.yml. Welke er als volgt uitziet:<\/p>\n<pre>---\r\n- name: change config\r\n  template:\r\n    src: httpd.j2\r\n    dest: \/etc\/httpd\/conf\/httpd.conf\r\n    owner: root\r\n    group: root\r\n    mode: '0775'\r\n- name: Restart Apache\r\n  service:\r\n    name: httpd\r\n    state: restarted\r\n<\/pre>\n<p>Dit had eventueel ook in hetzelfde bestand als apache.yml gekund.<br \/>\nZoals je kunt zien gebruiken we een template bestand (httpd.j2) deze moet je plaatsen in de \/home\/ansible\/ansible\/roles\/webserver\/template file gezet worden en ziet er als volgt uit:<\/p>\n<pre>ServerRoot \"\/etc\/httpd\"\r\nListen 80\r\nInclude conf.modules.d\/*.conf\r\nUser apache\r\nGroup apache\r\nServerAdmin root@localhost\r\n&lt;Directory \/&gt;\r\nAllowOverride none\r\nRequire all denied\r\n&lt;\/Directory&gt;\r\nDocumentRoot \"\/mnt\/nfs\"\r\n&lt;Directory \"\/mnt\/nfs\"&gt;\r\nOptions Indexes FollowSymLinks\r\nAllowOverride None\r\nRequire all granted\r\n&lt;\/Directory&gt;\r\n&lt;IfModule dir_module&gt;\r\nDirectoryIndex index.html\r\n&lt;\/IfModule&gt;\r\n&lt;Files \".ht*\"&gt;\r\nRequire all denied\r\n&lt;\/Files&gt;\r\nErrorLog \"logs\/error_log\"\r\nLogLevel warn\r\n&lt;IfModule log_config_module&gt;\r\nLogFormat \"%h %l %u %t \\\"%r\\\" %&gt;s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\r\nLogFormat \"%h %l %u %t \\\"%r\\\" %&gt;s %b\" common\r\n&lt;IfModule logio_module&gt;\r\nLogFormat \"%h %l %u %t \\\"%r\\\" %&gt;s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\" %I %O\" combinedio\r\n&lt;\/IfModule&gt;\r\nCustomLog \"logs\/access_log\" combined\r\n&lt;\/IfModule&gt;\r\n&lt;IfModule alias_module&gt;\r\nScriptAlias \/cgi-bin\/ \"\/var\/www\/cgi-bin\/\"\r\n&lt;\/IfModule&gt;\r\n&lt;Directory \"\/var\/www\/cgi-bin\"&gt;\r\nAllowOverride None\r\nOptions None\r\nRequire all granted\r\n&lt;\/Directory&gt;\r\n&lt;IfModule mime_module&gt;\r\nTypesConfig \/etc\/mime.types\r\nAddType application\/x-compress .Z\r\nAddType application\/x-gzip .gz .tgz\r\nAddType text\/html .shtml\r\nAddOutputFilter INCLUDES .shtml\r\n&lt;\/IfModule&gt;\r\nAddDefaultCharset UTF-8\r\n&lt;IfModule mime_magic_module&gt;\r\nMIMEMagicFile conf\/magic\r\n&lt;\/IfModule&gt;\r\nEnableSendfile on\r\nIncludeOptional conf.d\/*.conf\r\n<\/pre>\n<p>Eigenlijk een gewone httpd.conf file, alleen hebben we de DocumentRoot aangepast naar de nfs share.<br \/>\nTenslotte hebben we een main.yml gemaakt. Dit bestand wordt altijd uitgevoerd als je een bepaalde role gebruikt. De main.yml ziet er als volgt uit:<\/p>\n<pre>---\r\n- include_tasks: apache.yml\r\n- include_tasks: changeconfig.yml\r\n<\/pre>\n<p>Dit is alles om de webserver te installeren en te verwijzen naar de NFS share. We hebben echter de NFS share nog niet geregeld. Daarvoor gebruiken we een aparte role, nml. nfsclient. ook hier hebben we weer dezelfde directories als bij de webserver role.<br \/>\nTen eerste maken we een yml file, nfsclient.yml. Dit bestand ziet er als volgt uit:<\/p>\n<pre>- name: Instal nfsclient\r\n  yum:\r\n    name: nfs-utils\r\n    state: latest<\/pre>\n<p>Vervolgens zorgen we ervoor dat de nfs share gemount wordt. Dit doen we door middel van een nfsmount.yml. In dit bestand zetten we het volgende:<\/p>\n<pre>- block:\r\n  - name: Mount NFS directory\r\n    mount:\r\n      path: \/mnt\/nfs\r\n      src: 192.168.57.103:\/mnt\/nfsserver\r\n      fstype: nfs\r\n      state: mounted\r\n  - name: Set File permissions\r\n    file:\r\n      path: \/mnt\/nfs\r\n      mode: 0777\r\n  become: yes\r\n<\/pre>\n<p>En als laatste hebben we voor deze rol ook een main.yml<\/p>\n<pre>---\r\n# tasks file for nfsclient\r\n- include_tasks: nfsclient.yml\r\n- include_tasks: nfsmount.yml\r\n<\/pre>\n<p>Om vervolgens alles aan elkaar te knopen met een playbook maken we in \/home\/ansible\/ansible een bestand\/playbook aan install_webserver.yml<\/p>\n<pre>---\r\n- hosts: test12\r\n  become: yes\r\n  roles:\r\n    - role: nfsclient\r\n    - role: webserver\r\n<\/pre>\n<p>We wachten nog even met het uitvoeren van dit playbook. We hebben namelijk de nfsserver nog niet in orde gemaakt. Dat gaan we doen in deel 2.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Om Ansible nog beter te gebruiken is het gebruik van Roles aan te raden. Met roles kunnen onafhankelijke collecties van taken, variabelen, templates, bestanden en modules worden gemaakt. In mijn voorbeeld wil ik een x aantal webservers installeren met php welke de bestanden van een NFS share halen en daarbij [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,3],"tags":[],"class_list":["post-138","post","type-post","status-publish","format-standard","hentry","category-ansible","category-open-source"],"_links":{"self":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=138"}],"version-history":[{"count":20,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions"}],"predecessor-version":[{"id":164,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions\/164"}],"wp:attachment":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}