From ca1dd3bd3fc33b3f695056f1960421a40b5ba5c3 Mon Sep 17 00:00:00 2001 From: Swann Croiset Date: Tue, 30 Jun 2015 11:32:01 +0200 Subject: [PATCH] Bootstrap the plugin structure implements blueprint lma-infra-alerting-plugin Change-Id: I8b13a3c7d296dfbb91f6834604d91c6361eb7a77 --- .gitignore | 2 + LICENSE | 174 +++++++++++++++++++++ README.md | 148 ++++++++++++++++++ deployment_scripts/puppet/modules/.gitkeep | 0 environment_config.yaml | 52 ++++++ metadata.yaml | 35 +++++ pre_build_hook | 64 ++++++++ repositories/centos/.gitkeep | 0 repositories/ubuntu/.gitkeep | 0 tasks.yaml | 8 + 10 files changed, 483 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 deployment_scripts/puppet/modules/.gitkeep create mode 100644 environment_config.yaml create mode 100644 metadata.yaml create mode 100755 pre_build_hook create mode 100644 repositories/centos/.gitkeep create mode 100644 repositories/ubuntu/.gitkeep create mode 100644 tasks.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53ff7a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.rpm +.build diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ecbfc77 --- /dev/null +++ b/LICENSE @@ -0,0 +1,174 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9326090 --- /dev/null +++ b/README.md @@ -0,0 +1,148 @@ +Logging, Monitoring and Alerting (LMA) Infrastructure Alerting Plugin for Fuel +============================================================================== + +Overview +-------- + +The `LMA Infrastructure Alerting` plugin is composed of several services +running on a node (base-os role). It provides the alerting functionality for +the OpenStack Infrastructure inside the `LMA toolchain` [1]_. + +.. [1] The LMA toolchain is currently composed of these Fuel plugins: + + * [LMA collector Plugin](https://github.com/stackforge/fuel-plugin-lma-collector) + * [InfluxDB-Grafana Plugin](https://github.com/stackforge/fuel-plugin-influxdb-grafana) + * [Elasticsearch-Kibana Plugin](https://github.com/stackforge/fuel-plugin-elasticsearch-kibana) + +Requirements +------------ + +| Requirement | Version/Comment | +| ----------------------------------------- | -----------------| +| Mirantis OpenStack compatility | 6.1 or higher | +| LMA Collector Fuel plugin | 0.7 or higher | +| InfluxDB-Grafana Fuel plugin (optional) | 0.7 or higher | + +Recommendations +--------------- + +None. + +Limitations +----------- + +Adding and removing node to/from an environment won't reconfigure the Nagios +server. +This limitation is due to the missing ability of Fuel Plugin Framework to apply +plugin tasks (puppet apply) when these operations occur. + +Installation Guide +================== + +To install the LMA Infrastructure Alerting plugin, follow these steps: + +1. Download the plugin from the [Fuel Plugins + Catalog](https://software.mirantis.com/download-mirantis-openstack-fuel-plug-ins/). + +2. Copy the plugin file to the Fuel Master node. Follow the [Quick start + guide](https://software.mirantis.com/quick-start/) if you don't have a running + Fuel Master node yet. + + ``` + scp lma_infrastructure_alerting-0.7-0.7.0-0.noarch.rpm root@: + ``` + +3. Install the plugin using the `fuel` command line: + + ``` + fuel plugins --install lma_infrastructure_alerting-0.7-0.7.0-0.noarch.rpm + ``` + +4. Verify that the plugin is installed correctly: + + ``` + fuel plugins + ``` + +Please refer to the [Fuel Plugins wiki](https://wiki.openstack.org/wiki/Fuel/Plugins) +if you want to build the plugin by yourself, version 2.0.0 (or higher) of the Fuel +Plugin Builder is required. + +User Guide +========== + +**LMA-Infrastructure-Alerting** plugin configuration +---------------------------------------------------- + +1. Create a new environment with the Fuel UI wizard. +2. Add a node with the "Operating System" role. +3. Before applying changes or once changes applied, edit the name of the node by + clicking on "Untitled (xx:yy)" and modify it for "alerting". +4. Click on the Settings tab of the Fuel web UI. +5. Scroll down the page, select the "LMA Infrastructure Alerting Server plugin" + checkbox and fill-in the required fields. + - The name of the node where the plugin is deployed. + - The username and password to access Nagios web interface. + + +Testing +------- + +### Nagios + +Once installed, you can check that Nagios is working by pointing your browser +to this URL: + +``` +http:///nagios3/ +``` + +Where `HOST` is the IP address or the name of the node that runs the server. + +You should be able to login using the username and password entered for the +configuration of the plugin. + +Known issues +------------ + +None. + +Release Notes +------------- + +**0.8.0** + +* Initial release of the plugin. This is a beta version. + + +Development +=========== + +The *OpenStack Development Mailing List* is the preferred way to communicate, +emails should be sent to `openstack-dev@lists.openstack.org` with the subject +prefixed by `[fuel][plugins][lma]`. + +Reporting Bugs +-------------- + +Bugs should be filled on the [Launchpad fuel-plugins project]( +https://bugs.launchpad.net/fuel-plugins) (not GitHub) with the tag `lma`. + + +Contributing +------------ + +If you would like to contribute to the development of this Fuel plugin you must +follow the [OpenStack development workflow]( +http://docs.openstack.org/infra/manual/developers.html#development-workflow). + +Patch reviews take place on the [OpenStack gerrit]( +https://review.openstack.org/#/q/status:open+project:stackforge/fuel-plugin-lma-infrastructure-alerting,n,z) +system. + +Contributors +------------ + +* Swann Croiset +* Simon Pasquier +* Guillaume Thouvenin diff --git a/deployment_scripts/puppet/modules/.gitkeep b/deployment_scripts/puppet/modules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/environment_config.yaml b/environment_config.yaml new file mode 100644 index 0000000..1130369 --- /dev/null +++ b/environment_config.yaml @@ -0,0 +1,52 @@ +attributes: + node_name: + value: 'alerting' + label: "Node name" + description: 'The name of the node where the plugin will be deployed.' + weight: 30 + type: "text" + regex: ¬_empty + source: '\S' + error: "Invalid value" + + nagios_password: + value: 'r00tme' + label: 'Nagios HTTP password' + description: 'The password to access the Nagios Web Interface (username: "nagiosadmin")' + weight: 42 + type: "password" + regex: *not_empty + + email: + value: '' + label: 'Email address' + description: 'The recipient for the alert notifications' + weight: 45 + type: "text" + regex: + source: '[a-z0-9!#$%&*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.?)?[a-z0-9]?(?:[a-z0-9-]*[a-z0-9])?' + error: "Invalid Email" + + notify_critical: + type: "checkbox" + weight: 50 + value: true + label: "Receive CRITICAL notifications by email" + + notify_warning: + type: "checkbox" + weight: 51 + value: true + label: "Receive WARNING notifications by email" + + notify_unknown: + type: "checkbox" + weight: 52 + value: true + label: "Receive UNKNOWN notifications by email" + + notify_recovery: + type: "checkbox" + weight: 53 + value: true + label: "Receive RECOVERY notifications by email" diff --git a/metadata.yaml b/metadata.yaml new file mode 100644 index 0000000..ec1bbcc --- /dev/null +++ b/metadata.yaml @@ -0,0 +1,35 @@ +# Plugin name +name: lma_infrastructure_alerting +# Human-readable name for your plugin +title: The LMA Infrastructure Alerting Plugin +# Plugin version +version: '0.8.0' +# Description +description: Deploy tools to send alerts concerning the OpenStack infrastructure. +# Required fuel version +fuel_version: ['6.1'] +# Specify license of your plugin +licenses: ['Apache License Version 2.0'] +# Specify author or company name +authors: ['Mirantis Inc'] +# A link to the plugin's page +homepage: https://github.com/stackforge/fuel-plugin-lma-infrastructure-alerting +# Specify a group which your plugin implements, possible options: +# network, storage, storage::cinder, storage::glance, hypervisor +groups: ['monitoring'] + +# The plugin is compatible with releases in the list +releases: + - os: ubuntu + version: 2014.2-6.1 + mode: ['ha', 'multinode'] + deployment_scripts_path: deployment_scripts/ + repository_path: repositories/ubuntu + - os: centos + version: 2014.2-6.1 + mode: ['ha', 'multinode'] + deployment_scripts_path: deployment_scripts/ + repository_path: repositories/centos + +# Version of plugin package +package_version: '2.0.0' diff --git a/pre_build_hook b/pre_build_hook new file mode 100755 index 0000000..c41302e --- /dev/null +++ b/pre_build_hook @@ -0,0 +1,64 @@ +#!/bin/bash +set -eux +ROOT="$(dirname "$(readlink -f "$0")")" +MODULES_DIR="${ROOT}"/deployment_scripts/puppet/modules +RPM_REPO="${ROOT}"/repositories/centos/ +DEB_REPO="${ROOT}"/repositories/ubuntu/ +HTPASSWD_TARBALL_URL="https://forgeapi.puppetlabs.com/v3/files/leinaddm-htpasswd-0.0.3.tar.gz" +FUEL_LIB_VERSION="6.0" +FUEL_LIB_TARBALL_URL="https://github.com/stackforge/fuel-library/archive/${FUEL_LIB_VERSION}.tar.gz" + + +function download_packages { + while [ $# -gt 0 ]; do + FILENAME=$(basename "$1") + EXT=${FILENAME##*.} + case ${EXT} in + deb) REPO=$DEB_REPO;; + rpm) REPO=$RPM_REPO;; + esac + + rm -f "$REPO"/"$FILENAME" + wget -qO - "$1" > "$REPO"/"$FILENAME" + shift + done +} + +download_packages \ + http://mirrors.kernel.org/ubuntu/pool/main/t/talloc/libtalloc2_2.1.0-1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/t/tevent/libtevent0_0.9.19-1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/l/ldb/libldb1_1.1.16-1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/ntdb/libntdb1_1.0-2ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/s/samba/libwbclient0_4.1.6+dfsg-1ubuntu2.14.04.7_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/l/ldb/python-ldb_1.1.16-1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/t/talloc/python-talloc_2.1.0-1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/s/samba/samba-common-bin_4.1.6+dfsg-1ubuntu2.14.04.7_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/s/samba/samba-libs_4.1.6+dfsg-1ubuntu2.14.04.7_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/s/samba/libsmbclient_4.1.6+dfsg-1ubuntu2.14.04.7_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/s/samba/smbclient_4.1.6+dfsg-1ubuntu2.14.04.7_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios-plugins/nagios-plugins-common_1.5-3ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios-plugins/nagios-plugins-basic_1.5-3ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/a/apache2/apache2-utils_2.4.7-1ubuntu4.4_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/b/bsd-mailx/bsd-mailx_8.1.2-0.20131005cvs-1ubuntu0.14.04.1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/libn/libnet-snmp-perl/libnet-snmp-perl_6.0.1-2_all.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios-plugins/nagios-plugins-standard_1.5-3ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios-plugins/nagios-plugins_1.5-3ubuntu1_all.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios-images/nagios-images_0.8_all.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios3/nagios3-common_3.5.1-1ubuntu1_all.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios3/nagios3-cgi_3.5.1-1ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios3/nagios3-core_3.5.1-1ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/nagios3/nagios3_3.5.1-1ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/n/ntdb/python-ntdb_1.0-2ubuntu1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/t/tdb/python-tdb_1.2.12-1_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/s/samba/python-samba_4.1.6+dfsg-1ubuntu2.14.04.7_amd64.deb\ + http://mirrors.kernel.org/ubuntu/pool/main/w/whois/whois_5.1.1_amd64.deb + + + +rm -rf "${MODULES_DIR:?}"/{stdlib,htpasswd} +mkdir -p "${MODULES_DIR}"/{stdlib,htpasswd} +wget -qO- "${FUEL_LIB_TARBALL_URL}" | \ + tar -C "${MODULES_DIR}" --strip-components=3 -zxvf - \ + fuel-library-${FUEL_LIB_VERSION}/deployment/puppet/stdlib + +wget -qO- "${HTPASSWD_TARBALL_URL}" | tar -C "${MODULES_DIR}/htpasswd" --strip-components=1 -xz diff --git a/repositories/centos/.gitkeep b/repositories/centos/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/repositories/ubuntu/.gitkeep b/repositories/ubuntu/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tasks.yaml b/tasks.yaml new file mode 100644 index 0000000..6059e47 --- /dev/null +++ b/tasks.yaml @@ -0,0 +1,8 @@ +# The following tasks are executed in the order they are declared +- role: ['base-os'] + stage: post_deployment/8100 + type: puppet + parameters: + puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/netconfig/netconfig.pp + puppet_modules: /etc/puppet/modules + timeout: 720