From 4fe170fbe436308d34003100d3841bdd71d065b3 Mon Sep 17 00:00:00 2001 From: Christoph Breit Date: Wed, 18 Oct 2023 12:03:29 +0200 Subject: [PATCH 1/6] add installation for vspheredb --- ...ture_add_vspheredb_module_installation.yml | 3 + doc/role-icingaweb2/module-vspheredb.md | 55 +++++++++++++++++++ roles/icingaweb2/defaults/main.yml | 1 + roles/icingaweb2/tasks/modules/vspheredb.yml | 30 ++++++++++ roles/icingaweb2/vars/main.yml | 3 +- 5 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/feature_add_vspheredb_module_installation.yml create mode 100644 doc/role-icingaweb2/module-vspheredb.md create mode 100644 roles/icingaweb2/tasks/modules/vspheredb.yml diff --git a/changelogs/fragments/feature_add_vspheredb_module_installation.yml b/changelogs/fragments/feature_add_vspheredb_module_installation.yml new file mode 100644 index 00000000..ddc847dd --- /dev/null +++ b/changelogs/fragments/feature_add_vspheredb_module_installation.yml @@ -0,0 +1,3 @@ +--- +major_changes: + - Added Installation of Vspheredb Module diff --git a/doc/role-icingaweb2/module-vspheredb.md b/doc/role-icingaweb2/module-vspheredb.md new file mode 100644 index 00000000..abc3b851 --- /dev/null +++ b/doc/role-icingaweb2/module-vspheredb.md @@ -0,0 +1,55 @@ +## Module Vspheredb + +The module Icinga Vspheredb provides + +## Configuration + +The general module parameter like `enabled` and `source` can be applied here. + +For every config file, create a dictionary with sections as keys and the parameters as values. For all parameters please check the [module documentation](https://icinga.com/docs/icinga-vsphere-integration/latest/doc/01-Installation/) + +as Icinga Web 2 resource, please use the `icingaweb2_resources` variable to define +the resource. + +Example: + +``` +icingaweb2_resources: + vspheredb: + type: db + db: mysql + host: localhost + dbname: vspheredb + username: vspheredb + password: vspheredb + charset: utf8mb4 + +icingaweb2_modules: + vspheredb: + enabled: true + source: package + config: + db: + resource: vspheredb +``` + +## Database + +The database can be created using the Geerlingguy mysql role. + +For more parameters please check the [role documentation](https://github.com/geerlingguy/ansible-role-mysql) + +Example: + +``` +mysql_databases: + - name: vspheredb + encoding: utf8mb4 + collation: utf8mb4_general_ci + +pre_tasks: + - ansible.builtin.include_role: + name: geerlingguy.mysql + + +``` \ No newline at end of file diff --git a/roles/icingaweb2/defaults/main.yml b/roles/icingaweb2/defaults/main.yml index 089e7256..33be8aba 100644 --- a/roles/icingaweb2/defaults/main.yml +++ b/roles/icingaweb2/defaults/main.yml @@ -2,6 +2,7 @@ icingaweb2_config_dir: /etc/icingaweb2 icingaweb2_group: icingaweb2 icingaweb2_modules_config_dir: "{{ icingaweb2_config_dir }}/modules" icingaweb2_director_service: icinga-director.service +icingaweb2_vspheredb_service: icinga-vspheredb.service icingaweb2_groups: icingaweb2: diff --git a/roles/icingaweb2/tasks/modules/vspheredb.yml b/roles/icingaweb2/tasks/modules/vspheredb.yml new file mode 100644 index 00000000..edaa446f --- /dev/null +++ b/roles/icingaweb2/tasks/modules/vspheredb.yml @@ -0,0 +1,30 @@ +- name: Module Vspheredb | Install + debug: + msg: Installed VsphereDB Modul + + + +- name: Module Vspheredb | Ensure config directory + ansible.builtin.file: + state: directory + dest: "{{ icingaweb2_modules_config_dir }}/vspheredb" + owner: "{{ icingaweb2_httpd_user }}" + group: "{{ icingaweb2_group }}" + mode: "2770" + +- name: Module Vspheredb | Manage config files + ansible.builtin.include_tasks: manage_module_config.yml + loop: "{{ _files }}" + loop_control: + loop_var: _file + when: vars['icingaweb2_modules'][_module][_file] is defined + vars: + _module: "{{ item.key }}" + _files: + - config + +- name: Module Vspheredb | Ensure daemon is running + ansible.builtin.service: + name: "{{ icingaweb2_vspheredb_service }}" + state: started + enabled: yes diff --git a/roles/icingaweb2/vars/main.yml b/roles/icingaweb2/vars/main.yml index 8092fd97..cb9ef5c8 100644 --- a/roles/icingaweb2/vars/main.yml +++ b/roles/icingaweb2/vars/main.yml @@ -2,4 +2,5 @@ icingaweb2_module_packages: icingadb: icingadb-web director: icinga-director - businessprocess: icinga-businessprocess \ No newline at end of file + businessprocess: icinga-businessprocess + vspheredb: icingaweb2-module-vspheredb \ No newline at end of file From 10570225efd5ac34e5d699f62e7d7dc553c4e4da Mon Sep 17 00:00:00 2001 From: Christoph Breit Date: Thu, 19 Oct 2023 12:02:29 +0200 Subject: [PATCH 2/6] add possibility to install modules for icingaweb2 from git --- roles/icingaweb2/tasks/main.yml | 24 +++++++++++++++++++++++- roles/icingaweb2/vars/debian-ubuntu.yml | 1 + roles/icingaweb2/vars/main.yml | 5 ++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/roles/icingaweb2/tasks/main.yml b/roles/icingaweb2/tasks/main.yml index e6bd7b6b..eb53f2b9 100644 --- a/roles/icingaweb2/tasks/main.yml +++ b/roles/icingaweb2/tasks/main.yml @@ -18,9 +18,30 @@ loop: "{{ icingaweb2_modules | dict2items }}" when: icingaweb2_modules is defined and icingaweb2_module_packages[item.key] is defined and item.value.enabled is true and item.value.source == "package" +- name: Gather source packages from git + ansible.builtin.set_fact: + icingaweb2_git_packages: "{{ icingaweb2_git_packages + [item] }}" + loop: "{{ icingaweb2_modules | dict2items }}" + when: icingaweb2_modules is defined and item.value.enabled is true and item.value.source.startswith("git") + - name: Include OS specific installation ansible.builtin.include_tasks: "install_on_{{ ansible_os_family | lower }}.yml" +- name: Debug icingaweb2_packages + debug: + msg: "{{ (item.value.source | split(', ') | last) }}" + loop: "{{ icingaweb2_git_packages }}" + # when: item.value.source.startswith('git') + # msg: "{{ icingaweb2_git_packages['test_module']['value'] }}" + +- name: Install Icingaweb2 Module from Git + ansible.builtin.git: + repo: "{{ (item.value.source | split(', '))[1] }}" + dest: "{{ icingaweb2_config['global']['module_path'] }}/{{ item.key }}" + version: "{{ ((item.value.source | split(', ') | last) | default('HEAD')) }}" + loop: "{{ icingaweb2_git_packages }}" + when: icingaweb2_modules is defined and item.value.enabled is true and item.value.source.startswith("git") + - name: Manage Icinga Web 2 config ansible.builtin.include_tasks: "manage_icingaweb_config.yml" @@ -30,7 +51,8 @@ - name: Configure modules ansible.builtin.include_tasks: "modules/{{ item.key }}.yml" - when: icingaweb2_modules is defined + when: icingaweb2_modules is defined + # and item.value.custom is false loop: "{{ icingaweb2_modules | dict2items }}" - name: Manage enabled/disabled modules diff --git a/roles/icingaweb2/vars/debian-ubuntu.yml b/roles/icingaweb2/vars/debian-ubuntu.yml index 10b89b9c..9c7a77dc 100644 --- a/roles/icingaweb2/vars/debian-ubuntu.yml +++ b/roles/icingaweb2/vars/debian-ubuntu.yml @@ -1,3 +1,4 @@ icingaweb2_httpd_user: www-data icingaweb2_fragments_path: /var/tmp/icingaweb icingaweb2_packages: ["icingaweb2","icingacli","libapache2-mod-php"] +icingaweb2_git_packages: [] diff --git a/roles/icingaweb2/vars/main.yml b/roles/icingaweb2/vars/main.yml index cb9ef5c8..d4765e2d 100644 --- a/roles/icingaweb2/vars/main.yml +++ b/roles/icingaweb2/vars/main.yml @@ -3,4 +3,7 @@ icingaweb2_module_packages: icingadb: icingadb-web director: icinga-director businessprocess: icinga-businessprocess - vspheredb: icingaweb2-module-vspheredb \ No newline at end of file +# vspheredb: icingaweb2-module-vspheredb + +icingaweb2_source_packages: + test-modul: test From 0a79083a7e2555ec1731bbacbf5c6540d6f34161 Mon Sep 17 00:00:00 2001 From: Christoph Breit Date: Thu, 19 Oct 2023 15:37:07 +0200 Subject: [PATCH 3/6] add option to use default branch if no tag is set --- roles/icingaweb2/tasks/main.yml | 13 ++++++------- roles/icingaweb2/vars/main.yml | 3 +-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/roles/icingaweb2/tasks/main.yml b/roles/icingaweb2/tasks/main.yml index eb53f2b9..ada92673 100644 --- a/roles/icingaweb2/tasks/main.yml +++ b/roles/icingaweb2/tasks/main.yml @@ -29,18 +29,18 @@ - name: Debug icingaweb2_packages debug: - msg: "{{ (item.value.source | split(', ') | last) }}" + msg: "{{ (item.value.source | split (',') )[2] | default('HEAD') }}" loop: "{{ icingaweb2_git_packages }}" - # when: item.value.source.startswith('git') + when: item.value.source.startswith('git') # msg: "{{ icingaweb2_git_packages['test_module']['value'] }}" - name: Install Icingaweb2 Module from Git ansible.builtin.git: - repo: "{{ (item.value.source | split(', '))[1] }}" + repo: "{{ (item.value.source | split(','))[1] }}" dest: "{{ icingaweb2_config['global']['module_path'] }}/{{ item.key }}" - version: "{{ ((item.value.source | split(', ') | last) | default('HEAD')) }}" + version: "{{ (item.value.source | split(',') | last) if (item.value.source | split(',') | length) == 3 else 'HEAD' }}" loop: "{{ icingaweb2_git_packages }}" - when: icingaweb2_modules is defined and item.value.enabled is true and item.value.source.startswith("git") + when: icingaweb2_modules is defined and item.value.enabled is true and (item.value.source | split(','))[0] == "git" - name: Manage Icinga Web 2 config ansible.builtin.include_tasks: "manage_icingaweb_config.yml" @@ -51,8 +51,7 @@ - name: Configure modules ansible.builtin.include_tasks: "modules/{{ item.key }}.yml" - when: icingaweb2_modules is defined - # and item.value.custom is false + when: icingaweb2_modules is defined and (item.value.custom is false or item.value.custom is not defined) loop: "{{ icingaweb2_modules | dict2items }}" - name: Manage enabled/disabled modules diff --git a/roles/icingaweb2/vars/main.yml b/roles/icingaweb2/vars/main.yml index d4765e2d..ef758f36 100644 --- a/roles/icingaweb2/vars/main.yml +++ b/roles/icingaweb2/vars/main.yml @@ -5,5 +5,4 @@ icingaweb2_module_packages: businessprocess: icinga-businessprocess # vspheredb: icingaweb2-module-vspheredb -icingaweb2_source_packages: - test-modul: test + From 155f834a1458ffc3022d68d78047f9ef1bc31213 Mon Sep 17 00:00:00 2001 From: Christoph Breit Date: Thu, 19 Oct 2023 16:11:52 +0200 Subject: [PATCH 4/6] add readme for installation for packages from git --- doc/role-icingaweb2/role-icingaweb2.md | 19 +++++++++++++++++++ roles/icingaweb2/vars/debian-ubuntu.yml | 2 +- roles/icingaweb2/vars/main.yml | 4 +--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/doc/role-icingaweb2/role-icingaweb2.md b/doc/role-icingaweb2/role-icingaweb2.md index 4faf1ae7..7cfe8195 100644 --- a/doc/role-icingaweb2/role-icingaweb2.md +++ b/doc/role-icingaweb2/role-icingaweb2.md @@ -7,6 +7,23 @@ The role icingaweb2 installs and configures Icinga Web 2 and its modules. * [IcingaDB](./module-icingadb.md) * [Monitoring](./module-monitoring.md) +Custom modules can either be installed via package or git repository. +Therefore set the variable `source` with either `package` or a string consisting `git,repository_url,tag/version/branch` +If no `tag/version/branch` is set the default `HEAD` will be used. + +Furthermore it's possible to differentiate between your own custom modules (for example custom themes) and Icinga specific modules. + +If you want to manage the config by yourself or the module doesn't need further configuration set the variable `manage_config` to `true` otherwise it needs to be set to `false` + +Example: +``` +icingaweb2_modules: + my_theme: + enabled: true + manage_config: true + source: git,https://github.com/slalomsk8er/icingaweb2-theme-solarized.git,v1.0.0 +``` + ## Variables ### Icinga Web 2 DB Configuration @@ -47,3 +64,5 @@ icingaweb2_resources: type: ldap [...] ``` + + diff --git a/roles/icingaweb2/vars/debian-ubuntu.yml b/roles/icingaweb2/vars/debian-ubuntu.yml index 9c7a77dc..b48af20e 100644 --- a/roles/icingaweb2/vars/debian-ubuntu.yml +++ b/roles/icingaweb2/vars/debian-ubuntu.yml @@ -1,4 +1,4 @@ icingaweb2_httpd_user: www-data icingaweb2_fragments_path: /var/tmp/icingaweb icingaweb2_packages: ["icingaweb2","icingacli","libapache2-mod-php"] -icingaweb2_git_packages: [] + diff --git a/roles/icingaweb2/vars/main.yml b/roles/icingaweb2/vars/main.yml index ef758f36..e828d647 100644 --- a/roles/icingaweb2/vars/main.yml +++ b/roles/icingaweb2/vars/main.yml @@ -3,6 +3,4 @@ icingaweb2_module_packages: icingadb: icingadb-web director: icinga-director businessprocess: icinga-businessprocess -# vspheredb: icingaweb2-module-vspheredb - - +icingaweb2_git_packages: [] From d298c20cd364dbc0fef9994e65e1771c0a5ab76e Mon Sep 17 00:00:00 2001 From: Christoph Breit Date: Fri, 20 Oct 2023 09:23:28 +0200 Subject: [PATCH 5/6] remove stuff from vspheredb --- ...ture_add_vspheredb_module_installation.yml | 3 - doc/role-icingaweb2/module-vspheredb.md | 55 ------------------- roles/icingaweb2/defaults/main.yml | 1 - roles/icingaweb2/tasks/modules/vspheredb.yml | 30 ---------- roles/icingaweb2/vars/main.yml | 1 + 5 files changed, 1 insertion(+), 89 deletions(-) delete mode 100644 changelogs/fragments/feature_add_vspheredb_module_installation.yml delete mode 100644 doc/role-icingaweb2/module-vspheredb.md delete mode 100644 roles/icingaweb2/tasks/modules/vspheredb.yml diff --git a/changelogs/fragments/feature_add_vspheredb_module_installation.yml b/changelogs/fragments/feature_add_vspheredb_module_installation.yml deleted file mode 100644 index ddc847dd..00000000 --- a/changelogs/fragments/feature_add_vspheredb_module_installation.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -major_changes: - - Added Installation of Vspheredb Module diff --git a/doc/role-icingaweb2/module-vspheredb.md b/doc/role-icingaweb2/module-vspheredb.md deleted file mode 100644 index abc3b851..00000000 --- a/doc/role-icingaweb2/module-vspheredb.md +++ /dev/null @@ -1,55 +0,0 @@ -## Module Vspheredb - -The module Icinga Vspheredb provides - -## Configuration - -The general module parameter like `enabled` and `source` can be applied here. - -For every config file, create a dictionary with sections as keys and the parameters as values. For all parameters please check the [module documentation](https://icinga.com/docs/icinga-vsphere-integration/latest/doc/01-Installation/) - -as Icinga Web 2 resource, please use the `icingaweb2_resources` variable to define -the resource. - -Example: - -``` -icingaweb2_resources: - vspheredb: - type: db - db: mysql - host: localhost - dbname: vspheredb - username: vspheredb - password: vspheredb - charset: utf8mb4 - -icingaweb2_modules: - vspheredb: - enabled: true - source: package - config: - db: - resource: vspheredb -``` - -## Database - -The database can be created using the Geerlingguy mysql role. - -For more parameters please check the [role documentation](https://github.com/geerlingguy/ansible-role-mysql) - -Example: - -``` -mysql_databases: - - name: vspheredb - encoding: utf8mb4 - collation: utf8mb4_general_ci - -pre_tasks: - - ansible.builtin.include_role: - name: geerlingguy.mysql - - -``` \ No newline at end of file diff --git a/roles/icingaweb2/defaults/main.yml b/roles/icingaweb2/defaults/main.yml index 33be8aba..089e7256 100644 --- a/roles/icingaweb2/defaults/main.yml +++ b/roles/icingaweb2/defaults/main.yml @@ -2,7 +2,6 @@ icingaweb2_config_dir: /etc/icingaweb2 icingaweb2_group: icingaweb2 icingaweb2_modules_config_dir: "{{ icingaweb2_config_dir }}/modules" icingaweb2_director_service: icinga-director.service -icingaweb2_vspheredb_service: icinga-vspheredb.service icingaweb2_groups: icingaweb2: diff --git a/roles/icingaweb2/tasks/modules/vspheredb.yml b/roles/icingaweb2/tasks/modules/vspheredb.yml deleted file mode 100644 index edaa446f..00000000 --- a/roles/icingaweb2/tasks/modules/vspheredb.yml +++ /dev/null @@ -1,30 +0,0 @@ -- name: Module Vspheredb | Install - debug: - msg: Installed VsphereDB Modul - - - -- name: Module Vspheredb | Ensure config directory - ansible.builtin.file: - state: directory - dest: "{{ icingaweb2_modules_config_dir }}/vspheredb" - owner: "{{ icingaweb2_httpd_user }}" - group: "{{ icingaweb2_group }}" - mode: "2770" - -- name: Module Vspheredb | Manage config files - ansible.builtin.include_tasks: manage_module_config.yml - loop: "{{ _files }}" - loop_control: - loop_var: _file - when: vars['icingaweb2_modules'][_module][_file] is defined - vars: - _module: "{{ item.key }}" - _files: - - config - -- name: Module Vspheredb | Ensure daemon is running - ansible.builtin.service: - name: "{{ icingaweb2_vspheredb_service }}" - state: started - enabled: yes diff --git a/roles/icingaweb2/vars/main.yml b/roles/icingaweb2/vars/main.yml index e828d647..cdc0228a 100644 --- a/roles/icingaweb2/vars/main.yml +++ b/roles/icingaweb2/vars/main.yml @@ -2,5 +2,6 @@ icingaweb2_module_packages: icingadb: icingadb-web director: icinga-director + businessprocess: icinga-businessprocess icingaweb2_git_packages: [] From 09c8b896302753bd69a2e65c5d11dea910d28cda Mon Sep 17 00:00:00 2001 From: Christoph Breit Date: Fri, 20 Oct 2023 11:05:18 +0200 Subject: [PATCH 6/6] refactor condition to filter source git and rework parsing of version --- roles/icingaweb2/tasks/main.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/roles/icingaweb2/tasks/main.yml b/roles/icingaweb2/tasks/main.yml index ada92673..9fd9fe70 100644 --- a/roles/icingaweb2/tasks/main.yml +++ b/roles/icingaweb2/tasks/main.yml @@ -22,23 +22,16 @@ ansible.builtin.set_fact: icingaweb2_git_packages: "{{ icingaweb2_git_packages + [item] }}" loop: "{{ icingaweb2_modules | dict2items }}" - when: icingaweb2_modules is defined and item.value.enabled is true and item.value.source.startswith("git") + when: icingaweb2_modules is defined and item.value.enabled is true and (item.value.source | split(','))[0] == "git" - name: Include OS specific installation ansible.builtin.include_tasks: "install_on_{{ ansible_os_family | lower }}.yml" -- name: Debug icingaweb2_packages - debug: - msg: "{{ (item.value.source | split (',') )[2] | default('HEAD') }}" - loop: "{{ icingaweb2_git_packages }}" - when: item.value.source.startswith('git') - # msg: "{{ icingaweb2_git_packages['test_module']['value'] }}" - - name: Install Icingaweb2 Module from Git ansible.builtin.git: repo: "{{ (item.value.source | split(','))[1] }}" dest: "{{ icingaweb2_config['global']['module_path'] }}/{{ item.key }}" - version: "{{ (item.value.source | split(',') | last) if (item.value.source | split(',') | length) == 3 else 'HEAD' }}" + version: "{{ (item.value.source | split(',')[2] | default(omit) }}" loop: "{{ icingaweb2_git_packages }}" when: icingaweb2_modules is defined and item.value.enabled is true and (item.value.source | split(','))[0] == "git"