<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Discover Docker, K8s and Hashicorp Nomad with Maksym Prokopov: posts tagged ansible</title>
<link>https://blog.it-premium.com.ua/tags/ansible/</link>
<description>The blog about containerisation, virtual machines and useful shell snippets and findings</description>
<author></author>
<language>en</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>The blog about containerisation, virtual machines and useful shell snippets and findings</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Ansible remove False variables from environment</title>
<guid isPermaLink="false">235</guid>
<link>https://blog.it-premium.com.ua/all/ansible-remove-false-variables-from-environment/</link>
<pubDate>Tue, 14 Sep 2021 08:38:01 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/ansible-remove-false-variables-from-environment/</comments>
<description>
&lt;p&gt;Use the following code snippet:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;telegram:
  enabled: False

Env:
  - TELEGRAM_NOTIFICATION={{ telegram.enabled | ternary(&amp;#039;true&amp;#039;, None)}}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this way False value evaluates to None and as outcome you’ll get empty TELEGRAM_NOTIFICATION variable&lt;/p&gt;
</description>
</item>

<item>
<title>Ansible add entries to .htpassword</title>
<guid isPermaLink="false">224</guid>
<link>https://blog.it-premium.com.ua/all/ansible-add-entries-to-htpassword/</link>
<pubDate>Tue, 29 Sep 2020 11:49:00 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/ansible-add-entries-to-htpassword/</comments>
<description>
&lt;p&gt;There are several ways to do this:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Use template action and use template file&lt;/li&gt;
&lt;li&gt;Use array of entries and loop with lininfile command&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://docs.ansible.com/ansible/latest/collections/community/general/htpasswd_module.html"&gt;https://docs.ansible.com/ansible/latest/collections/community/general/htpasswd_module.html&lt;/a&gt; htpasswd module.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I decided to go with approach #2.&lt;br /&gt;
in variables&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;htpasswd:
  - user1:password1
  - user2:password2&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;in the playbook&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- name: set password file
      lineinfile:
        path: &amp;quot;{{ webroot }}/shared/.htpasswd&amp;quot;
        line: &amp;quot;{{ item }}&amp;quot;
        create: yes
      when: oxid.configuration == &amp;quot;production&amp;quot;
      loop: &amp;quot;{{ htpasswd }}&amp;quot;&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>ansible vault quick encryption</title>
<guid isPermaLink="false">215</guid>
<link>https://blog.it-premium.com.ua/all/ansible-vault-quick-encryption/</link>
<pubDate>Sun, 22 Mar 2020 10:06:47 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/ansible-vault-quick-encryption/</comments>
<description>
&lt;p&gt;it was convenient for me to use zsh function for the string encryption:&lt;/p&gt;
&lt;p&gt;add this to .zshrc&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;vault() {
echo -n $1 | ansible-vault encrypt_string --vault-id=myvault
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and use like this&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;vault my-password&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;output should be similar to this&lt;/p&gt;
&lt;pre&gt;
Reading plaintext input from stdin. (ctrl-d to end input)
!vault |
          $ANSIBLE_VAULT;1.1;AES256
          39383538336133613537376463373062363639343761633365666530313363343766663662336530
          6637336536383438333038623865386636383737393165340a663236336463306261386466326262
          31333664393130313734303230356364626335346336363430303036633962343536353137376665
          3464363163346433350a653230336636643562363030383363336166636365313133343563393261
          38396530616261616338626161363133323430323361623164393466333038326637
Encryption successful
&lt;/pre&gt;
</description>
</item>

<item>
<title>Ansible, docker_service module issue and dependency hell</title>
<guid isPermaLink="false">175</guid>
<link>https://blog.it-premium.com.ua/all/ansible-docker-service-module-issue-and-dependency-hell/</link>
<pubDate>Thu, 09 Feb 2017 12:07:02 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/ansible-docker-service-module-issue-and-dependency-hell/</comments>
<description>
&lt;p&gt;I struggled with deploying web services via Ansible to staging CoreOS host and that’s something that looks like a hell!&lt;/p&gt;
&lt;p&gt;I received one error, then another with just simple-simple steps like&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- name: IT-Premium docker-compose deploy
  hosts: coreos
  tasks:
    - name: Install docker-py
      pip: name=docker-py executable=/home/core/bin/pip

    - name: Install PyYAML
      pip: name=PyYAML executable=/home/core/bin/pip

    - name: Install docker-compose
      pip: name=docker-compose executable=/home/core/bin/pip version=1.9.0

    - name: Creates it-premium directory
      file: path=/home/core/it-premium state=directory

    - name: copy docker-compose.yml
      copy: src=./docker-compose.yml dest=/home/core/it-premium/docker-compose.yml
      tags: deploy

    - name: copy sqlite
      copy: src=./sqlite dest=/home/core/it-premium/ mode=0644
      tags: deploy

    - name: docker registry login
      docker_login:
        registry: &amp;quot;registry.it-expert.com.ua&amp;quot;
        username: nexus
        password: &amp;quot;{{gitlab_password}}&amp;quot;

    - name: pull images
      docker_image:
        name: registry.it-expert.com.ua/nexus/it-premium
        state: present

    - name: launch it-premium docker-compose with 2 containers
      tags: step1
      docker_service:
        project_src: it-premium
        state: present
        build: no
      register: output

    - debug:
        var: output&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can notice version of docker-compose 1.9.0, which is supplied there. That’s because of issue with&lt;br /&gt;
Error: cannot import name ‘IPAMConfig’&lt;br /&gt;
thrown by docker_service.&lt;/p&gt;
&lt;p&gt;And here is why &lt;a href="https://github.com/ansible/ansible/issues/20492"&gt;https://github.com/ansible/ansible/issues/20492&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is due to your docker-compose version.&lt;br /&gt;
The docker-py package has been renamed into docker in version 2.0 (&lt;a href="https://github.com/docker/docker-py/releases/tag/2.0.0)."&gt;https://github.com/docker/docker-py/releases/tag/2.0.0).&lt;/a&gt; And in this version, Docker.Client has been renamed into docker.APIClient.&lt;br /&gt;
Docker-compose 1.10+ now requires docker instead of docker-py. And due to his name the docker package is before the docker-py one in the PYTHONPATH leading to the import error.&lt;br /&gt;
A workaround is to downgrade your docker-compose version to 1.9.0 the time the Ansible docker_container module updates its dependencies from docker-py to docker.&lt;/p&gt;
&lt;p&gt;That’s something like “piss on you, dirty user, because we do not care about backward compatibility”.&lt;/p&gt;
&lt;p&gt;Because when you change something, it is like delete old state and introduce new one instead. And when you delete something, that could broke anything that relies on state.&lt;/p&gt;
&lt;p&gt;How to do instead? Just ADD something new without removal. Call it with new namespace, new function  name and just use!&lt;/p&gt;
</description>
</item>

<item>
<title>docker-py version is 1.10.6. Minimum version required is 1.7.0.</title>
<guid isPermaLink="false">167</guid>
<link>https://blog.it-premium.com.ua/all/docker-py-version-is-1-10-6-minimum-version-required-is-1-7-0/</link>
<pubDate>Mon, 12 Dec 2016 09:55:05 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/docker-py-version-is-1-10-6-minimum-version-required-is-1-7-0/</comments>
<description>
&lt;p&gt;You need to upgrade ansible to version 2.2.0.0&lt;/p&gt;
&lt;p&gt;via brew:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;brew update &amp;amp;&amp;amp; brew upbrage ansible&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or via pip:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;pip install --upgrade ansible&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>docker-compose recipe for ansible</title>
<guid isPermaLink="false">147</guid>
<link>https://blog.it-premium.com.ua/all/docker-compose-recipe-for-ansible/</link>
<pubDate>Thu, 15 Sep 2016 14:14:20 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/docker-compose-recipe-for-ansible/</comments>
<description>
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- name: install docker-compose
  become: yes
  file: path=/opt/bin state=directory mode=0755

- name: get docker-compose url
  shell: curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r &amp;#039;.assets[].browser_download_url | select(contains(&amp;quot;Linux&amp;quot;) and contains(&amp;quot;x86_64&amp;quot;))&amp;#039;
  register: url_info

- name: fetch docker-compose
  become: yes
  get_url: url=&amp;quot;{{url_info.stdout}}&amp;quot; dest=/opt/bin/docker-compose mode=0755&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Снятие бекапа из mysql контейнера при помощи Ansible</title>
<guid isPermaLink="false">136</guid>
<link>https://blog.it-premium.com.ua/all/snyatie-bekapa-iz-mysql-konteynera-pri-pomoschi-ansible/</link>
<pubDate>Thu, 21 Jul 2016 12:19:21 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/snyatie-bekapa-iz-mysql-konteynera-pri-pomoschi-ansible/</comments>
<description>
&lt;p&gt;Вот простой рецепт:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- name: backup mysql from container
  gather_facts: no
  vars:
    - db_container: container_db_1
    - image: mysql:5.6
    - db:
        name: database_name
        user: root
        password: root
    - dump_file: ./dump-latest.sql
  tasks:
    - name: run backup container
      shell: &amp;quot;docker run --rm --link {{db_container}}:db --entrypoint \&amp;quot;/usr/bin/mysqldump\&amp;quot; {{image}} -hdb -u{{db.user}} -p{{db.password}} {{db.name}}&amp;quot;
      register: output

    - name: copy output
      local_action: copy content=&amp;quot;{{ output.stdout }}&amp;quot; dest=&amp;quot;{{dump_file}}&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Работает БЕЗ создания файлов на удаленном хосте, помимо, конечно, временного контейнера.&lt;/p&gt;
&lt;script type="text/javascript" src="https://asciinema.org/a/680nbb59m9ko2ptrdkvf79123.js" id="asciicast-680nbb59m9ko2ptrdkvf79123" async&gt;&lt;/script&gt;
</description>
</item>

<item>
<title>Установка docker-compose на CoreOS через Ansible</title>
<guid isPermaLink="false">128</guid>
<link>https://blog.it-premium.com.ua/all/ustanovka-docker-compose-na-coreos-cherez-ansible/</link>
<pubDate>Tue, 19 Jul 2016 10:17:55 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/ustanovka-docker-compose-na-coreos-cherez-ansible/</comments>
<description>
&lt;p&gt;Разработал для этого очень простой рецепт по мотивам &lt;a href="http://blog.it-premium.com.ua/all/oneliner-for-docker-compose-install-for-coreos/"&gt;предыдущей заметки&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;
- name: install docker-compose to coreos
  hosts: coreos
  gather_facts: no
  tasks:
    - name: install docker-compose
      become: yes
      file: path=/opt/bin state=directory mode=0755

    - name: get docker-compose url
      shell: curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r &amp;#039;.assets[].browser_download_url | select(contains(&amp;quot;Linux&amp;quot;) and contains(&amp;quot;x86_64&amp;quot;))&amp;#039;
      register: url_info

    - name: fetch docker-compose
      become: yes
      get_url: url=&amp;quot;{{url_info.stdout}}&amp;quot; dest=/opt/bin/docker-compose mode=0755
&amp;lt;code&amp;gt;

скрипт найдет url и скачает самую свежую версию и установит аттрибуты для корректного запуска из /opt/bin

напоминаю, /opt/bin переживает перезагрузки и является persistent каталогом в CoreOS.&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Как использовать Ansible с CoreOS?</title>
<guid isPermaLink="false">121</guid>
<link>https://blog.it-premium.com.ua/all/kak-ispolzovat-ansible-s-coreos/</link>
<pubDate>Wed, 13 Jul 2016 11:46:19 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/kak-ispolzovat-ansible-s-coreos/</comments>
<description>
&lt;p&gt;Ведь для использования Ansible необходимо иметь python интерпретатор&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;quot;module_stdout&amp;quot;: &amp;quot;/bin/sh: /usr/bin/python: No such file or directory\r\n&amp;quot;,&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;к счастью у ansible есть режим так называемой raw работы, без использования интерпретатора python, который и даст установить python и необходимые модули.&lt;/p&gt;
&lt;p&gt;запускаем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;и создаем рецепт bootstrap.yml&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- hosts: coreos
  gather_facts: False
  roles:
    - defunctzombie.coreos-bootstrap&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;и запускаем для нужного хоста coreos&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ansible-playbook bootstrap.yml&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;это загрузит соответствующую версию мини-питона и даст ansible возможность выполняться на хосте как обычно.&lt;/p&gt;
&lt;p&gt;Я использую macOS, поэтому пришлось ствить ansible из pip пакетов командой&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo pip install ansible
pip install --upgrade setuptools --user python
pip install --upgrade pyasn1 --user python&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Update:&lt;br /&gt;
в новой версии ansible вместо пакета docker предлагается использовать docker-container и docker-image, поэтому &lt;a href="мануал"&gt;&lt;a href="https://coreos.com/blog/managing-coreos-with-ansible/"&gt;https://coreos.com/blog/managing-coreos-with-ansible/&lt;/a&gt;&lt;/a&gt; немного устарел.&lt;/p&gt;
&lt;p&gt;Вот мой работоспособный site.yml&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- name: Nginx Example
  hosts: coreos
  tasks:
    ##- name: Start etcd
      #service: name=etcd.service state=started

    - name: Install docker-py
      pip: name=docker-py executable=/home/core/bin/pip

    - name: Install PyYAML
      pip: name=PyYAML executable=/home/core/bin/pip

    - name: Install docker-compose
      pip: name=docker-compose executable=/home/core/bin/pip

    - name: launch nginx container
      docker_container:
        name: &amp;quot;nginx-proxy&amp;quot;
        image: &amp;quot;jwilder/nginx-proxy&amp;quot;
        ports: &amp;quot;80:80&amp;quot;
        restart_policy: always
        state: started
        volumes:
          - /var/run/docker.sock:/tmp/docker.sock:ro

    - name: copy docker-compose.yml
      copy: src=./Sites/it-premium/docker-compose.prod.yml dest=/home/core/it-premium/docker-compose.yml
      tags: deploy

    - name: copy sqlite
      copy: src=./Sites/it-premium/sqlite dest=/home/core/it-premium/ directory_mode=yes mode=0644
      tags: deploy

    - name: launch it-premium docker-compose with 2 containers
      docker_service:
        project_src: it-premium
        build: no
      register: output

    - debug: var=output
    - assert:
        that: &amp;quot;not output.changed &amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;здесь я копирую docker-compose.yml подготовленный для продакшена и sqlite3 продакшен базу из бекапа.&lt;/p&gt;
</description>
</item>


</channel>
</rss>