From 79b7ef52946c232abdba84492c7dbd73e6e45f97 Mon Sep 17 00:00:00 2001 From: Eric Renfro Date: Mon, 18 Jul 2016 15:54:05 -0400 Subject: [PATCH] Initial release --- Berksfile | 6 ++ Berksfile.lock | 14 ++++ CHANGELOG.md | 5 ++ README.md | 110 +++++++++++++++++++++++++ attributes/default.rb | 46 +++++++++++ files/default/zabbix-official-repo.key | 24 ++++++ metadata.rb | 16 ++++ recipes/default.rb | 52 ++++++++++++ 8 files changed, 273 insertions(+) create mode 100644 Berksfile create mode 100644 Berksfile.lock create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 attributes/default.rb create mode 100644 files/default/zabbix-official-repo.key create mode 100644 metadata.rb create mode 100644 recipes/default.rb diff --git a/Berksfile b/Berksfile new file mode 100644 index 0000000..b3b64c6 --- /dev/null +++ b/Berksfile @@ -0,0 +1,6 @@ +source "https://supermarket.chef.io" + +metadata + +cookbook "apt", "~> 3.0.0" + diff --git a/Berksfile.lock b/Berksfile.lock new file mode 100644 index 0000000..77654e0 --- /dev/null +++ b/Berksfile.lock @@ -0,0 +1,14 @@ +DEPENDENCIES + yum (~> 3.10.0) + yum-epel (~> 0.6.6) + yum-zabbix + path: . + metadata: true + +GRAPH + yum (3.10.0) + yum-epel (0.6.6) + yum (~> 3.10.0) + yum-zabbix (0.1.0) + yum (>= 3.2.0) + yum-epel (>= 0.0.0) diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..18870f7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# apt-zabbix Cookbook CHANGELOG +This file is used to list changes made in each version of the apt-zabbix cookbook. + +## v0.1.0 +initial release diff --git a/README.md b/README.md new file mode 100644 index 0000000..9e06015 --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +apt-zabbix Cookbook +==================== + +Installs/Configures apt Zabbix Vendor-Specific Repositories. + +This cookbook installs & configures apt Zabbix repositories pe +http://repo.zabbix.com/ + +Requirements +------------ +- Chef 11 or higher +- Ruby 1.9 or higher (preferably from the Chef full-stack-installer) +- Network accessible package repositories +- Debian 7 or newer. +- [apt Cookbook](https://supermarket.chec.io/cookbooks/apt) + +Attributes +---------- +#### apt-zabbix::default + +The following attributes are set by default + +```ruby +default['yum']['zabbix']['repositoryid'] = 'zabbix' +default['yum']['zabbix']['enabled'] = true +default['yum']['zabbix']['managed'] = true +default['yum']['zabbix']['gpgkey'] = 'http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX' +default['yum']['zabbix']['gpgcheck'] = true +default['yum']['zabbix']['description'] = 'Zabbix Official Repository - $basearch' +default['yum']['zabbix']['baseurl'] = 'http://repo.zabbix.com/zabbix/3.0/rhel/6/$basearch' +``` + +```ruby +default['yum']['zabbix-non-supported']['repositoryid'] = 'zabbix-non-supported' +default['yum']['zabbix-non-supported']['enabled'] = false +default['yum']['zabbix-non-supported']['managed'] = false +default['yum']['zabbix-non-supported']['gpgkey'] = 'http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX' +default['yum']['zabbix-non-supported']['gpgcheck'] = true +default['yum']['zabbix-non-supported']['description'] = 'Zabbix Official Repository non-supported - $basearch' +default['yum']['zabbix-non-supported']['baseurl'] = 'http://repo.zabbix.com/non-supported/rhel/6/$basearch/' +``` + +## Recipes +- default - Walks through node attributes and feeds a yum_resource +- parameters. The following is an example a resource generated by the +- recipe during compilation. + +```ruby + yum_repository 'zabbix' do + baseurl 'http://repo.zabbix.com/zabbix/3.0/rhel/6/$basearch/' + description 'Zabbix Official Repository - $basearch' + enabled true + gpgcheck true + gpgkey 'http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX' + end +``` + +## Usage Example +To disable the `zabbix` repository through a Role or Environment definition + +``` +default_attributes( + 'yum' => { + 'zabbix' => { + 'enabled' => false + } + } +) +``` + +Uncommonly used repositoryids are not managed by default. This is speeds up integration testing pipelines by avoiding yum-cache builds that nobody cares about. To enable the `zabbix-non-supported` repository with a wrapper cookbook, place the following in a recipe: + +``` +node.default['yum']['zabbix-non-supported']['managed'] = true +node.default['yum']['zabbix-non-supported']['enabled'] = true +include_recipe 'yum-zabbix' +``` + +## More Examples +Point the base and debuginfo repositories at an internally hosted server. + +``` +node.default['yum']['zabbix']['enabled'] = true +node.default['yum']['zabbix']['baseurl'] = 'https://internal.example.com/centos/6/os/x86_64' +node.default['yum']['zabbix']['sslverify'] = false +node.default['yum']['zabbix-non-supported']['enabled'] = true +node.default['yum']['zabbix-non-supported']['baseurl'] = 'https://internal.example.com/centos/6/updates/x86_64' +node.default['yum']['zabbix-non-supported']['sslverify'] = false + +include_recipe 'yum-zabbix' +``` + +## License & Authors +**Author:** Eric Renfro () + +**Copyright:** 2016, Linux-Help.org. + +``` +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. +``` diff --git a/attributes/default.rb b/attributes/default.rb new file mode 100644 index 0000000..798287a --- /dev/null +++ b/attributes/default.rb @@ -0,0 +1,46 @@ +# +# Cookbook Name:: apt-zabbix +# Attributes:: default +# + +# Debian-ish platform support for this cookbook and the Zabbix repository. +# Designed to be a private attribute however it can be overridden in the case +# Zabbix supports additional platforms and this cookbook has not been updated +# yet. +# +# This check was implemented as a result of the repo could be successfully +# installed yet not be valid for a given platform and an Zabbix package could +# be successfully installed as a result of it being available natively on the +# platform it which it was run which results in a false positive for the +# consumer of the cookbook. +# +# The hash key is the codename of the OS/version. If the hash value evaluates +# to true, the OS/version is considered supported. + +default['apt-zabbix']['debian']['supported-codenames'] = { + wheezy: true, # Debian 7.x + jessie: true # Debian 8.x +} +default['apt-zabbix']['release_repo'] = '3.0' + +codename = node['lsb']['codename'] + +default['apt-zabbix']['repos'].tap do |repo| + repo['zabbix'].tap do |value| + # Does this cookbook manage the install of the repo? + value['managed'] = true + # Set the repo name + value['repo_name'] = 'zabbix' + # URI of Repo + value['uri'] = "http://repo.zabbix.com/zabbix/#{node['apt-zabbix']['release_repo']}/debian" + # Package distribution of repo + value['distribution'] = codename + # Repo Package Groupings + value['components'] = ['main'] + # Cookbook File For Signing Key + value['key'] = 'zabbix-official-repo.key' + # Whether or not to include the repo source repo + value['deb-src'] = false + end +end + diff --git a/files/default/zabbix-official-repo.key b/files/default/zabbix-official-repo.key new file mode 100644 index 0000000..778566a --- /dev/null +++ b/files/default/zabbix-official-repo.key @@ -0,0 +1,24 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQGiBFCNJaYRBAC4nIW8o2NyOIswb82Xn3AYSMUcNZuKB2fMtpu0WxSXIRiX2BwC +YXx8cIEQVYtLRBL5o0JdmoNCjW6jd5fOVem3EmOcPksvzzRWonIgFHf4EI2n1KJc +JXX/nDC+eoh5xW35mRNFN/BEJHxxiRGGbp2MCnApwgrZLhOujaCGAwavGwCgiG4D +wKMZ4xX6Y2Gv3MSuzMIT0bcEAKYn3WohS+udp0yC3FHDj+oxfuHpklu1xuI3y6ha +402aEFahNi3wr316ukgdPAYLbpz76ivoouTJ/U2MqbNLjAspDvlnHXXyqPM5GC6K +jtXPqNrRMUCrwisoAhorGUg/+S5pyXwsWcJ6EKmA80pR9HO+TbsELE5bGe/oc238 +t/2oBAC3zcQ46wPvXpMCNFb+ED71qDOlnDYaaAPbjgkvnp+WN6nZFFyevjx180Kw +qWOLnlNP6JOuFW27MP75MDPDpbAAOVENp6qnuW9dxXTN80YpPLKUxrQS8vWPnzkY +WtUfF75pEOACFVTgXIqEgW0E6oww2HJi9zF5fS8IlFHJztNYtbQgWmFiYml4IFNJ +QSA8cGFja2FnZXJAemFiYml4LmNvbT6IYAQTEQIAIAUCUI0lpgIbAwYLCQgHAwIE +FQIIAwQWAgMBAh4BAheAAAoJENE9WOR56l7UhUwAmgIGZ39U6D2w2oIWDD8m7KV3 +oI06AJ9EnOxMMlxEjTkt9lEvGhEX1bEh7bkBDQRQjSWmEAQAqx+ecOzBbhqMq5hU +l39cJ6l4aocz6EZ9mSSoF/g+HFz6WYnPAfRaYyfLmZdtF5rGBDD4ysalYG5yD59R +Mv5tNVf/CEx+JAPMhp6JCBkGRaH+xHws4eBPGkea4rGNVP3L3rA7g+c1YXZICGRI +OOH7CIzIZ/w6aFGsPp7xM35ogncAAwUD/3s8Nc1OLDy81DC6rGpxfEURd5pvd/j0 +D5Di0WSBEcHXp5nThDz6ro/Vr0/FVIBtT97tmBHX27yBS3PqxxNRIjZ0GSWQqdws +Q8o3YT+RHjBugXn8CzTOvIn+2QNMA8EtGIZPpCblJv8q6MFPi9m7avQxguMqufgg +fAk7377Rt9RqiEkEGBECAAkFAlCNJaYCGwwACgkQ0T1Y5HnqXtQx4wCfcJZINKVq +kQIoV3KTQAIzr6IvbZoAn12XXt4GP89xHuzPDZ86YJVAgnfK +=+200 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/metadata.rb b/metadata.rb new file mode 100644 index 0000000..082ac88 --- /dev/null +++ b/metadata.rb @@ -0,0 +1,16 @@ +name 'apt-zabbix' +maintainer 'Eric Renfro' +maintainer_email 'psi-jack@linux-help.org' +license 'Apache 2.0' +description 'Installs and configures the NUX Community Desktop Yum Repository' +long_description '' +version '0.1.0' +issues_url 'http://gogs.home.ld/Linux-Help/cookbook-apt-zabbix/issues' +source_url 'http://gogs.home.ld/Linux-Help/cookbook-apt-zabbix' + +%w{ debian }.each do |os| + supports os, '>= 5.0' +end + +depends 'apt', '>= 3.0' + diff --git a/recipes/default.rb b/recipes/default.rb new file mode 100644 index 0000000..797f44e --- /dev/null +++ b/recipes/default.rb @@ -0,0 +1,52 @@ +# +# Author:: Eric Renfro () +# Recipe:: apt-zabbix::default +# +# 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. + +# check if platform is supported +platform_family = node['platform_family'] +platform = node['platform'] +platform_version = node['platform_version'] + +fail("#{platform_family}/#{platform}/#{platform_version} is not supported by the default recipe") \ + unless platform_family?('debian') && + node['apt-zabbix']['debian']['supported-codenames'] + .select { |_version, is_included| is_included } + .keys + .include?(node['lsb']['codename']) + +node['apt-zabbix']['repos'].each do |repo, value| + apt_repository repo do + # define all attributes even though we are not using them all so that the + # values can be passed through to override apt repository definitions + + # Attribute Sources: + # https://github.com/opscode-cookbooks/apt + # https://github.com/opscode-cookbooks/apt/blob/master/resources/repository.rb + + repo_name value['repo_name'] unless value['repo_name'].nil? + uri value['uri'] unless value['uri'].nil? + distribution value['distribution'] unless value['distribution'].nil? + components value['components'] unless value['components'].nil? + arch value['arch'] unless value['arch'].nil? + trusted value['trusted'] unless value['trusted'].nil? + deb_src value['deb-src'] unless value['deb-src'].nil? + keyserver value['keyserver'] unless value['keyserver'].nil? + key value['key'] unless value['key'].nil? + key_proxy value['key_proxy'] unless value['key_proxy'].nil? + cookbook value['cookbook'] unless value['cookbook'].nil? + cache_rebuild value['cache_rebuild'] unless value['cache_rebuild'].nil? + end if value['managed'] +end +