{"id":2396,"date":"2020-02-25T14:43:22","date_gmt":"2020-02-25T13:43:22","guid":{"rendered":"https:\/\/bluemind.purpl-web.com\/?p=2396"},"modified":"2022-09-06T09:23:45","modified_gmt":"2022-09-06T07:23:45","slug":"industrialising-the-installation-of-bluemind-with-ansible","status":"publish","type":"post","link":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/","title":{"rendered":"Industrialising the installation of BlueMind with Ansible"},"content":{"rendered":"\n<p>Installing\na BlueMind platform is typically straightforward, involving few steps once the\narchitecture is defined. In some cases, however, installation needs to be\nindustrialised in order to be played several times. This may be needed, for example,\nfor hosts or clients with a large number of users and several platforms.&nbsp; <\/p>\n\n\n\n<p>Ansible\nis an automation engine designed to deal with such situations. This article\ndescribes how to deploy BlueMind using Ansible, although you may use any other\ntools such as Saltstack, Puppet or Chef.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s\nAnsible?<\/h2>\n\n\n\n<p>Ansible\nis an automation tool that facilitates application and system deployment. It\nsaves having to write scripts or custom code to deploy or update an\napplication. <\/p>\n\n\n\n<p>Ansible\u2019s\nstrength is that you don\u2019t need a deployment agent on the target server as all installation\nand configuration instructions are run by the SSH agent, which is widespread on\nLinux servers. <\/p>\n\n\n\n<p>Specifically,\nAnsible can automate three types of tasks:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em><strong>Provisioning:<\/strong><\/em>&nbsp;setting\n     up the servers your infrastructure requires.<\/li><li><em><strong>Configuration:<\/strong><\/em>&nbsp;changing\n     the configuration of an application, an operating system or a device,\n     starting and stopping services, installing or updating applications,\n     implementing a security strategy, or performing a wide array of other configuration\n     tasks.<\/li><li><em><strong>Application deployment:<\/strong><\/em>&nbsp;facilitating\n     development by automating the deployment of the applications developed\n     in-house on your production systems.<\/li><\/ul>\n\n\n\n<p>This article describes how BlueMind can use Ansible to automate repetitive administration tasks. To find out more about using Ansible, we recommend Cloud Academy\u2019s <a href=\"https:\/\/cloudacademy.com\/learning-paths\/introduction-ansible-23\/\" target=\"_blank\" rel=\"noreferrer noopener\">Introduction to Ansible<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ansible\nand BlueMind<\/h2>\n\n\n\n<p>This\narticle is not designed to tell you about Ansible but to show you how we use it\nin our deployment methods.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em><strong>Respect of deployment rules<\/strong><\/em><\/li><\/ul>\n\n\n\n<p>There\nare several ways of deploying an application with Ansible. The method we are\nshowing here uses an inventory file which contains the BlueMind server(s) to be\ninstalled, BlueMind-specific roles made available by our teams through git\nrepositories and example playbooks to order operations.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em><strong>Installation harmonisation<\/strong><\/em><\/li><\/ul>\n\n\n\n<p>Using\nAnsible has many benefits. It will save you time if you\u2019re deploying multiple\nBlueMind instances for different clients. You can for example harmonise\nconfigurations according to clients and uses to industrialise deployment,\nthereby limiting inconsistencies between BlueMind instances.<\/p>\n\n\n\n<p>Similarly,\nin another context, you can use Ansible to deploy your development,\nqualification, preproduction and production environments in order to ensure\nidentical configurations. This will help maximise the success of your\ndeployment or update projects.&nbsp; <\/p>\n\n\n\n<p>Below,\nwe will look at how to deploy a simple BlueMind server capable of hosting\nhundreds of users. Then we will see how you can deploy an instance of BlueMind\nmade up of two BlueMind servers, one core server and one back-end data server\nwhich will contain user data.<\/p>\n\n\n\n<p>Finally, we will look at evolution prospects and how existing roles can be a starting point for the deployment of a dedicated <a href=\"https:\/\/www.elastic.co\/fr\/elasticsearch\" target=\"_blank\" rel=\"noreferrer noopener\">elasticsearch\u00a0<\/a>server or a <a href=\"https:\/\/forge.bluemind.net\/confluence\/display\/DA\/.Installation+d%27un+serveur+Edge+%3A+Nginx+et+Postfix+vBM-4.0\" target=\"_blank\" rel=\"noreferrer noopener\">bm-edge<\/a> server. You may also consider a disaster recovery plan to rebuild a server in case of loss \u2013 using backups.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Environment:<strong>&nbsp;<\/strong><\/h2>\n\n\n\n<p>Prerequisite:\nan Ansible server installed. In our case, we\u2019re not using the latest version\nbut roles are compatible:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@nmc-Ansible:~# Ansible --version <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Ansible 2.7.5 <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;config file = \/etc\/Ansible\/Ansible.cfg <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>&nbsp;&nbsp;<\/code><code>configured module search path = [u'\/root\/.Ansible\/plugins\/modules', u'\/usr\/share\/Ansible\/plugins\/modules'] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;Ansible python module location = \/usr\/lib\/python2.7\/dist-packages\/Ansible <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;executable location = \/usr\/bin\/Ansible <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;python version = 2.7.13 (default, Sep 26 2018, 18:42:22) &#91;GCC 6.3.0 20170516] <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Installing\na BlueMind server:&nbsp;<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Get the file u500_requirements.yml\u00a0<a href=\"https:\/\/forge.bluemind.net\/stash\/projects\/BMAN\/repos\/ansible_sample\/browse\/ansible_galaxy\/u500_requirements.yml\" target=\"_blank\" rel=\"noreferrer noopener\">here <\/a><\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>Ansible-galaxy install -r u500_requirements.yml <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>- extracting bluemind_requirements to \/etc\/Ansible\/roles\/bluemind_requirements <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>- bluemind_requirements (master) was installed successfully <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>- extracting bluemind_single_server to \/etc\/Ansible\/roles\/bluemind_single_server <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>- bluemind_single_server (master) was installed successfully <\/code><\/pre>\n\n\n\n<p>The\nAnsible-galaxy command is used to download all the roles available on git. Please not that newer versions may become available in the short or\nmedium term.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Create\n     the playbook:&nbsp;<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>root@nmc-Ansible:\/etc\/Ansible# cat playbooks\/bm\/bluemind_single_server.yml <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>--- <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>- name: Configuring BlueMind requirements <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;hosts: all <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;become: yes <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;become_method: su <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;roles: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>- bluemind_requirements <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;- bluemind_single_server <\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Create your inventory file. Here we are using a yml\n     file, available in \/etc\/Ansible\/inventory&nbsp;<\/li><\/ul>\n\n\n\n<p>cat\ninventory\/bluemind_single_server.yml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bluemind_single_server: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;hosts: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;nmc-core.blue-mind.loc: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_host: 192.168.0.15 <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_become_password: \u00ab SET_ROOT_PASSWORD_HERE\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=\/dev\/null' <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_user: bluemind <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;vars: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;sw_password: \"admin\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;external_url: \"mail.blue-mind.loc\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;subscription_contact: \"admin@blue-mind.loc\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;local_works_directory: \"\/usr\/local\/bluemind\/\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;email_domain: \"blue-mind.loc\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;subscription_file: \"\/usr\/local\/bluemind\/subscribe.bmz\" <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">A\nfew explanatory notes:&nbsp;<\/h2>\n\n\n\n<p>The following global variables are required:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>The <strong>public server address<\/strong>, vars.external_url<\/li><li><strong>The contact name<\/strong> for who\n     will receive subscription notifications vars.subscription_contact<\/li><li><strong>Email_domain<\/strong>&nbsp;which\n     represents the default domain you want to create.<\/li><li><strong>Sw_password&nbsp;is the password needed for the <\/strong>\/setup\n     and access to the tick console \u2013 if you choose to install it.<\/li><li><strong>Local_works_directory<\/strong>&nbsp;is\n     storage location for the information needed to run Ansible roles. You\n     might want to create a client file, for instance. <\/li><li><strong>subscription_file<\/strong>&nbsp;is\n     the location of the subscription file, required for installation by Ansible.<\/li><\/ul>\n\n\n\n<p>Start\nthe installation:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ansible-playbook -l bluemind_single_server playbooks\/bm\/bluemind_single_server.yml <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY &#91;Configuring BlueMind requirements] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;Gathering Facts] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements :&nbsp; Load Operating System : Debian 9] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] =&gt; (item=\/etc\/Ansible\/roles\/bluemind_requirements\/vars\/debian_family.yml) <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>included: \/etc\/Ansible\/roles\/bluemind_requirements\/tasks\/debian.yml for nmc-core.blue-mind.loc <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : assert] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] =&gt; { <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;\"changed\": false, <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;\"msg\": \"All assertions passed\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>} <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : set \/etc\/hostname] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Ensure en_US.UTF-8 locale exists] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Set LC_ALL] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Set LANG] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Install apt Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Update] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Upgrade apt packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Install your subscribe file] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc -&gt; localhost] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Copy BlueMind repository file into the server] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Adding BlueMind Public Key] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Configure BM repository priority] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : apt_repository] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Update repositories] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_single_server : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_single_server : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>included: \/etc\/Ansible\/roles\/bluemind_single_server\/tasks\/debian.yml for nmc-core.blue-mind.loc <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_single_server : Install BlueMind Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_single_server : Install BlueMind] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY RECAP <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>nmc-core.blue-mind.loc&nbsp;&nbsp;&nbsp;&nbsp; : ok=19&nbsp;&nbsp; changed=12&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0 <\/code><\/pre>\n\n\n\n<p>Once\nthe installation is complete, you just need to configure your server.<\/p>\n\n\n\n<p>The bluemind_requirements role is used to push the subscription on the BlueMind server(s). The subscription is retrieved from the subscription file bmz which must be entered\u00a0in the variables of the \u201cbluemind_single_server\u201d group.<\/p>\n\n\n\n<p>The\nbluemind_requirements role is also used to check that the system configuration meets\nBlueMind\u2019s expectations.<\/p>\n\n\n\n<p>As\nof BlueMind 4.1, BlueMind updates can be run from command line. This means that\nall you\u2019ll need to do is run a playbook for BlueMind packages to be updated and\nfor the \/setup to play without having to connect to the web interface.&nbsp;<\/p>\n\n\n\n<p>And don\u2019t forget that this type of instruction needs to be run in a screen\/tmux or similar tool.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Updating\nthe BlueMind server:&nbsp;<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>root@nmc-Ansible:\/etc\/Ansible# Ansible-playbook -l bluemind_single_server playbooks\/bm\/bluemind_upgrade.yml <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY &#91;Configuring BlueMind requirements] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;Gathering Facts] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>included: \/etc\/Ansible\/roles\/bluemind_upgrade\/tasks\/debian.yml for nmc-core.blue-mind.loc <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : apt update cache] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : Verify aptitude package] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : apt update &amp; clean] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : apt dist-upgrade] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_upgrade : shell] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY RECAP <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>nmc-core.blue-mind.loc&nbsp;&nbsp;&nbsp;&nbsp; : ok=7&nbsp;&nbsp;&nbsp; changed=3&nbsp;&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0&nbsp;&nbsp; <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Installing a shard + a\ncore:&nbsp;<\/strong><\/h2>\n\n\n\n<p>In\nthis second example, we are installing a BlueMind core server and deporting\nemail, contacts, calendars, etc. data to a dedicated server (called shard in BlueMind\nspeak).<\/p>\n\n\n\n<p>As above, get the u1000_requirements.yml file <a href=\"https:\/\/doc.bluemind.net\/release\/4.8\/en\/guide_de_l_administrateur\/administration_avancee\/installation_d_un_serveur_edge_nginx_et_postfix\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>Ansible-galaxy\ninstall -r u1000_requirements.yml<\/p>\n\n\n\n<p>The\nvariables are:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>--- <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>bluemind: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;hosts: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;nmc-core.blue-mind.loc: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_host: 192.168.0.15 <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_become_password: \"SET_ROOT_PASSWORD_HERE\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=\/dev\/null' <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_user: bluemind <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;nmc-data.blue-mind.loc: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_host: 192.168.0.16 <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_become_password: \"SET_ROOT_PASSWORD_HERE\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=\/dev\/null' <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ansible_user: bluemind <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;vars: <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;sw_password: \"admin\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;external_url: \"mail.blue-mind.loc\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;tick_module: true <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;synchro_ldap_module: false <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;subscription_contact: \"admin@blue-mind.loc\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;synchro_ad_module: false <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;local_works_directory: \"\/usr\/local\/bluemind\/\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;email_domain: \"blue-mind.loc\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;subscription_file: \"\/usr\/local\/bluemind\/subscribe.bmz\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;shardip: \"192.168.0.16\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;export_ldap_module: false <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;core_server_fqdn: \"nmc-core.blue-mind.loc\" <\/code><\/pre>\n\n\n\n<p>In\nthis case, the possibility to install tick, LDAP or AP synchronisation or LDAP\nexport modules is embedded in the bluemind-core.<\/p>\n\n\n\n<p>New\nmodules may become available in the future \u2013 e.g. to deploy bm-mapi or\ncorporate signatures. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@nmc-Ansible:\/etc\/Ansible# Ansible-playbook -l bluemind playbooks\/bm\/bluemind_core_cyrus.yml <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY &#91;Configuring BlueMind requirements] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;Gathering Facts] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements :&nbsp; Load Operating System : Debian 9] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-data.blue-mind.loc] =&gt; (item=\/etc\/Ansible\/roles\/bluemind_requirements\/vars\/debian_family.yml) <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] =&gt; (item=\/etc\/Ansible\/roles\/bluemind_requirements\/vars\/debian_family.yml) <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>included: \/etc\/Ansible\/roles\/bluemind_requirements\/tasks\/debian.yml for nmc-data.blue-mind.loc, nmc-core.blue-mind.loc <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : assert] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-data.blue-mind.loc] =&gt; { <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;\"changed\": false, <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;\"msg\": \"All assertions passed\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>} <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] =&gt; { <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;\"changed\": false, <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp;&nbsp;\"msg\": \"All assertions passed\" <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>} <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : set \/etc\/hostname] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Ensure en_US.UTF-8 locale exists] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc- core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Set LC_ALL] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Set LANG] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Install apt Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Update] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Upgrade apt packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Install your subscribe file] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc -&gt; localhost] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc -&gt; localhost] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Copy BlueMind repository file into the server] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Adding BlueMind Public Key] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>********************* <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Configure BM repository priority] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : apt_repository] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_requirements : Update repositories] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY &#91;Install BlueMind Data] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;Gathering Facts] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_cyrus : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_cyrus : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>included: \/etc\/Ansible\/roles\/bluemind_cyrus\/tasks\/debian.yml for nmc-data.blue-mind.loc <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_cyrus : Install BlueMind Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_cyrus : Install Tick Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-data.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY &#91;Install BlueMind Core] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;Gathering Facts] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>********************* <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>ok: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : include_tasks] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>included: \/etc\/Ansible\/roles\/bluemind_core\/tasks\/debian.yml for nmc-core.blue-mind.loc <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install BlueMind Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install Tick Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install Export LDAP Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install Synhcro LDAP Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install Synchro AD Packages] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install and configure Core Service with a shard server] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Install and configure Core Service] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>skipping: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Fetch mcast.id] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Fetch bm-core.tok] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Disabled bm-cyrus-imapd if shard is defined] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Disabled bm-lmtpd if shard is defined] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TASK &#91;bluemind_core : Configure Tick] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>RUNNING HANDLER &#91;bluemind_core : restart NGINX] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>********************* <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>RUNNING HANDLER &#91;bluemind_core : stop bm-cyrus-imapd] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>RUNNING HANDLER &#91;bluemind_core : stop bm-lmtpd] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>changed: &#91;nmc-core.blue-mind.loc] <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PLAY RECAP <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>*********************<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>nmc-core.blue-mind.loc&nbsp;&nbsp;&nbsp;&nbsp; : ok=29&nbsp;&nbsp; changed=18&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0&nbsp;&nbsp;&nbsp; <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>nmc-data.blue-mind.loc&nbsp;&nbsp;&nbsp;&nbsp; : ok=20&nbsp;&nbsp; changed=12&nbsp;&nbsp; unreachable=0&nbsp;&nbsp;&nbsp; failed=0&nbsp;&nbsp;&nbsp; <\/code><\/pre>\n\n\n\n<p>Finally, deploying a BlueMind instance made up of a core server, a back-end data server and a dedicated elasticsearch server is possible as shown for 3,000 users\u00a0. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>In conclusion\u2026<\/strong><\/h2>\n\n\n\n<p>One\nof the key challenges of installing a new email system is being able to perform\ncontinuous integration and deployment with no downtime. This typically requires\na lot of coding work involving multiple tools and therefore time and resources.<\/p>\n\n\n\n<p>Ansible\nis a powerful open-source automation tool that reduces the use of time and\nresources to a minimum while ensuring the service\u2019s availability. On\ninstallations with a large number of users, BlueMind, with Ansible, helps\nreduce downtime, minimises human error and saves a huge amount of time. <\/p>\n\n\n\n<p>Multiple\nadditional roles are in the pipeline, including the possibility to run\nscheduled tasks, configure the BlueMind system or corporate signatures, LDAP\nsyncing, etc. <\/p>\n\n\n\n<p>While\nwe are using Ansible in this article, other tools such as Saltstack, Puppet or Chef\nare equally valid. BlueMind can help you adapt these Ansible examples to other\ndeployment tools.<\/p>\n\n\n\n<p>Find out about our <a href=\"https:\/\/bluemind.purpl-web.com\/en\/devops-and-continuous-integration-a-look-at-blueminds-quality-approach-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">DevOps and continuous integration approach here.<\/a><\/p>\n\n\n\n\n\n<p><em>By <\/em><a href=\"https:\/\/www.linkedin.com\/in\/manuel-guilley-b383b14b\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Manuel Guilley<\/em><\/a><em>, BlueMind Integrator.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Installing a BlueMind platform is typically straightforward, involving few steps once the architecture is defined. In some cases, however, installation needs to be industrialised in order to be played several times. This may be needed, for example, for hosts or clients with a large number of users and several platforms.&nbsp; Ansible is an automation engine [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":2371,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[7,183],"tags":[192],"class_list":["post-2396","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-integration-si-en","category-technical","tag-featured"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Industrialising the installation of BlueMind with Ansible - Bluemind<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Industrialising the installation of BlueMind with Ansible - Bluemind\" \/>\n<meta property=\"og:description\" content=\"Installing a BlueMind platform is typically straightforward, involving few steps once the architecture is defined. In some cases, however, installation needs to be industrialised in order to be played several times. This may be needed, for example, for hosts or clients with a large number of users and several platforms.&nbsp; Ansible is an automation engine [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\" \/>\n<meta property=\"og:site_name\" content=\"Bluemind\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-25T13:43:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-06T07:23:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"403\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Industrialising the installation of BlueMind with Ansible\",\"datePublished\":\"2020-02-25T13:43:22+00:00\",\"dateModified\":\"2022-09-06T07:23:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\"},\"wordCount\":1105,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png\",\"keywords\":[\"Featured\"],\"articleSection\":[\"Integration\",\"Technical\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\",\"url\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\",\"name\":\"Industrialising the installation of BlueMind with Ansible - Bluemind\",\"isPartOf\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png\",\"datePublished\":\"2020-02-25T13:43:22+00:00\",\"dateModified\":\"2022-09-06T07:23:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage\",\"url\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png\",\"contentUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png\",\"width\":768,\"height\":403},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bluemind.purpl-web.com\/en\/homepage\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Industrialising the installation of BlueMind with Ansible\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#website\",\"url\":\"https:\/\/bluemind.purpl-web.com\/en\/\",\"name\":\"Bluemind\",\"description\":\"Collaborative messaging\",\"publisher\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bluemind.purpl-web.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#organization\",\"name\":\"BlueMind\",\"url\":\"https:\/\/bluemind.purpl-web.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png\",\"contentUrl\":\"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png\",\"width\":300,\"height\":100,\"caption\":\"BlueMind\"},\"image\":{\"@id\":\"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Industrialising the installation of BlueMind with Ansible - Bluemind","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/","og_locale":"en_US","og_type":"article","og_title":"Industrialising the installation of BlueMind with Ansible - Bluemind","og_description":"Installing a BlueMind platform is typically straightforward, involving few steps once the architecture is defined. In some cases, however, installation needs to be industrialised in order to be played several times. This may be needed, for example, for hosts or clients with a large number of users and several platforms.&nbsp; Ansible is an automation engine [&hellip;]","og_url":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/","og_site_name":"Bluemind","article_published_time":"2020-02-25T13:43:22+00:00","article_modified_time":"2022-09-06T07:23:45+00:00","og_image":[{"width":768,"height":403,"url":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#article","isPartOf":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/"},"author":{"name":"","@id":""},"headline":"Industrialising the installation of BlueMind with Ansible","datePublished":"2020-02-25T13:43:22+00:00","dateModified":"2022-09-06T07:23:45+00:00","mainEntityOfPage":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/"},"wordCount":1105,"commentCount":0,"publisher":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#organization"},"image":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png","keywords":["Featured"],"articleSection":["Integration","Technical"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/","url":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/","name":"Industrialising the installation of BlueMind with Ansible - Bluemind","isPartOf":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage"},"image":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png","datePublished":"2020-02-25T13:43:22+00:00","dateModified":"2022-09-06T07:23:45+00:00","breadcrumb":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#primaryimage","url":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png","contentUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2020\/02\/cover-ansible-2.png","width":768,"height":403},{"@type":"BreadcrumbList","@id":"https:\/\/bluemind.purpl-web.com\/en\/industrialising-the-installation-of-bluemind-with-ansible\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bluemind.purpl-web.com\/en\/homepage\/"},{"@type":"ListItem","position":2,"name":"Industrialising the installation of BlueMind with Ansible"}]},{"@type":"WebSite","@id":"https:\/\/bluemind.purpl-web.com\/en\/#website","url":"https:\/\/bluemind.purpl-web.com\/en\/","name":"Bluemind","description":"Collaborative messaging","publisher":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bluemind.purpl-web.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/bluemind.purpl-web.com\/en\/#organization","name":"BlueMind","url":"https:\/\/bluemind.purpl-web.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png","contentUrl":"https:\/\/bluemind.purpl-web.com\/wp-content\/uploads\/2017\/06\/logobm_300.png","width":300,"height":100,"caption":"BlueMind"},"image":{"@id":"https:\/\/bluemind.purpl-web.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"_links":{"self":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts\/2396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/comments?post=2396"}],"version-history":[{"count":3,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts\/2396\/revisions"}],"predecessor-version":[{"id":4000,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/posts\/2396\/revisions\/4000"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/media\/2371"}],"wp:attachment":[{"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/media?parent=2396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/categories?post=2396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluemind.purpl-web.com\/en\/wp-json\/wp\/v2\/tags?post=2396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}