From 24c5124e304b8e2854d98284f6ee4715a75ee735 Mon Sep 17 00:00:00 2001 From: Kamil Wiatrowski Date: Thu, 7 Jun 2018 05:13:01 +0100 Subject: WIP: Add role to auto install docker on hosts Auto install docker with dependencies on hosts: apt install python apt install python-pip pip install docker-py apt install docker.io Set docker proxy using host proxy settings. Updated documentation. Change-Id: Ibec7e0a7e484d5a9a8656cd3598c3acc7c2e2184 Signed-off-by: Kamil Wiatrowski --- docker/ansible/collectd_service.yml | 20 ++++++-- docker/ansible/collectd_ves.yml | 20 ++++++-- docker/ansible/default.inv | 18 +++++++ docker/ansible/roles/config_files/tasks/ipmi.yml | 32 +++++++++---- docker/ansible/roles/config_files/tasks/main.yml | 6 +-- docker/ansible/roles/config_files/tasks/mcelog.yml | 17 +++++++ .../ansible/roles/config_files/tasks/types_db.yml | 22 --------- docker/ansible/roles/config_files/tasks/uuid.yml | 21 +++++++++ .../templates/default_read_plugins.conf.j2 | 1 - .../roles/config_files/templates/uuid.conf.j2 | 20 ++++++++ docker/ansible/roles/config_files/vars/main.yml | 5 +- .../ansible/roles/install_docker/tasks/centos.yml | 45 ++++++++++++++++++ docker/ansible/roles/install_docker/tasks/main.yml | 31 ++++++++++++ .../ansible/roles/install_docker/tasks/proxy.yml | 55 ++++++++++++++++++++++ .../ansible/roles/install_docker/tasks/ubuntu.yml | 47 ++++++++++++++++++ docker/ansible/roles/install_docker/vars/main.yml | 18 +++++++ docker/ansible/roles/run_grafana/vars/main.yml | 4 +- 17 files changed, 332 insertions(+), 50 deletions(-) create mode 100644 docker/ansible/default.inv delete mode 100644 docker/ansible/roles/config_files/tasks/types_db.yml create mode 100644 docker/ansible/roles/config_files/tasks/uuid.yml create mode 100644 docker/ansible/roles/config_files/templates/uuid.conf.j2 create mode 100644 docker/ansible/roles/install_docker/tasks/centos.yml create mode 100644 docker/ansible/roles/install_docker/tasks/main.yml create mode 100644 docker/ansible/roles/install_docker/tasks/proxy.yml create mode 100644 docker/ansible/roles/install_docker/tasks/ubuntu.yml create mode 100644 docker/ansible/roles/install_docker/vars/main.yml (limited to 'docker/ansible') diff --git a/docker/ansible/collectd_service.yml b/docker/ansible/collectd_service.yml index bc484d31..965ec8ee 100644 --- a/docker/ansible/collectd_service.yml +++ b/docker/ansible/collectd_service.yml @@ -13,18 +13,28 @@ # limitations under the License. --- +- hosts: collectd_hosts influxdb_hosts grafana_hosts + become: true + become_user: root + gather_facts: true + roles: + - install_docker + - hosts: collectd_hosts - remote_user: root + become: true + become_user: root roles: - config_files - run_collectd - hosts: influxdb_hosts - remote_user: root + become: true + become_user: root roles: - - run_influxdb + - run_influxdb - hosts: grafana_hosts - remote_user: root + become: true + become_user: root roles: - - run_grafana + - run_grafana diff --git a/docker/ansible/collectd_ves.yml b/docker/ansible/collectd_ves.yml index aa3f3ffa..f6140a5f 100644 --- a/docker/ansible/collectd_ves.yml +++ b/docker/ansible/collectd_ves.yml @@ -13,18 +13,28 @@ # limitations under the License. --- +- hosts: collectd_hosts kafka_hosts ves_hosts + become: true + become_user: root + gather_facts: true + roles: + - install_docker + - hosts: collectd_hosts - remote_user: root + become: true + become_user: root roles: - config_files - run_collectd - hosts: kafka_hosts - remote_user: root + become: true + become_user: root roles: - - run_kafka + - run_kafka - hosts: ves_hosts - remote_user: root + become: true + become_user: root roles: - - run_ves + - run_ves diff --git a/docker/ansible/default.inv b/docker/ansible/default.inv new file mode 100644 index 00000000..b3b21c35 --- /dev/null +++ b/docker/ansible/default.inv @@ -0,0 +1,18 @@ +[collectd_hosts] +localhost + +[collectd_hosts:vars] +install_mcelog=true +insert_ipmi_modules=true + +[influxdb_hosts] +#localhost + +[grafana_hosts] +#localhost + +[kafka_hosts] +#localhost + +[ves_hosts] +#localhost diff --git a/docker/ansible/roles/config_files/tasks/ipmi.yml b/docker/ansible/roles/config_files/tasks/ipmi.yml index 5ea62c47..c7359fbf 100644 --- a/docker/ansible/roles/config_files/tasks/ipmi.yml +++ b/docker/ansible/roles/config_files/tasks/ipmi.yml @@ -13,14 +13,6 @@ # limitations under the License. --- -- name: Check if /dev/ipmi0 exists - stat: - path: /dev/ipmi0 - register: ipmi0_exists - ignore_errors: True - tags: - - ipmi - - name: check ipmi_devintf is loaded shell: "lsmod | cut -d' ' -f1 | grep ipmi_devintf" register: ipmi_devintf @@ -35,6 +27,30 @@ tags: - ipmi +- name: insert ipmi module ipmi_devintf + command: "modprobe ipmi_devintf" + register: ipmi_devintf + ignore_errors: true + when: ipmi_devintf|failed and insert_ipmi_modules|default(false)|bool + tags: + - ipmi + +- name: insert ipmi module ipmi_si + command: "modprobe ipmi_si" + register: ipmi_devsi + ignore_errors: true + when: ipmi_devsi|failed and insert_ipmi_modules|default(false)|bool + tags: + - ipmi + +- name: Check if /dev/ipmi0 exists + stat: + path: /dev/ipmi0 + register: ipmi0_exists + ignore_errors: true + tags: + - ipmi + - name: enable ipmi plugin template: src: ipmi.conf.j2 diff --git a/docker/ansible/roles/config_files/tasks/main.yml b/docker/ansible/roles/config_files/tasks/main.yml index 9a9cb300..4bf81f81 100644 --- a/docker/ansible/roles/config_files/tasks/main.yml +++ b/docker/ansible/roles/config_files/tasks/main.yml @@ -74,8 +74,8 @@ - name: enable ipmi plugin include: ipmi.yml +- name: enable uuid plugin + include: uuid.yml + - name: copy additional config files include: additional_configs.yml - -- name: copy types.db to target - include: types_db.yml diff --git a/docker/ansible/roles/config_files/tasks/mcelog.yml b/docker/ansible/roles/config_files/tasks/mcelog.yml index 9c935e3e..bab4b142 100644 --- a/docker/ansible/roles/config_files/tasks/mcelog.yml +++ b/docker/ansible/roles/config_files/tasks/mcelog.yml @@ -13,6 +13,23 @@ # limitations under the License. --- +- name: install mcelog package + package: + name: mcelog + state: present + when: install_mcelog|default(false)|bool + tags: + - mcelogs + +- name: start mcelog daemon if not running + service: + name: mcelog + state: started + enabled: true + when: install_mcelog|default(false)|bool + tags: + - mcelogs + - name: check if mcelog running on host shell: ps -ef | grep mcelog | grep -v grep > /dev/null register: mcelog_running diff --git a/docker/ansible/roles/config_files/tasks/types_db.yml b/docker/ansible/roles/config_files/tasks/types_db.yml deleted file mode 100644 index 7603bdcf..00000000 --- a/docker/ansible/roles/config_files/tasks/types_db.yml +++ /dev/null @@ -1,22 +0,0 @@ -#Copyright 2018 OPNFV and Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. ---- - -- name: copy types.db to target system - copy: - src: types.db - dest: "{{ typesdb_dir }}/types.db" - ignore_errors: True - tags: - - typesdb diff --git a/docker/ansible/roles/config_files/tasks/uuid.yml b/docker/ansible/roles/config_files/tasks/uuid.yml new file mode 100644 index 00000000..25cfa128 --- /dev/null +++ b/docker/ansible/roles/config_files/tasks/uuid.yml @@ -0,0 +1,21 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: enable uuid plugin + template: + src: uuid.conf.j2 + dest: "{{ config_file_dir }}/uuid.conf" + tags: + - uuid diff --git a/docker/ansible/roles/config_files/templates/default_read_plugins.conf.j2 b/docker/ansible/roles/config_files/templates/default_read_plugins.conf.j2 index fd941a76..48beb0be 100644 --- a/docker/ansible/roles/config_files/templates/default_read_plugins.conf.j2 +++ b/docker/ansible/roles/config_files/templates/default_read_plugins.conf.j2 @@ -30,6 +30,5 @@ Interval "{{ interval_value }}" #LoadPlugin processes #LoadPlugin swap #LoadPlugin turbostat -#LoadPlugin uuid #LoadPlugin uptime diff --git a/docker/ansible/roles/config_files/templates/uuid.conf.j2 b/docker/ansible/roles/config_files/templates/uuid.conf.j2 new file mode 100644 index 00000000..a9a84e71 --- /dev/null +++ b/docker/ansible/roles/config_files/templates/uuid.conf.j2 @@ -0,0 +1,20 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LoadPlugin uuid + +# +# UUIDFile "/etc/uuid" +# + diff --git a/docker/ansible/roles/config_files/vars/main.yml b/docker/ansible/roles/config_files/vars/main.yml index 37120d86..bfa0fd68 100644 --- a/docker/ansible/roles/config_files/vars/main.yml +++ b/docker/ansible/roles/config_files/vars/main.yml @@ -23,7 +23,7 @@ interval_value: 10 #network plugin vars network_port: 25826 -network_ip_addr: localhost +network_ip_addr: "{{ (groups['influxdb_hosts']|default({}))[0] | default('localhost') }}" #ovs event and stats plugin vars ovs_event_interval: 1 @@ -54,6 +54,3 @@ write_per_sec: 50 #additional configuration files path additional_configs_path: "" - -#directory to copy types.db file to -typesdb_dir: "/opt/collectd/share/collectd/" diff --git a/docker/ansible/roles/install_docker/tasks/centos.yml b/docker/ansible/roles/install_docker/tasks/centos.yml new file mode 100644 index 00000000..b84d98f2 --- /dev/null +++ b/docker/ansible/roles/install_docker/tasks/centos.yml @@ -0,0 +1,45 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: install dependencies for docker + package: + name: "{{ packages }}" + state: present + vars: + packages: + - python + - yum-utils + - device-mapper-persistent-data + - lvm2 + +- name: set up docker repository + command: "yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo" + +- name: install docker-py + package: + name: python-docker-py + state: present + +- name: install docker + package: + name: docker-ce + state: present + +- name: start docker daemon + systemd: + name: docker + daemon_reload: true + state: started + enabled: true diff --git a/docker/ansible/roles/install_docker/tasks/main.yml b/docker/ansible/roles/install_docker/tasks/main.yml new file mode 100644 index 00000000..7e015bbc --- /dev/null +++ b/docker/ansible/roles/install_docker/tasks/main.yml @@ -0,0 +1,31 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: proxy configuration for docker + tags: + - install_docker + import_tasks: proxy.yml + +- name: install docker for ubuntu + tags: + - install_docker + import_tasks: ubuntu.yml + when: ansible_distribution == "Ubuntu" + +- name: install docker for centos + tags: + - install_docker + import_tasks: centos.yml + when: ansible_distribution == "CentOS" diff --git a/docker/ansible/roles/install_docker/tasks/proxy.yml b/docker/ansible/roles/install_docker/tasks/proxy.yml new file mode 100644 index 00000000..397bed4c --- /dev/null +++ b/docker/ansible/roles/install_docker/tasks/proxy.yml @@ -0,0 +1,55 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: create docker proxy configuration file + tags: + - add_docker_proxy + lineinfile: + path: "{{ docker_proxy_conf }}" + line: "[Service]" + create: yes + +- name: add docker http_proxy + tags: + - add_docker_proxy + lineinfile: + path: "{{ docker_proxy_conf }}" + line: "Environment=\"HTTP_PROXY={{ ansible_env.http_proxy }}\"" + when: ansible_env.http_proxy is defined + +- name: add docker https_proxy + tags: + - add_docker_proxy + lineinfile: + path: "{{ docker_proxy_conf }}" + line: "Environment=\"HTTPS_PROXY={{ ansible_env.https_proxy }}\"" + when: ansible_env.https_proxy is defined + +- name: add docker ftp_proxy + tags: + - add_docker_proxy + lineinfile: + path: "{{ docker_proxy_conf }}" + line: "Environment=\"FTP_PROXY={{ ansible_env.ftp_proxy }}\"" + when: ansible_env.ftp_proxy is defined + +- name: add docker no_proxy + tags: + - add_docker_proxy + lineinfile: + path: "{{ docker_proxy_conf }}" + line: "Environment=\"NO_PROXY={{ ansible_env.no_proxy }}\"" + when: ansible_env.no_proxy is defined + diff --git a/docker/ansible/roles/install_docker/tasks/ubuntu.yml b/docker/ansible/roles/install_docker/tasks/ubuntu.yml new file mode 100644 index 00000000..44156873 --- /dev/null +++ b/docker/ansible/roles/install_docker/tasks/ubuntu.yml @@ -0,0 +1,47 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: update package manager cache + tags: + - cache_update + package: + update_cache: yes + +- name: install python + package: + name: python + state: present + +- name: install python-pip + package: + name: python-pip + state: present + +- name: install docker-py + pip: + name: docker-py + state: present + +- name: install docker + package: + name: docker.io + state: present + +- name: start docker daemon + systemd: + name: docker + daemon_reload: true + state: started + enabled: true diff --git a/docker/ansible/roles/install_docker/vars/main.yml b/docker/ansible/roles/install_docker/vars/main.yml new file mode 100644 index 00000000..0673a63a --- /dev/null +++ b/docker/ansible/roles/install_docker/vars/main.yml @@ -0,0 +1,18 @@ +#Copyright 2018 OPNFV and Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +#docker proxy configuration file +docker_proxy_conf: "/etc/systemd/system/docker.service.d/proxy.conf" + diff --git a/docker/ansible/roles/run_grafana/vars/main.yml b/docker/ansible/roles/run_grafana/vars/main.yml index 0975b598..5caf45da 100644 --- a/docker/ansible/roles/run_grafana/vars/main.yml +++ b/docker/ansible/roles/run_grafana/vars/main.yml @@ -13,5 +13,5 @@ # limitations under the License. --- -influxdb_hostname: localhost -influxdb_host_ip: 127.0.0.1 +influxdb_hostname: influxdb_host +influxdb_host_ip: "{{ (groups['influxdb_hosts']|default({}))[0] | default('localhost') }}" -- cgit 1.2.3-korg