From e28c6f838029dfdbf4d646acd8b3c19e5c290d7d Mon Sep 17 00:00:00 2001 From: "Alexandre M. Savio" Date: Sun, 29 Oct 2017 00:12:32 +0200 Subject: [PATCH] chatbot: wip: fixes for docker-compose --- group_vars/test/vars.yml | 2 + group_vars/test/vault.yml | 10 ++++ host_vars/europython.yml | 20 ++++++-- host_vars/test.yml | 16 ++++-- inventory/manager | 2 +- requirements.txt | 4 +- roles/chatbot/defaults/main.yml | 10 ++-- .../chatbot/files}/Dockerfile | 0 .../chatbot/files}/Dockerfile.armhf | 0 roles/chatbot/files/docker-compose.yml.j2 | 19 ------- roles/chatbot/handlers/main.yml | 8 +++ roles/chatbot/tasks/docker.yml | 28 ----------- roles/chatbot/tasks/docker_compose.yml | 34 +++++++++++++ roles/chatbot/tasks/main.yml | 49 +++++++++---------- roles/chatbot/tasks/plugins.yml | 26 ++++++++++ roles/common/tasks/main.yml | 3 -- roles/docker-compose/defaults/main.yml | 6 +++ roles/docker-compose/files/docker-compose.yml | 6 +++ roles/docker-compose/tasks/main.yml | 46 ++++++++++++++--- roles/manager/tasks/main.yml | 8 +-- roles/ssh/tasks/main.yml | 4 +- site.yml | 2 +- 22 files changed, 196 insertions(+), 107 deletions(-) create mode 100644 group_vars/test/vault.yml rename {dockerfile/chatbot => roles/chatbot/files}/Dockerfile (100%) rename {dockerfile/chatbot => roles/chatbot/files}/Dockerfile.armhf (100%) delete mode 100644 roles/chatbot/files/docker-compose.yml.j2 create mode 100644 roles/chatbot/handlers/main.yml delete mode 100644 roles/chatbot/tasks/docker.yml create mode 100644 roles/chatbot/tasks/docker_compose.yml create mode 100644 roles/chatbot/tasks/plugins.yml create mode 100644 roles/docker-compose/defaults/main.yml create mode 100644 roles/docker-compose/files/docker-compose.yml diff --git a/group_vars/test/vars.yml b/group_vars/test/vars.yml index ed97d53..a2c4027 100644 --- a/group_vars/test/vars.yml +++ b/group_vars/test/vars.yml @@ -1 +1,3 @@ --- + +pyper_telegram_token: '{{ vault_pyper_telegram_token }}' diff --git a/group_vars/test/vault.yml b/group_vars/test/vault.yml new file mode 100644 index 0000000..0153150 --- /dev/null +++ b/group_vars/test/vault.yml @@ -0,0 +1,10 @@ +$ANSIBLE_VAULT;1.1;AES256 +65366437396535653665313330633537643164363236326239633332396133616634656130613832 +6434633336326666346262333566383263303463633163360a633137346632373166393430396137 +39373461316438616334376464663966616132313866306331346535613330653433616336386463 +3437356466333439370a643362306332636238343865333835363539363132303431343861613933 +31313130323932313162633932363564303736333864303162373063613138623363373361363232 +33663534653762663662353734393734393765356461383563376530663266343536383861313539 +35396466363135616333343032626532396235656338306238356539393433373061363639626237 +38623836613838653034613061366635366538326339376664613136363038663962363037333132 +65336364623636643636316332636532646435666362653735303336303663303036 diff --git a/host_vars/europython.yml b/host_vars/europython.yml index a8f025a..11d3c0b 100644 --- a/host_vars/europython.yml +++ b/host_vars/europython.yml @@ -1,8 +1,18 @@ --- -user: root +user: "root" +group: "{{ ansible_ssh_user }}" -tmp_install_dir: -bin_dir: -install_dir: -dockers_dir: "{{ install_dir }}/dockers" +home_dir: '/home/{{ user }}' + +tmp_install_dir: '{{ home_dir }}/tmp' +install_dir: '{{ home_dir }}/apps' +bin_dir: '{{ home_dir }}/bin' + +config_dir_basename: "config" +env_dir_basename: "envfile" + +dockers_files_dir: '{{ install_dir }}/dockerfile' +dockers_volumes_dir: '{{ install_dir }}/volume' +dockers_config_dir: '{{ install_dir }}/{{ config_dir_basename }}' +dockers_env_dir: '{{ install_dir }}/{{ env_dir_basename }}' diff --git a/host_vars/test.yml b/host_vars/test.yml index 11aa225..03aa7d6 100644 --- a/host_vars/test.yml +++ b/host_vars/test.yml @@ -4,9 +4,15 @@ user: "{{ ansible_ssh_user }}" group: "{{ ansible_ssh_user }}" home_dir: '/home/{{ user }}' + tmp_install_dir: '{{ home_dir }}/tmp' -bin_dir: '{{ home_dir }}/bin' -install_dir: '{{ home_dir }}/apps' -dockers_dir: '{{ install_dir }}/dockers' -config_dir: '{{ install_dir }}/config' -env_dir: '{{ dockers_dir }}/env' +install_dir: '{{ home_dir }}/apps' +bin_dir: '{{ home_dir }}/bin' + +config_dir_basename: "config" +env_dir_basename: "envfile" + +dockers_files_dir: '{{ install_dir }}/dockerfile' +dockers_volumes_dir: '{{ install_dir }}/volume' +dockers_config_dir: '{{ install_dir }}/{{ config_dir_basename }}' +dockers_env_dir: '{{ install_dir }}/{{ env_dir_basename }}' diff --git a/inventory/manager b/inventory/manager index f1af7ea..e6b8f96 100644 --- a/inventory/manager +++ b/inventory/manager @@ -1 +1 @@ -manager ansible_connection=local ansible_ssh_host=vagrant ansible_ssh_user=vagrant ansible_ssh_private_key_file=/vagrant/.vagrant/machines/manager/virtualbox/private_key +manager ansible_ssh_user=vagrant ansible_ssh_private_key_file=/vagrant/.vagrant/machines/manager/virtualbox/private_key diff --git a/requirements.txt b/requirements.txt index a287830..13c50cf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -ansible==2.3.2 -cryptography==2.0.3 +ansible>=2.4.1 +cryptography>=2.0.3 diff --git a/roles/chatbot/defaults/main.yml b/roles/chatbot/defaults/main.yml index f3a33cf..5f2ea66 100644 --- a/roles/chatbot/defaults/main.yml +++ b/roles/chatbot/defaults/main.yml @@ -1,11 +1,11 @@ --- -chatbot_docker_path: "{{ dockers_dir }}/chatbot" - dockerfile: 'Dockerfile' #dockerfile: 'Dockerfile.armhf' -chatbot_docker_dir: '{{ dockers_dir }}/chatbot' -chatbot_config_dir: '{{ config_dir }}/chatbot' chatbot_config_plugins_dir: '{{ chatbot_config_dir }}/plugins' -chatbot_env_dir: '{{ env_dir }}/chatbot' +chatbot_env_file_basename: 'chatbot_env' + +chatbot_dockerfiles_dir: '{{ dockers_files_dir }}/chatbot' +chatbot_config_dir: '{{ dockers_config_dir }}/chatbot' +chatbot_env_dir: '{{ dockers_env_dir }}/chatbot' diff --git a/dockerfile/chatbot/Dockerfile b/roles/chatbot/files/Dockerfile similarity index 100% rename from dockerfile/chatbot/Dockerfile rename to roles/chatbot/files/Dockerfile diff --git a/dockerfile/chatbot/Dockerfile.armhf b/roles/chatbot/files/Dockerfile.armhf similarity index 100% rename from dockerfile/chatbot/Dockerfile.armhf rename to roles/chatbot/files/Dockerfile.armhf diff --git a/roles/chatbot/files/docker-compose.yml.j2 b/roles/chatbot/files/docker-compose.yml.j2 deleted file mode 100644 index ccf3893..0000000 --- a/roles/chatbot/files/docker-compose.yml.j2 +++ /dev/null @@ -1,19 +0,0 @@ -version: '2' - -services: - errbot: - restart: always - build: - context: ./dockerfile/errbot/ - dockerfile: {{ dockerfile }} - volumes: - - errbot_src:/usr/src/errbot/ - - errbot_data:/usr/src/errbot/data - - ./config/errbot:/etc/errbot/:ro - env_file: - - env_files/errbot_env - command: errbot - -volumes: - errbot_src: ~ - errbot_data: ~ diff --git a/roles/chatbot/handlers/main.yml b/roles/chatbot/handlers/main.yml new file mode 100644 index 0000000..c0c0208 --- /dev/null +++ b/roles/chatbot/handlers/main.yml @@ -0,0 +1,8 @@ +--- + +- name: chatbot restart + docker_service: + project_src: "{{ docker_compose_filepath }}" + project_name: chatbot + build: yes + recreate: smart diff --git a/roles/chatbot/tasks/docker.yml b/roles/chatbot/tasks/docker.yml deleted file mode 100644 index 46b2908..0000000 --- a/roles/chatbot/tasks/docker.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- - -- name: chatbot | docker-compose.yml template file - template: - src: docker-compose.yml.j2 - dest: "{{ dockers_dir }}/docker-compose.yml" - mode: 0640 - -- name: chatbot | docker-compose service is absent - docker_service: - project_src: "{{ dockers_dir }}" - project_name: chatbot - state: absent - -- name: chatbot | Launch docker-compose service - docker_service: - project_src: "{{ dockers_dir }}" - project_name: chatbot - register: output - -- name: chatbot | Debug docker-compose service - debug: - var: output - -- name: chatbot | Check docker-compose service is running - assert: - that: - - "errbot.chatbot.state.running" diff --git a/roles/chatbot/tasks/docker_compose.yml b/roles/chatbot/tasks/docker_compose.yml new file mode 100644 index 0000000..a4656ee --- /dev/null +++ b/roles/chatbot/tasks/docker_compose.yml @@ -0,0 +1,34 @@ +--- + +- set_fact: + chatbot_service: | + chatbot: + restart: always + build: + context: ./dockerfile/chatbot/ + dockerfile: {{ dockerfile }} + volumes: + - chatbot_src:/usr/src/errbot/ + - chatbot_data:/usr/src/errbot/data + - ./{{ config_dir_basename }}/chatbot:/etc/errbot/:ro + env_file: + - ./{{ env_dir_basename }}/{{ chatbot_env_file_basename }} + command: errbot + + chatbot_volumes: | + chatbot_src: ~ + chatbot_data: ~ + +- name: chatbot | Add services to docker-compose.yml + blockinfile: + dest: "{{ docker_compose_filepath }}" + insertafter: "^services:$" + marker: " # {mark} CHATBOT SERVICES - ANSIBLE MANAGED BLOCK #" + block: "{{ chatbot_service | indent(2, true) }}" + +- name: chatbot | Add volumes to docker-compose.yml + blockinfile: + dest: "{{ docker_compose_filepath }}" + insertafter: "^volumes:$" + marker: " # {mark} CHATBOT VOLUMES - ANSIBLE MANAGED BLOCK #" + block: "{{ chatbot_volumes | indent(2, true) }}" diff --git a/roles/chatbot/tasks/main.yml b/roles/chatbot/tasks/main.yml index d0e5298..ee18508 100644 --- a/roles/chatbot/tasks/main.yml +++ b/roles/chatbot/tasks/main.yml @@ -8,16 +8,10 @@ owner: '{{ user }}' group: '{{ group }}' with_items: - - '{{ chatbot_docker_dir }}' + - '{{ chatbot_dockerfiles_dir }}' - '{{ chatbot_config_dir }}' - - '{{ chatbot_env_dir }}' - '{{ chatbot_config_plugins_dir }}' -- name: chatbot | Copy tokens.yml file - copy: - src: config/tokens.yml - dest: '{{ chatbot_config_dir }}' - - name: chatbot | Create plugin config folders file: path: '{{ item }}' @@ -29,30 +23,31 @@ - '{{ chatbot_config_plugins_dir }}/err-sponsors' #- '{{ chatbot_config_plugins_dir }}/err-gdrive' -- name: chatbot | Copy err-rss plugin config files +- name: chatbot | Copy tokens.yml file copy: - src: 'config/plugins/err-rss/{{ item.src }}' - dest: '{{ chatbot_config_plugins_dir }}/err-rss/{{ item.dest }}' - with_items: - - { src: 'err-rss-vault.ini', dest: 'err-rss.ini' } + src: config/tokens.yml + dest: '{{ chatbot_config_dir }}' + notify: chatbot restart -- name: chatbot | Copy err-sponsors plugin config files +- name: chatbot | Copy env file copy: - src: 'config/plugins/err-sponsors/{{ item.src }}' - dest: '{{ chatbot_config_plugins_dir }}/err-sponsors/{{ item.dest }}' - with_items: - - { src: 'google_api_key.json', dest: 'google_api_key.json' } - - { src: 'sponsor_agreement_template_eps-vault.tex', dest: 'sponsor_agreement_template_eps-vault.tex' } + src: env + dest: '{{ dockers_env_dir }}/{{ chatbot_env_file_basename }}' + notify: chatbot restart -# - name: chatbot | Copy err-gdrive plugin config files -# copy: -# src: 'config/plugins/err-gdrive/{{ item.src }}' -# dest: '{{ chatbot_config_plugins_dir }}/err-gdrive/{{ item.dest }}' -# with_items: -# - { src: 'client_secrets.json', dest: 'client_secrets.json' } -# - { src: 'pydrive_settings.yml', dest: 'pydrive_settings.yml' } +- name: chatbot | Copy Dockerfile file + copy: + src: '{{ dockerfile }}' + dest: '{{ chatbot_dockerfiles_dir }}/{{ dockerfile }}' + notify: chatbot restart +- import_tasks: plugins.yml + tags: [chatbot_docker, chatbot_plugins] + notify: chatbot restart +- import_tasks: docker_compose.yml + tags: chatbot_docker + notify: chatbot restart -# - include: docker.yml -# tags: chatbot_docker +- name: chatbot | make sure all handlers run + meta: flush_handlers diff --git a/roles/chatbot/tasks/plugins.yml b/roles/chatbot/tasks/plugins.yml new file mode 100644 index 0000000..1858141 --- /dev/null +++ b/roles/chatbot/tasks/plugins.yml @@ -0,0 +1,26 @@ +--- + +- name: chatbot | Copy err-rss plugin config files + copy: + src: 'config/plugins/err-rss/{{ item.src }}' + dest: '{{ chatbot_config_plugins_dir }}/err-rss/{{ item.dest }}' + with_items: + - { src: 'err-rss-vault.ini', dest: 'err-rss.ini' } + notify: chatbot restart + +- name: chatbot | Copy err-sponsors plugin config files + copy: + src: 'config/plugins/err-sponsors/{{ item.src }}' + dest: '{{ chatbot_config_plugins_dir }}/err-sponsors/{{ item.dest }}' + with_items: + - { src: 'google_api_key.json', dest: 'google_api_key.json' } + - { src: 'sponsor_agreement_template_eps-vault.tex', dest: 'sponsor_agreement_template_eps-vault.tex' } + notify: chatbot restart + +# - name: chatbot | Copy err-gdrive plugin config files +# copy: +# src: 'config/plugins/err-gdrive/{{ item.src }}' +# dest: '{{ chatbot_config_plugins_dir }}/err-gdrive/{{ item.dest }}' +# with_items: +# - { src: 'client_secrets.json', dest: 'client_secrets.json' } +# - { src: 'pydrive_settings.yml', dest: 'pydrive_settings.yml' } diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 26b2de3..898ce3d 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -11,10 +11,7 @@ with_items: - '{{ tmp_install_dir }}' - '{{ bin_dir }}' - - '{{ env_dir }}' - - '{{ config_dir }}' - '{{ install_dir }}' - - '{{ dockers_dir }}' - name: Update apt repositories cache apt: diff --git a/roles/docker-compose/defaults/main.yml b/roles/docker-compose/defaults/main.yml new file mode 100644 index 0000000..98c079d --- /dev/null +++ b/roles/docker-compose/defaults/main.yml @@ -0,0 +1,6 @@ +--- + +#python_docker_version: 2.5.1 +python_docker_compose_version: 1.17.0rc1 + +docker_compose_filepath: "{{ install_dir }}/docker-compose.yml" diff --git a/roles/docker-compose/files/docker-compose.yml b/roles/docker-compose/files/docker-compose.yml new file mode 100644 index 0000000..98dedca --- /dev/null +++ b/roles/docker-compose/files/docker-compose.yml @@ -0,0 +1,6 @@ +version: '2' + +services: + + +volumes: diff --git a/roles/docker-compose/tasks/main.yml b/roles/docker-compose/tasks/main.yml index 31f14a5..4e6ed32 100644 --- a/roles/docker-compose/tasks/main.yml +++ b/roles/docker-compose/tasks/main.yml @@ -1,23 +1,57 @@ --- -- name: Install docker +- name: docker-compose | Create folders for docker-compose + file: + path: '{{ item }}' + state: directory + owner: '{{ user }}' + group: '{{ group }}' + with_items: + - '{{ dockers_files_dir }}' + - '{{ dockers_volumes_dir }}' + - '{{ dockers_config_dir }}' + - '{{ dockers_env_dir }}' + +- name: docker-compose | Install docker shell: curl -sSL https://get.docker.com | sh -- name: Install docker-compose and docker-py +- name: docker-compose | Install docker-compose pip: name: '{{ item }}' state: forcereinstall with_items: - - docker-py - - docker-compose + #- docker=={{ python_docker_version }} + - docker-compose=={{ python_docker_compose_version }} -- name: Add docker group +- name: docker-compose | docker-compose.yml template file + copy: + src: docker-compose.yml + dest: "{{ docker_compose_filepath }}" + owner: "{{ user }}" + group: "docker" + mode: 0640 + +- name: docker-compose | Add docker group group: name: docker state: present -- name: Add user to docker group +- name: docker-compose | Add user to docker group user: name: "{{ user }}" groups: docker append: yes + +- name: docker-compose | Restart the docker daemon + service: + name: docker + state: restarted + +- name: docker-compose | Change a few ownerships to root:docker + file: + path: '{{ item }}' + owner: root + group: docker + with_items: + - /var/run/docker.sock + - /usr/bin/docker diff --git a/roles/manager/tasks/main.yml b/roles/manager/tasks/main.yml index 7c3a19a..3ff555c 100644 --- a/roles/manager/tasks/main.yml +++ b/roles/manager/tasks/main.yml @@ -45,6 +45,8 @@ pip: requirements: /vagrant/requirements.txt -# ansible-vault decrypt --vault-password-file=/vagrant/ansible/vault-pass.txt /home/vagrant/.ssh/id_rsa -# echo "alias 'll=ls -la'" >> ~/.bashrc -# echo "export ANSIBLE_VAULT_PASSWORD_FILE=/vagrant/ansible/vault-pass.txt" >> ~/.bashrc +- name: manager | Add $ANSIBLE_VAULT_PASSWORD_FILE to the environment + blockinfile: + dest: '{{ home_dir }}/.bashrc' + block: | + export ANSIBLE_VAULT_PASSWORD_FILE=/vagrant/ansible/vault-pass.txt diff --git a/roles/ssh/tasks/main.yml b/roles/ssh/tasks/main.yml index fb0dbd5..e42430f 100644 --- a/roles/ssh/tasks/main.yml +++ b/roles/ssh/tasks/main.yml @@ -1,9 +1,9 @@ --- -- include: config.yml +- import_tasks: config.yml tags: - config -- include: known_hosts.yml +- import_tasks: known_hosts.yml tags: - hosts diff --git a/site.yml b/site.yml index 74d5e2b..a6e6ddf 100644 --- a/site.yml +++ b/site.yml @@ -13,7 +13,7 @@ roles: - { role: common, become: yes, become_method: sudo } - { role: python, become: yes, become_method: sudo } - - { role: docker-compose, become: yes, become_method: sudo} + - { role: docker-compose, become: yes, become_method: sudo, tags: docker_compose } - { role: chatbot, tags: chatbot } - hosts: manager