From b06a4732b5f39e3af9e0a710a663d056c6c4d8eb Mon Sep 17 00:00:00 2001 From: Norbert Varzariu Date: Mon, 21 Dec 2015 15:55:09 +0100 Subject: [PATCH] remove unnecessary file --- Gemfile | 1 + pkg/loomsen-rsnapshot-0.1.0.tar.gz | Bin 0 -> 13188 bytes pkg/loomsen-rsnapshot-0.1.0/CONTRIBUTING.md | 135 ++++++++ pkg/loomsen-rsnapshot-0.1.0/Gemfile | 32 ++ pkg/loomsen-rsnapshot-0.1.0/README.md | 276 ++++++++++++++++ pkg/loomsen-rsnapshot-0.1.0/Rakefile | 23 ++ pkg/loomsen-rsnapshot-0.1.0/TODO | 12 + pkg/loomsen-rsnapshot-0.1.0/checksums.json | 26 ++ .../parser/functions/assert_empty_hash.rb | 18 ++ .../lib/puppet/parser/functions/pick_undef.rb | 15 + .../parser/functions/rand_from_array.rb | 37 +++ .../manifests/config.pp | 146 +++++++++ .../manifests}/cron.pp | 0 pkg/loomsen-rsnapshot-0.1.0/manifests/init.pp | 23 ++ .../manifests/install.pp | 14 + .../manifests/params.pp | 94 ++++++ pkg/loomsen-rsnapshot-0.1.0/metadata.json | 69 ++++ .../nodesets/ubuntu-12.04-x86_64-docker.yml | 12 + .../nodesets/ubuntu-12.04-x86_64-vagrant.yml | 10 + .../nodesets/ubuntu-14.04-x86_64-docker.yml | 12 + .../nodesets/ubuntu-14.04-x86_64-vagrant.yml | 10 + .../spec/classes/init_spec.rb | 37 +++ pkg/loomsen-rsnapshot-0.1.0/spec/spec.opts | 6 + .../spec/spec_helper.rb | 29 ++ .../templates/cron.erb | 1 + .../templates/rsnapshot.erb | 144 +++++++++ pkg/loomsen-rsnapshot-0.1.0/tests/init.pp | 12 + pkg/loomsen-rsnapshot-0.1.1.tar.gz | Bin 0 -> 13348 bytes pkg/loomsen-rsnapshot-0.1.1/CONTRIBUTING.md | 135 ++++++++ pkg/loomsen-rsnapshot-0.1.1/Gemfile | 32 ++ pkg/loomsen-rsnapshot-0.1.1/README.md | 305 ++++++++++++++++++ pkg/loomsen-rsnapshot-0.1.1/Rakefile | 23 ++ pkg/loomsen-rsnapshot-0.1.1/TODO | 0 pkg/loomsen-rsnapshot-0.1.1/checksums.json | 26 ++ .../parser/functions/assert_empty_hash.rb | 18 ++ .../lib/puppet/parser/functions/pick_undef.rb | 15 + .../parser/functions/rand_from_array.rb | 37 +++ .../manifests/config.pp | 148 +++++++++ pkg/loomsen-rsnapshot-0.1.1/manifests/cron.pp | 7 + pkg/loomsen-rsnapshot-0.1.1/manifests/init.pp | 23 ++ .../manifests/install.pp | 14 + .../manifests/params.pp | 94 ++++++ pkg/loomsen-rsnapshot-0.1.1/metadata.json | 69 ++++ .../nodesets/ubuntu-12.04-x86_64-docker.yml | 12 + .../nodesets/ubuntu-12.04-x86_64-vagrant.yml | 10 + .../nodesets/ubuntu-14.04-x86_64-docker.yml | 12 + .../nodesets/ubuntu-14.04-x86_64-vagrant.yml | 10 + .../spec/classes/init_spec.rb | 37 +++ pkg/loomsen-rsnapshot-0.1.1/spec/spec.opts | 6 + .../spec/spec_helper.rb | 29 ++ .../templates/cron.erb | 1 + .../templates/rsnapshot.erb | 144 +++++++++ pkg/loomsen-rsnapshot-0.1.1/tests/init.pp | 12 + 53 files changed, 2413 insertions(+) create mode 100644 pkg/loomsen-rsnapshot-0.1.0.tar.gz create mode 100644 pkg/loomsen-rsnapshot-0.1.0/CONTRIBUTING.md create mode 100644 pkg/loomsen-rsnapshot-0.1.0/Gemfile create mode 100644 pkg/loomsen-rsnapshot-0.1.0/README.md create mode 100644 pkg/loomsen-rsnapshot-0.1.0/Rakefile create mode 100644 pkg/loomsen-rsnapshot-0.1.0/TODO create mode 100644 pkg/loomsen-rsnapshot-0.1.0/checksums.json create mode 100644 pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/assert_empty_hash.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/pick_undef.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/rand_from_array.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/manifests/config.pp rename {manifests => pkg/loomsen-rsnapshot-0.1.0/manifests}/cron.pp (100%) create mode 100644 pkg/loomsen-rsnapshot-0.1.0/manifests/init.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.0/manifests/install.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.0/manifests/params.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.0/metadata.json create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/classes/init_spec.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/spec.opts create mode 100644 pkg/loomsen-rsnapshot-0.1.0/spec/spec_helper.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/templates/cron.erb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/templates/rsnapshot.erb create mode 100644 pkg/loomsen-rsnapshot-0.1.0/tests/init.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.1.tar.gz create mode 100644 pkg/loomsen-rsnapshot-0.1.1/CONTRIBUTING.md create mode 100644 pkg/loomsen-rsnapshot-0.1.1/Gemfile create mode 100644 pkg/loomsen-rsnapshot-0.1.1/README.md create mode 100644 pkg/loomsen-rsnapshot-0.1.1/Rakefile create mode 100644 pkg/loomsen-rsnapshot-0.1.1/TODO create mode 100644 pkg/loomsen-rsnapshot-0.1.1/checksums.json create mode 100644 pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/assert_empty_hash.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/pick_undef.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/rand_from_array.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/manifests/config.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.1/manifests/cron.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.1/manifests/init.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.1/manifests/install.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.1/manifests/params.pp create mode 100644 pkg/loomsen-rsnapshot-0.1.1/metadata.json create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/classes/init_spec.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/spec.opts create mode 100644 pkg/loomsen-rsnapshot-0.1.1/spec/spec_helper.rb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/templates/cron.erb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/templates/rsnapshot.erb create mode 100644 pkg/loomsen-rsnapshot-0.1.1/tests/init.pp diff --git a/Gemfile b/Gemfile index 9016155..4f56d68 100644 --- a/Gemfile +++ b/Gemfile @@ -29,4 +29,5 @@ else gem 'puppet', :require => false end +gem 'puppet', "3.8" # vim:ft=ruby diff --git a/pkg/loomsen-rsnapshot-0.1.0.tar.gz b/pkg/loomsen-rsnapshot-0.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d72267fcf0be0e57a493f9461ab59a79f50cfb8 GIT binary patch literal 13188 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 literal 0 HcmV?d00001 diff --git a/pkg/loomsen-rsnapshot-0.1.0/CONTRIBUTING.md b/pkg/loomsen-rsnapshot-0.1.0/CONTRIBUTING.md new file mode 100644 index 0000000..f75076c --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/CONTRIBUTING.md @@ -0,0 +1,135 @@ +Checklist (and a short version for the impatient) +================================================= + + * Commits: + + - Make commits of logical units. + + - Check for unnecessary whitespace with "git diff --check" before + committing. + + - Commit using Unix line endings (check the settings around "crlf" in + git-config(1)). + + - Do not check in commented out code or unneeded files. + + - The first line of the commit message should be a short + description (50 characters is the soft limit, excluding ticket + number(s)), and should skip the full stop. + + - Associate the issue in the message. The first line should include + the issue number in the form "(#XXXX) Rest of message". + + - The body should provide a meaningful commit message, which: + + - uses the imperative, present tense: "change", not "changed" or + "changes". + + - includes motivation for the change, and contrasts its + implementation with the previous behavior. + + - Make sure that you have tests for the bug you are fixing, or + feature you are adding. + + - Make sure the test suites passes after your commit: + `bundle exec rspec spec/acceptance` More information on [testing](#Testing) below + + - When introducing a new feature, make sure it is properly + documented in the README.md + + * Submission: + + * Pre-requisites: + + - Make sure you have a [GitHub account](https://github.com/join) + + * Preferred method: + + - Fork the repository on GitHub. + + - Push your changes to a topic branch in your fork of the + repository. (the format ticket/1234-short_description_of_change is + usually preferred for this project). + + - Submit a pull request to the repository in the OpenConceptConsulting + organization. + +Testing +======= + +Getting Started +--------------- + +Our puppet modules provide [`Gemfile`](./Gemfile)s which can tell a ruby +package manager such as [bundler](http://bundler.io/) what Ruby packages, +or Gems, are required to build, develop, and test this software. + +Please make sure you have [bundler installed](http://bundler.io/#getting-started) +on your system, then use it to install all dependencies needed for this project, +by running + +```shell +% bundle install +Fetching gem metadata from https://rubygems.org/........ +Fetching gem metadata from https://rubygems.org/.. +Using rake (10.1.0) +Using builder (3.2.2) +-- 8><-- many more --><8 -- +Using rspec-system-puppet (2.2.0) +Using serverspec (0.6.3) +Using rspec-system-serverspec (1.0.0) +Using bundler (1.3.5) +Your bundle is complete! +Use `bundle show [gemname]` to see where a bundled gem is installed. +``` + +NOTE some systems may require you to run this command with sudo. + +If you already have those gems installed, make sure they are up-to-date: + +```shell +% bundle update +``` + +With all dependencies in place and up-to-date we can now run the tests: + +```shell +% rake spec +``` + +This will execute all the [rspec tests](http://rspec-puppet.com/) tests +under [spec/defines](./spec/defines), [spec/classes](./spec/classes), +and so on. rspec tests may have the same kind of dependencies as the +module they are testing. While the module defines in its [Modulefile](./Modulefile), +rspec tests define them in [.fixtures.yml](./fixtures.yml). + +Some puppet modules also come with [beaker](https://github.com/puppetlabs/beaker) +tests. These tests spin up a virtual machine under +[VirtualBox](https://www.virtualbox.org/)) with, controlling it with +[Vagrant](http://www.vagrantup.com/) to actually simulate scripted test +scenarios. In order to run these, you will need both of those tools +installed on your system. + +You can run them by issuing the following command + +```shell +% rake spec_clean +% rspec spec/acceptance +``` + +This will now download a pre-fabricated image configured in the [default node-set](./spec/acceptance/nodesets/default.yml), +install puppet, copy this module and install its dependencies per [spec/spec_helper_acceptance.rb](./spec/spec_helper_acceptance.rb) +and then run all the tests under [spec/acceptance](./spec/acceptance). + +Writing Tests +------------- + +XXX getting started writing tests. + +Additional Resources +==================== + +* [General GitHub documentation](http://help.github.com/) + +* [GitHub pull request documentation](http://help.github.com/send-pull-requests/) + diff --git a/pkg/loomsen-rsnapshot-0.1.0/Gemfile b/pkg/loomsen-rsnapshot-0.1.0/Gemfile new file mode 100644 index 0000000..9016155 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/Gemfile @@ -0,0 +1,32 @@ +source ENV['GEM_SOURCE'] || 'https://rubygems.org' + +group :development, :unit_tests do + gem 'rspec-core', '~> 3.1.7', :require => false + gem 'rspec-puppet', '~> 2.1', :require => false + gem 'puppetlabs_spec_helper', :require => false + gem 'simplecov', :require => false + gem 'puppet_facts', :require => false + gem 'json', :require => false + gem 'metadata-json-lint', :require => false + gem 'puppet-lint', '< 1.1.0', :require => false +end + +group :system_tests do + gem 'beaker-rspec', :require => false + gem 'serverspec', :require => false + gem 'beaker-puppet_install_helper', :require => false +end + +if facterversion = ENV['FACTER_GEM_VERSION'] + gem 'facter', facterversion, :require => false +else + gem 'facter', :require => false +end + +if puppetversion = ENV['PUPPET_GEM_VERSION'] + gem 'puppet', puppetversion, :require => false +else + gem 'puppet', :require => false +end + +# vim:ft=ruby diff --git a/pkg/loomsen-rsnapshot-0.1.0/README.md b/pkg/loomsen-rsnapshot-0.1.0/README.md new file mode 100644 index 0000000..5f50e63 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/README.md @@ -0,0 +1,276 @@ +# rsnapshot + +#### Table of Contents + +1. [Overview](#overview) +2. [Module Description - What the module does and why it is useful](#module-description) + * [Notes](#notes) +3. [Setup - The basics of getting started with rsnapshot](#setup) + * [What rsnapshot affects](#what-rsnapshot-affects) + * [Setup requirements](#setup-requirements) + * [Getting started with rsnapshot](#getting-started) +4. [Configuration - options and additional functionality](#configuration) + * [Examples](#examples) + * [More Options](#more-options) +5. [Reference - An under-the-hood peek at what the module is doing and how](#reference) +5. [Limitations - OS compatibility, etc.](#limitations) +6. [Development - Guide for contributing to the module](#development) +7. [Editors](#editors) +8. [Contributors](#contributors) + +## Overview + +The rsnapshot module installs, configures and manages rsnapshot on a dedicated backup server. + +## Module Description +The rsnapshot module installs, configures and manages rsnapshot on a dedicated backup server. It allows to set up a centralized Backup Server for all your nodes. +For the cron setup, the module will pick random time entries for the crons from an Array or a Range of time. For how to configure this, [please see below](#more-options) + +### Notes +This module is best used with an ENC like hiera. It will make your config much easier to read and to maintain. Check the examples to see what I mean. + +## Setup + +### What rsnapshot affects + +* This module will install the rsnapshot package on your system +* This module will manage the rsnapshot config on your system +* This module will manage cron entries for your configured nodes + +### Setup Requirements + +On CentOS Systems this module requires the stahnma-epel module. Also you will need to have rsync installed on all nodes to be backed up. +It will create repeatable random cron entries from a configurable timerange for all hosts. + +### Getting Started + +You will need to pass the nodenames to be backed up at least. +This will pickup all defaults and add localhost to the backups: + + +```puppet +class { '::rsnapshot': + hosts => { + 'localhost' => {}, + } +} +``` + +## Configuration +Here are some more elaborate examples of what you can do with this module. + +### Examples +This will backup localhost with defaults. It will disable the default backup locations for example.com +and just backup '/var' for example.com. +```puppet +class { '::rsnapshot': + hosts => { + 'localhost' => {}, + 'example.com' => { + backup_defaults => false, + backup => { + '/var/' => './' + } + } + } +} +``` +The same in hiera: +```yaml +--- +classes: rsnapshot +rsnapshot::hosts: + localhost: + example.com: + backup_defaults: false + backup: + '/var/': './' +``` + + + +A more complete hiera example: +```yaml +--- +classes: + - rsnapshot + +# override default backup dirs for all hosts: +rsnapshot::default_backup: + '/etc': './' + '/usr/local': './' + '/home': './' + +# configure hosts to be backed up +rsnapshot::hosts: +# pick all defaults for localhost + localhost: +# add futher backups for node foo.example.com (additional to default_backup) and use a different snapshot root + foo.example.com: + backup: + '/foo': './' + '/bar': './' + '/baz': './misc' + snapshot_root: '/tmp/rsnapshot' +# all defaults + foo1.example.com: + foo2: +# disable default backup dirs and just backup /var for node bar1 +# also set the minute to 0-10 for daily cron (note: this is not particularly useful, it's just meant to document the features) +# lastly set the range of hours to pick a random hour from (the cron for bar1 will have hour set to something between 1 and 5) + bar1: + backup_defaults: false + backup: + '/var': './var' + cron: + 'daily': + 'minute': '0-10' + 'hour': '1..5' + + +``` + + + +### More options +The defaults are pretty reasonable, I hope. However, you may override pretty much anything. Available parameters are discussed below. + +#### Specials +As mentioned, this module will generate random time entries for your hosts. The random number generator is hashed with hostname and backup_level, so the randomness will be repeatable per host.level. This is important so puppet won't override the crons with each run. +You may specify time ranges as follows: + * default cron syntax (1-10, '*/5', 5) + * an array with allowed values, for example, if you want the backup for a host to run between 1am and 5am, you would override the hours setting for the host in question. +in hiera this would look like: (Explanation see below) +```yaml +rsnapshot::hosts: + example.com: + cron: + 'daily': + 'minute': '1' + 'hour': '1..5' +``` +This will create the rsnapshot config using defaults from params.pp, but set the minute of the daily backup to '1' and the hour to something random between 1 and 5. +So it would look something like: +``` +1 4 * * * foo daily +``` +or maybe +``` +1 2 * * * foo daily +``` +## Reference + +### Classes + +#### Public Classes +* rsnapshot: Main class, includes all other classes. + +####Private Classes + +* rsnapshot::install: Handles the packages. +* rsnapshot::config: Handles configuration and cron files. +* rsnapshot::params: default values. + +### Functions +####`assert_empty_hash` +Sets an empty value to a hash (we need this so a loop doesn't break if just a hostname is given to pick up all defaults. + +####`pick_undef` +Like pick but returns undef values. + +####`rand_from_array` +Takes an Integer, a String or an Array as input, and returns a random entry from the array (or just the String/Integer) + +### Parameters + +The following parameters are available in the `::rsnapshot` class: + +####`$hosts` +Hash containing the hosts to be backed up and optional overrides per host +####`$conf_d` +The place where the configs will be dropped (Default: /etc/rsnapshot (will be created if it doesn't exist)) +####`$config_backup_user` +The user to run the backup scripts as (Default: root, also the user used for ssh connections, if you change this make sure you have proper key deployed and the user exists in the nodes to be backed up.) +####`$package_name` +Default: rsnapshot +####`$package_ensure` +Default: present +####`$cron_dir` +Directory to drop the cron files to. Crons will be created per host. (Default: /etc/cron.d) +####`$backup_levels` +Array containing the backup levels (hourly, daily, weekly, monthly) +Configure the backup_levels (valid per host and global, so you may either set: rsnapshot::backup_levels for all hosts or override default backup_levels for specific hosts) +####`$backup_defaults` +Boolean. Backup default backup dirs or not. +####`$cron` +Hash. Set time ranges for different backup levels. +Hash is of the form: +cron =>{ + daily => { + minute => param, + hour => param, + } + weekly => { + minute => param, + hour => param, + } + {...} +} +### rsnapshot configuration variables +Please read up on the following in the [rsnapshot manpage](http://linux.die.net/man/1/rsnapshot) +####`$cmd_cp` +####`$cmd_rm` +####`$cmd_rsync` +####`$cmd_ssh` +####`$cmd_logger` +####`$cmd_du` +####`$cmd_rsnapshot_diff` +####`$cmd_preexec` +####`$cmd_postexec` +####`$use_lvm` +####`$linux_lvm_cmd_lvcreate` +####`$linux_lvm_cmd_lvremove` +####`$linux_lvm_cmd_mount` +####`$linux_lvm_cmd_umount` +####`$linux_lvm_snapshotsize` +####`$linux_lvm_snapshotname` +####`$linux_lvm_vgpath` +####`$linux_lvm_mountpath` +####`$logpath` +####`$logfile` +####`$lockpath` +####`$snapshot_root` +####`$no_create_root` +####`$verbose` +####`$loglevel` +####`$stop_on_stale_lockfile` +####`$rsync_short_args` +####`$rsync_long_args` +####`$ssh_args` +####`$du_args` +####`$one_fs` +####`$retain` +####`$interval` +####`$include` +####`$exclude` +####`$include_file` +####`$exclude_file` +####`$link_dest` +####`$sync_first` +####`$rsync_numtries` +####`$use_lazy_deletes` +####`$default_backup` +####`$backup_scripts` + +## Limitations +Currently, this module support CentOS, Fedora (with the bloonix CentOS Repo), Ubuntu and Debian. + +## Development +I have limited access to resources and time, so if you think this module is useful, like it, hate it, want to make it better or +want it off the face of the planet, feel free to get in touch with me. + +## Editors +Norbert Varzariu (loomsen) + +## Contributors +Please see the [list of contributors.](https://github.com/loomsen/puppet-bloonix_agent/graphs/contributors) diff --git a/pkg/loomsen-rsnapshot-0.1.0/Rakefile b/pkg/loomsen-rsnapshot-0.1.0/Rakefile new file mode 100644 index 0000000..8c9b63e --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/Rakefile @@ -0,0 +1,23 @@ +require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet-lint/tasks/puppet-lint' + +PuppetLint.configuration.log_format = "%{path}:%{linenumber}:%{check}:%{KIND}:%{message}" +PuppetLint.configuration.fail_on_warnings = true +PuppetLint.configuration.send('relative') +PuppetLint.configuration.send('disable_80chars') +PuppetLint.configuration.send('disable_class_inherits_from_params_class') +PuppetLint.configuration.ignore_paths = ["vendor/**/*.pp", "spec/**/*.pp", "pkg/**/*.pp"] + +desc "Validate manifests, templates, and ruby files" +task :validate do + Dir['manifests/**/*.pp'].each do |manifest| + sh "puppet parser validate --noop #{manifest}" + end + Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file| + sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/ + end + Dir['templates/**/*.erb'].each do |template| + sh "erb -P -x -T '-' #{template} | ruby -c" + end +end + diff --git a/pkg/loomsen-rsnapshot-0.1.0/TODO b/pkg/loomsen-rsnapshot-0.1.0/TODO new file mode 100644 index 0000000..c7b5e8b --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/TODO @@ -0,0 +1,12 @@ +* create a struct for cron like +cron = { + daily = { + minute => + hour => + } + monthly = { + minute => + hour => + } +} + diff --git a/pkg/loomsen-rsnapshot-0.1.0/checksums.json b/pkg/loomsen-rsnapshot-0.1.0/checksums.json new file mode 100644 index 0000000..c3478e8 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/checksums.json @@ -0,0 +1,26 @@ +{ + "CONTRIBUTING.md": "1d1592146aac11936cfda288a04df0e0", + "Gemfile": "1291530f9171164c98d314b359bf1d94", + "README.md": "79b9753e608f7413f221c040bc980524", + "Rakefile": "53164c731c7c0dee279cbe74fce9371e", + "TODO": "0833be6e9308a2f59bbdcbb4c175fa05", + "lib/puppet/parser/functions/assert_empty_hash.rb": "69fbc5b1d1f85fdd4d4266154d2f074c", + "lib/puppet/parser/functions/pick_undef.rb": "227f605e6442d77311cc7faa77c1d293", + "lib/puppet/parser/functions/rand_from_array.rb": "bd6e47f00da29df03f529cacb12635ea", + "manifests/config.pp": "0f056c7326cacc11697533097e829eed", + "manifests/cron.pp": "e2cde5fdb7dd677e0d97308f55fae765", + "manifests/init.pp": "714aa55c4e1a495b522075e77c334fdc", + "manifests/install.pp": "fb9ade1c118a3ea8c124584418bd45ad", + "manifests/params.pp": "bcffee800748e3ce58ecd2c0f596f94a", + "metadata.json": "a0219eb24180c95903cfc7bbe05883f6", + "spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml": "6e8a9cb235318d510f5931e73ac07c05", + "spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml": "d170363003b078c180a7263f4b34f53c", + "spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml": "2114f58c30427f4c57e1140b1cbdcab9", + "spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml": "07eedc8f2975ab1c5a5ce28133ef8017", + "spec/classes/init_spec.rb": "12aea61c02cc639c7f42a7e988639159", + "spec/spec.opts": "a600ded995d948e393fbe2320ba8e51c", + "spec/spec_helper.rb": "f3f775caa765cd5ebec8d307f2b07fc5", + "templates/cron.erb": "e9455ec3d623a67de0b3fa62255199f7", + "templates/rsnapshot.erb": "28250af764432307b330d1ec579afcca", + "tests/init.pp": "289ce3c27eea72b5c648097a23bcea61" +} \ No newline at end of file diff --git a/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/assert_empty_hash.rb b/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/assert_empty_hash.rb new file mode 100644 index 0000000..fb90c2c --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/assert_empty_hash.rb @@ -0,0 +1,18 @@ +module Puppet::Parser::Functions +newfunction(:assert_empty_hash, :type => :rvalue, :doc => <<-EOS +This function checks an input struct for undefined hashes in key => hash and assigns {}. This is only a helper function to make a hash.each work if one of the values is undefined +EOS +)do |args| + fail "Must receive one argument." if args.empty? + args.each do |arg| + h = Hash.new + arg.each_pair do |host, hash| + unless hash.is_a? Hash + hash = {} + end + h[host] = hash + end + return h + end + end +end diff --git a/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/pick_undef.rb b/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/pick_undef.rb new file mode 100644 index 0000000..f62cd78 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/pick_undef.rb @@ -0,0 +1,15 @@ +module Puppet::Parser::Functions +newfunction(:pick_undef, :type => :rvalue, :doc => <<-EOS +This function is similar to pick_default, but will return or undefined values. +EOS +) do |args| + fail "Must receive at least one argument." if args.empty? + default = args.last + args = args[0..-2].compact +# args.delete(:undef) +# args.delete(:undefined) +# args.delete("") + args << default + return args[0] + end +end diff --git a/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/rand_from_array.rb b/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/rand_from_array.rb new file mode 100644 index 0000000..416c463 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/lib/puppet/parser/functions/rand_from_array.rb @@ -0,0 +1,37 @@ +module Puppet::Parser::Functions +newfunction(:rand_from_array, :type => :rvalue, :doc => <<-EOS +This function takes either an int or an array as input and returns the int or a +random element from the array +EOS +)do |args| + fail "Must receive two argument." if args.empty? +#++ this works if the input is an array + # return args.sample +# +++++++++++++++++++++++++++++++++++++ +# args.flatten! + params = [] + params << args[0] + params.flatten! + arr = [] + salt = args[1].sum % 60 + rnd = Random.new(salt) +# rnd = Random.new() + params.each do |key| + if key.is_a?(String) and key =~ /\d\.\.\d/ + k = key.split('..') + r = Range.new(k[0],k[1]).to_a + arr << r + arr.flatten! + elsif key.is_a?(String) + arr << key + arr.flatten! + elsif key.is_a?(Integer) + arr << key.to_s + arr.flatten! + end + end + last_i = arr.length - 1 + return arr[rnd.rand(0..last_i)] + +end +end diff --git a/pkg/loomsen-rsnapshot-0.1.0/manifests/config.pp b/pkg/loomsen-rsnapshot-0.1.0/manifests/config.pp new file mode 100644 index 0000000..1b39c1d --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/manifests/config.pp @@ -0,0 +1,146 @@ +# == Class: rsnapshot::config +# +# manage host configs +class rsnapshot::config ( + $hosts = $rsnapshot::hosts, + $cron_dir = $rsnapshot::cron_dir, +) { + # these are global settings, no point in setting them per host + $config_version = $rsnapshot::params::config_version + $lockpath = pick($rsnapshot::lockpath, $rsnapshot::params::config_lockpath) + $conf_d = pick($rsnapshot::conf_d, $rsnapshot::params::conf_d) + # make sure lock path and conf path exist + file { $conf_d: + ensure => 'directory', + } + file { $lockpath: + ensure => 'directory', + } + file { $cron_dir: + ensure => 'directory', + } + # custom function, if only a hostname is given as a param, this is an empty hash + # the next loop would break as puppet does not allow to reassign variables + # the function checks $hosts for elements like: + # { foo => } and converts those to { foo => {} } + $hosts_clean = assert_empty_hash($hosts) + + $hosts_clean.each |String $host, Hash $hash | { + $snapshot_root = pick($hash['snapshot_root'], $rsnapshot::params::config_snapshot_root) + $backup_user = pick($hash['backup_user'], $rsnapshot::params::config_backup_user) + $default_backup_dirs = pick($rsnapshot::default_backup, $rsnapshot::params::config_default_backup) + $backup_levels = pick($hash['backup_levels'], $rsnapshot::params::config_backup_levels, 'weekly') + $backup = $hash['backup'] + $backup_defaults = pick($hash['backup_defaults'], $rsnapshot::params::config_backup_defaults) + $cmd_cp = pick($hash['cmd_cp'], $rsnapshot::params::config_cmd_cp) + $cmd_rm = pick($hash['cmd_rm'], $rsnapshot::params::config_cmd_rm) + $cmd_rsync = pick($hash['cmd_rsync'], $rsnapshot::params::config_cmd_rsync) + $cmd_ssh = pick($hash['cmd_ssh'], $rsnapshot::params::config_cmd_ssh) + $cmd_logger = pick($hash['cmd_logger'], $rsnapshot::params::config_cmd_logger) + $cmd_du = pick($hash['cmd_du'], $rsnapshot::params::config_cmd_du) + $cmd_rsnapshot_diff = pick_undef($hash['cmd_rsnapshot_diff'], $rsnapshot::params::config_cmd_rsnapshot_diff) + $cmd_preexec = pick_undef($hash['cmd_preexec'], $rsnapshot::params::config_cmd_preexec) + $cmd_postexec = pick_undef($hash['cmd_postexec'], $rsnapshot::params::config_cmd_postexec) + $use_lvm = pick_undef($hash['use_lvm'], $rsnapshot::params::config_use_lvm) + $linux_lvm_cmd_lvcreate = pick_undef($hash['linux_lvm_cmd_lvcreate'], $rsnapshot::params::config_linux_lvm_cmd_lvcreate) + $linux_lvm_cmd_lvremove = pick_undef($hash['linux_lvm_cmd_lvremove'], $rsnapshot::params::config_linux_lvm_cmd_lvremove) + $linux_lvm_cmd_mount = pick_undef($hash['linux_lvm_cmd_mount'], $rsnapshot::params::config_linux_lvm_cmd_mount) + $linux_lvm_cmd_umount = pick_undef($hash['linux_lvm_cmd_umount'], $rsnapshot::params::config_linux_lvm_cmd_umount) + $linux_lvm_snapshotsize = pick_undef($hash['linux_lvm_snapshotsize'], $rsnapshot::params::config_linux_lvm_snapshotsize) + $linux_lvm_snapshotname = pick_undef($hash['linux_lvm_snapshotname'], $rsnapshot::params::config_linux_lvm_snapshotname) + $linux_lvm_vgpath = pick_undef($hash['linux_lvm_vgpath'], $rsnapshot::params::config_linux_lvm_vgpath) + $linux_lvm_mountpath = pick_undef($hash['linux_lvm_mountpath'], $rsnapshot::params::config_linux_lvm_mountpath) + $no_create_root = pick_undef($hash['no_create_root'], $rsnapshot::params::config_no_create_root) + $logpath = pick($hash['logpath'], $rsnapshot::logpath, $rsnapshot::params::config_logpath) + $verbose = pick($hash['verbose'], $rsnapshot::params::config_verbose) + $loglevel = pick($hash['loglevel'], $rsnapshot::params::config_loglevel) + $stop_on_stale_lockfile = pick_undef($hash['stop_on_stale_lockfile'], $rsnapshot::params::config_stop_on_stale_lockfile) + $rsync_short_args = pick($hash['rsync_short_args'], $rsnapshot::params::config_rsync_short_args) + $rsync_long_args = pick_undef($hash['rsync_long_args'], $rsnapshot::params::config_rsync_long_args) + $ssh_args = pick_undef($hash['ssh_args'], $rsnapshot::params::config_ssh_args) + $du_args = pick_undef($hash['du_args'], $rsnapshot::params::config_du_args) + $one_fs = pick_undef($hash['one_fs'], $rsnapshot::params::config_one_fs) + $interval = pick($hash['interval'], $rsnapshot::params::config_interval) + $retain = pick_undef($hash['retain'], $rsnapshot::params::config_retain) + $include = pick_undef($hash['include'], $rsnapshot::params::config_include) + $exclude = pick_undef($hash['exclude'], $rsnapshot::params::config_exclude) + $include_file = pick_undef($hash['include_file'], $rsnapshot::params::config_include_file) + $exclude_file = pick($hash['exclude_file'], $rsnapshot::params::config_exclude_file, "${conf_d}/${host}.exclude") + $link_dest = pick_undef($hash['link_dest'], $rsnapshot::params::config_link_dest) + $sync_first = pick_undef($hash['sync_first'], $rsnapshot::params::config_sync_first) + $use_lazy_deletes = pick_undef($hash['use_lazy_deletes'], $rsnapshot::params::config_use_lazy_deletes) + $rsync_numtries = pick_undef($hash['rsync_numtries'], $rsnapshot::params::config_rsync_numtries) + $backup_scripts = pick_undef($hash['backup_scripts'], $rsnapshot::params::config_backup_scripts) + + $snapshot_dir = "${config_snapshot_root}/${host}" + $config = "${conf_d}/${host}.rsnapshot.conf" + $lockfile = "${lockpath}/${host}.pid" + $logfile = "${logpath}/${host}.log" + + # fail if $backup_defaults is set to false and no $host[backup] defined + if ! $backup_defaults and ! $backup { + fail("==> Configuration error: backup_defaults is ${backup_defaults} and backup definitions for this host don't exist <==") + } + + # merge the backup hashes to one if backup_default is set (defaults to true) + if $backup_defaults { + $backups = merge($backup, $default_backup_dirs) + } else { + $backups = $backup + } + + # one of both interval or retain must be present + if ! ( $interval and $retain ) { + $interval = pick($hash['interval'], $rsnapshot::params::config_interval) + } + # rsnapshot wants numeric values + if $link_dest { + $link_dest_num = bool2num($link_dest) + } + if $sync_first { + $sync_first_num = bool2num($sync_first) + } + if $use_lazy_deletes { + $use_lazy_deletes_num = bool2num($use_lazy_deletes) + } + + file { $exclude_file: + ensure => file, + } + file { $config: + content => template('rsnapshot/rsnapshot.erb') + } + + $cronfile = "/tmp/rsnapshot.d/cron/${host}" + concat { "${cronfile}": + } + $backup_levels.each |String $level| { + if validate_hash($hash) { + # allow to globally override ranges, create random numbers for backup_levels daily, weekly, monthly + if has_key($host, 'cron'){ + $c_min = pick($host['cron'][$level]['minute'], $rsnapshot::params::cron[$level]['minute'], '*') + $c_hour = pick($host['cron'][$level]['hour'], $rsnapshot::params::cron[$level]['hour'], '*') + $c_monthday = pick($host['cron'][$level]['monthday'], $rsnapshot::params::cron[$level]['monthday'], '*') + $c_month = pick($host['cron'][$level]['month'], $rsnapshot::params::cron[$level]['month'], '*') + $c_weekday = pick($host['cron'][$level]['weekday'], $rsnapshot::params::cron[$level]['weekday'], '*') + } + } else { + $c_min = $rsnapshot::params::cron[$level]['minute'] + $c_hour = $rsnapshot::params::cron[$level]['hour'] + $c_monthday = $rsnapshot::params::cron[$level]['monthday'] + $c_month = $rsnapshot::params::cron[$level]['month'] + $c_weekday = $rsnapshot::params::cron[$level]['weekday'] + } + $minute = rand_from_array($c_min, "${host}.${level}") + $hour = rand_from_array($c_hour, "${host}.${level}") + $monthday = rand_from_array($c_monthday, "${host}.${level}") + $month = rand_from_array($c_month, "${host}.${level}") + $weekday = rand_from_array($c_weekday, "${host}.${level}") + concat::fragment { "${host}.${level}": + target => "${cronfile}", + content => template('rsnapshot/cron.erb'), + } + } + } +} + diff --git a/manifests/cron.pp b/pkg/loomsen-rsnapshot-0.1.0/manifests/cron.pp similarity index 100% rename from manifests/cron.pp rename to pkg/loomsen-rsnapshot-0.1.0/manifests/cron.pp diff --git a/pkg/loomsen-rsnapshot-0.1.0/manifests/init.pp b/pkg/loomsen-rsnapshot-0.1.0/manifests/init.pp new file mode 100644 index 0000000..0c26dfd --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/manifests/init.pp @@ -0,0 +1,23 @@ +# == Class: rsnapshot +# +# Manages rsnapshot. +# +# === Parameters +# +class rsnapshot ( + $hosts = $rsnapshot::params::hosts, + $conf_d = $rsnapshot::params::conf_d, + $logpath = $rsnapshot::params::config_logpath, + $lockpath = $rsnapshot::params::config_lockpath, + $default_backup = $rsnapshot::params::config_default_backup, + $package_name = $rsnapshot::params::package_name, + $package_ensure = $rsnapshot::params::package_ensure, +) inherits rsnapshot::params { + if $hosts { + class { 'rsnapshot::install': }-> + class { 'rsnapshot::config': } + contain 'rsnapshot::install' + contain 'rsnapshot::config' + } +} + diff --git a/pkg/loomsen-rsnapshot-0.1.0/manifests/install.pp b/pkg/loomsen-rsnapshot-0.1.0/manifests/install.pp new file mode 100644 index 0000000..0758784 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/manifests/install.pp @@ -0,0 +1,14 @@ +# == Class: rsnapshot::install +# +# Installs the rsnapshot package. +class rsnapshot::install inherits rsnapshot { + case $::operatingsystem { + /^CentOS$/: { include epel } + default: {} + } + package { $rsnapshot::package_name: + ensure => $rsnapshot::package_ensure, + } + +} + diff --git a/pkg/loomsen-rsnapshot-0.1.0/manifests/params.pp b/pkg/loomsen-rsnapshot-0.1.0/manifests/params.pp new file mode 100644 index 0000000..5ddccf0 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/manifests/params.pp @@ -0,0 +1,94 @@ +# == Class: rsnapshot +# +# default params +class rsnapshot::params { + $hosts = undef + $conf_d = '/tmp/rsnapshot.d' # the place where the host specific configs are stored + $config_backup_user = 'root' + $package_name = 'rsnapshot' + $package_ensure = 'present' + $cron_dir = '/tmp/rsnapshot.d/cron' + $config_backup_levels = [ 'daily', 'weekly', ] + $config_backup_defaults = true + $config_version = '1.2' + $config_cmd_cp = '/bin/cp' + $config_cmd_rm = '/bin/rm' + $config_cmd_rsync = '/usr/bin/rsync' + $config_cmd_ssh = '/usr/bin/ssh' + $config_cmd_logger = '/usr/bin/logger' + $config_cmd_du = '/usr/bin/du' + $config_cmd_rsnapshot_diff = '/usr/bin/rsnapshot-diff' + $config_cmd_preexec = undef + $config_cmd_postexec = undef + $config_use_lvm = undef + $config_linux_lvm_cmd_lvcreate = undef # '/sbin/lvcreate' + $config_linux_lvm_cmd_lvremove = undef # '/sbin/lvremove' + $config_linux_lvm_cmd_mount = undef # '/sbin/mount' + $config_linux_lvm_cmd_umount = undef # '/sbin/umount' + $config_linux_lvm_snapshotsize = undef # '100M' + $config_linux_lvm_snapshotname = undef # 'rsnapshot' + $config_linux_lvm_vgpath = undef # '/dev' + $config_linux_lvm_mountpath = undef # '/mount/rsnapshot' + $config_logpath = '/var/log/rsnapshot' + $config_logfile = '/var/log/rsnapshot.log' # unused, we are logging to $logpath/$host.log + $config_lockpath = '/var/run/rsnapshot' + $config_snapshot_root = '/backup/' + $config_no_create_root = undef # bool, true or false + $config_verbose = '2' + $config_loglevel = '4' + $config_stop_on_stale_lockfile = undef # bool + $config_rsync_short_args = '-az' + $config_rsync_long_args = undef # defaults are --delete --numeric-ids --relative --delete-excluded + $config_ssh_args = undef + $config_du_args = undef + $config_one_fs = undef + $config_retain = { } + $config_interval = { + 'daily' => '7', + 'weekly' => '4', + 'monthly' => '6', + } + $config_include = [] + $config_exclude = [] + $config_include_file = undef + $config_exclude_file = undef + $config_link_dest = false + $config_sync_first = false + $config_rsync_numtries = 1 + $config_use_lazy_deletes = false + $config_default_backup = { + '/etc' => './', + '/home' => './', + } + $config_backup_scripts = {} + $cron = { + 'hourly' => { + 'minute' => '0..59', + 'hour' => '*', # you could also do: ['21..23','0..4','5'], + 'monthday' => '*', + 'month' => '*', + 'weekday' => '*', + }, + 'daily' => { + 'minute' => '0..59', + 'hour' => '0..23', # you could also do: ['21..23','0..4','5'], + 'monthday' => '*', + 'month' => '*', + 'weekday' => '*', + }, + 'weekly' => { + 'minute' => '0..59', + 'hour' => '0..23', # you could also do: ['21..23','0..4','5'], + 'monthday' => '*', + 'month' => '*', + 'weekday' => '0..6', + }, + 'monthly' => { + 'minute' => '0..59', + 'hour' => '0..23', # you could also do: ['21..23','0..4','5'], + 'monthday' => '0..28', + 'month' => '*', + 'weekday' => '*', + }, + } +} diff --git a/pkg/loomsen-rsnapshot-0.1.0/metadata.json b/pkg/loomsen-rsnapshot-0.1.0/metadata.json new file mode 100644 index 0000000..24deb3e --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/metadata.json @@ -0,0 +1,69 @@ +{ + "name": "loomsen-rsnapshot", + "version": "0.1.0", + "author": "loomsen", + "summary": "Configures rsnapshot.", + "license": "Apache-2.0", + "source": "https://github.com/loomsen/puppet-rsnapshot", + "project_page": "https://github.com/loomsen/puppet-rsnapshot", + "issues_url": "https://github.com/loomsen/puppet-rsnapshot/issues", + "dependencies": [ + {"name":"puppetlabs-stdlib"}, + {"name":"stahnma-epel"} + ], + "data_provider": null, + "tags": [ + "rsnapshot", + "backup", + "rsync" + ], + "requirements": [ + { + "name": "pe", + "version_requirement": ">= 3.0.0" + }, + { + "name": "puppet", + "version_requirement": ">= 3.0.0" + } + ], + "operatingsystem_support": [ + { + "operatingsystem": "CentOS", + "operatingsystemrelease": [ + "5", + "6", + "7" + ] + }, + { + "operatingsystem": "Debian", + "operatingsystemrelease": [ + "6", + "7", + "8" + ] + }, + { + "operatingsystem": "Ubuntu", + "operatingsystemrelease": [ + "12.04", + "10.04", + "14.04" + ] + }, + { + "operatingsystem": "Fedora", + "operatingsystemrelease": [ + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" + ] + } + ] +} diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml new file mode 100644 index 0000000..890730a --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml @@ -0,0 +1,12 @@ +HOSTS: + ubuntu-1204-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-12.04-amd64 + hypervisor : docker + image: ubuntu:12.04 + # This stops the image from being deleted on completion, speeding up the process. + docker_preserve_image: true +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml new file mode 100644 index 0000000..d3c7e15 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml @@ -0,0 +1,10 @@ +HOSTS: + ubuntu-1204-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-12.04-amd64 + hypervisor : vagrant + box : puppetlabs/ubuntu-12.04-64-nocm +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml new file mode 100644 index 0000000..744e027 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml @@ -0,0 +1,12 @@ +HOSTS: + ubuntu-1404-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-14.04-amd64 + hypervisor : docker + image: ubuntu:14.04 + # This stops the image from being deleted on completion, speeding up the process. + docker_preserve_image: true +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml new file mode 100644 index 0000000..7188ccb --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml @@ -0,0 +1,10 @@ +HOSTS: + ubuntu-1404-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-14.04-amd64 + hypervisor : vagrant + box : puppetlabs/ubuntu-14.04-64-nocm +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/classes/init_spec.rb b/pkg/loomsen-rsnapshot-0.1.0/spec/classes/init_spec.rb new file mode 100644 index 0000000..d4615d2 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/classes/init_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' +describe 'rsnapshot' do + + {'Ubuntu' => 'Debian', 'Debian' => 'Debian'}.each do |system, family| + context "when on system #{system} no lvm" do + let :facts do + { + :osfamily => family, + :operatingsystem => system, + } + end + + it { should contain_class('rsnapshot') } + it { should contain_class('rsnapshot::install') } + it { should contain_class('rsnapshot::config') } + end + + context "when on system #{system} with lvm" do + let :facts do + { + :osfamily => family, + :operatingsystem => system, + } + end + + let(:params) { {:use_lvm => true} } + + it { should contain_class('rsnapshot') } + it { should contain_class('rsnapshot::install') } + it { should contain_class('rsnapshot::config') } + + it { + should contain_file('/etc/rsnapshot.conf').with_content(/^linux_lvm_((\w|_)+)\t(.*)$/) + } + end + end +end diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/spec.opts b/pkg/loomsen-rsnapshot-0.1.0/spec/spec.opts new file mode 100644 index 0000000..91cd642 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/spec.opts @@ -0,0 +1,6 @@ +--format +s +--colour +--loadby +mtime +--backtrace diff --git a/pkg/loomsen-rsnapshot-0.1.0/spec/spec_helper.rb b/pkg/loomsen-rsnapshot-0.1.0/spec/spec_helper.rb new file mode 100644 index 0000000..d4197d7 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/spec/spec_helper.rb @@ -0,0 +1,29 @@ +require 'puppetlabs_spec_helper/module_spec_helper' + +RSpec.configure do |c| + c.include PuppetlabsSpec::Files + + c.before :each do + # Ensure that we don't accidentally cache facts and environment + # between test cases. + Facter::Util::Loader.any_instance.stubs(:load_all) + Facter.clear + Facter.clear_messages + + # Store any environment variables away to be restored later + @old_env = {} + ENV.each_key {|k| @old_env[k] = ENV[k]} + + if Gem::Version.new(`puppet --version`) >= Gem::Version.new('3.5') + Puppet.settings[:strict_variables]=true + end + if ENV['PARSER'] + Puppet.settings[:parser]=ENV['PARSER'] + end + end + + c.after :each do + PuppetlabsSpec::Files.cleanup + end +end + diff --git a/pkg/loomsen-rsnapshot-0.1.0/templates/cron.erb b/pkg/loomsen-rsnapshot-0.1.0/templates/cron.erb new file mode 100644 index 0000000..5eb5e0e --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/templates/cron.erb @@ -0,0 +1 @@ +<%= @minute %> <%= @hour %> <%= @month %> <%= @monthday %> <%= @weekday %> root /usr/bin/rsnapshot -c <%= @config %> <%= @level %> diff --git a/pkg/loomsen-rsnapshot-0.1.0/templates/rsnapshot.erb b/pkg/loomsen-rsnapshot-0.1.0/templates/rsnapshot.erb new file mode 100644 index 0000000..62ceadc --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/templates/rsnapshot.erb @@ -0,0 +1,144 @@ +# This file is being managed by puppet +# Module 'rsnaphost' + +config_version <%= @config_version %> +snapshot_root <%= @snapshot_root %> +<% if @no_create_root != '' -%> +no_create_root <%= @no_create_root %> +<% end -%> +cmd_rsync <%= @cmd_rsync %> +<% if @cmd_cp != '' -%> +cmd_cp <%= @cmd_cp %> +<% end -%> +<% if @cmd_rm != '' -%> +cmd_rm <%= @cmd_rm %> +<% end -%> +<% if @cmd_ssh != '' -%> +cmd_ssh <%= @cmd_ssh %> +<% end -%> +<% if @cmd_logger != '' -%> +cmd_logger <%= @cmd_logger %> +<% end -%> +<% if @cmd_du != '' -%> +cmd_du <%= @cmd_du %> +<% end -%> +<% if @cmd_rsnapshot_diff != '' -%> +cmd_rsnapshot_diff <%= @cmd_rsnapshot_diff %> +<% end -%> +<% if @cmd_preexec != '' -%> +cmd_preexec <%= @cmd_preexec %> +<% end -%> +<% if @cmd_postexec != '' -%> +cmd_postexec <%= @cmd_postexec %> +<% end -%> +<% if @use_lvm != '' -%> +<% if @linux_lvm_cmd_lvcreate -%> +linux_lvm_cmd_lvcreate <%= @linux_lvm_cmd_lvcreate %> +<% end -%> +<% if @linux_lvm_cmd_lvremove != '' -%> +linux_lvm_cmd_lvremove <%= @linux_lvm_cmd_lvremove %> +<% end -%> +<% if @linux_lvm_cmd_mount != '' -%> +linux_lvm_cmd_mount <%= @linux_lvm_cmd_mount %> +<% end -%> +<% if @linux_lvm_cmd_umount != '' -%> +linux_lvm_cmd_umount <%= @linux_lvm_cmd_umount %> +<% end -%> +<% end -%> +######################################### +# BACKUP INTERVALS # +# Must be unique and in ascending order # +# i.e. hourly, daily, weekly, etc. # +######################################### +<%if @interval != '' -%> +<% @interval.each_pair do |name, time| -%> +interval <%= name %> <%= time %> +<% end -%> +<% else %> +<% @retain.each_pair do |name, time| -%> +retain <%= name %> <%= time %> +<% end -%> +<% end -%> +verbose <%= @verbose %> +loglevel <%= @loglevel %> +<% if @logfile != '' -%> +logfile <%= @logfile %> +<% end -%> +<% if @lockfile != '' -%> +lockfile <%= @lockfile %> +<% end -%> +<% if @stop_on_stale_lockfile != '' -%> +stop_on_stale_lockfile <%= @stop_on_stale_lockfile %> +<%end-%> +<% if @rsync_short_args != '' -%> +rsync_short_args <%= @rsync_short_args %> +<% end -%> +<% if @rsync_long_args != '' -%> +rsync_long_args <%= @rsync_long_args %> +<% end -%> +<% if @ssh_args != '' -%> +ssh_args <%= @ssh_args %> +<% end -%> +<% if @du_args != '' -%> +du_args <%= @du_args %> +<% end -%> +<% if @one_fs != '' %> +one_fs <%= @one_fs_num %> +<% end -%> +<% if @include != '' %> +<% @include.each do |pattern| -%> +include <%= pattern %> +<% end -%> +<%end-%> +<% if @exclude != '' %> +<% @exclude.each do |pattern| -%> +exclude <%= pattern %> +<% end -%> +<%end-%> +<% if @include_file != '' -%> +include_file <%= @include_file %> +<% end -%> +<% if @exclude_file != '' -%> +exclude_file <%= @exclude_file %> +<% end -%> +<% if @link_dest != '' -%> +link_dest <%= @link_dest_num %> +<% end -%> +<% if @sync_first != '' -%> +sync_first <%= @sync_first_num %> +<% end -%> +<% if @use_lazy_deletes != '' -%> +use_lazy_deletes <%= @use_lazy_deletes_num %> +<% end -%> +<% if @rsync_numtries != '' -%> +rsync_numtries <%= @rsync_numtries %> +<% end -%> +<% if @use_lvm != '' -%> +<% if @linux_lvm_snapshotsize -%> +linux_lvm_snapshotsize <%= @linux_lvm_snapshotsize %> +<% end -%> +<% if @linux_lvm_snapshotname != '' -%> +linux_lvm_snapshotname <%= @linux_lvm_snapshotname %> +<% end -%> +<% if @linux_lvm_vgpath != '' -%> +linux_lvm_vgpath <%= @linux_lvm_vgpath %> +<% end -%> +<% if @linux_lvm_mountpath != '' -%> +linux_lvm_mountpath <%= @linux_lvm_mountpath %> +<% end -%> +<% end -%> +<% @backups.each_pair do |source, dest| -%> +<% if @host == 'localhost' -%> +backup <%= source %> <%=dest%> +<% elsif @backup_user != '' -%> +backup <%= @backup_user %>@<%=@host%>:<%= source %> <%=dest%> +<% else -%> +backup <%=@host%>:<%= source %> <%=dest%> +<% end -%> +<% end -%> +<% if @backup_scripts != '' -%> +<% @backup_scripts.each_pair do |source, dest| -%> +backup_script <%= source %> <%= dest %> +<% end -%> +<%end-%> + diff --git a/pkg/loomsen-rsnapshot-0.1.0/tests/init.pp b/pkg/loomsen-rsnapshot-0.1.0/tests/init.pp new file mode 100644 index 0000000..e5a32f6 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.0/tests/init.pp @@ -0,0 +1,12 @@ +# The baseline for module testing used by Puppet Labs is that each manifest +# should have a corresponding test manifest that declares that class or defined +# type. +# +# Tests are then run by using puppet apply --noop (to check for compilation +# errors and view a log of events) or by fully applying the test in a virtual +# environment (to compare the resulting system state to the desired state). +# +# Learn more about module testing here: +# http://docs.puppetlabs.com/guides/tests_smoke.html +# +include rsnapshot diff --git a/pkg/loomsen-rsnapshot-0.1.1.tar.gz b/pkg/loomsen-rsnapshot-0.1.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..052e6d1afa3ac08df158c267cc0506c272a9672d GIT binary patch literal 13348 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 ue$LPNIX~y;{G6ZjbAHax`8hx5=lq<-- many more --><8 -- +Using rspec-system-puppet (2.2.0) +Using serverspec (0.6.3) +Using rspec-system-serverspec (1.0.0) +Using bundler (1.3.5) +Your bundle is complete! +Use `bundle show [gemname]` to see where a bundled gem is installed. +``` + +NOTE some systems may require you to run this command with sudo. + +If you already have those gems installed, make sure they are up-to-date: + +```shell +% bundle update +``` + +With all dependencies in place and up-to-date we can now run the tests: + +```shell +% rake spec +``` + +This will execute all the [rspec tests](http://rspec-puppet.com/) tests +under [spec/defines](./spec/defines), [spec/classes](./spec/classes), +and so on. rspec tests may have the same kind of dependencies as the +module they are testing. While the module defines in its [Modulefile](./Modulefile), +rspec tests define them in [.fixtures.yml](./fixtures.yml). + +Some puppet modules also come with [beaker](https://github.com/puppetlabs/beaker) +tests. These tests spin up a virtual machine under +[VirtualBox](https://www.virtualbox.org/)) with, controlling it with +[Vagrant](http://www.vagrantup.com/) to actually simulate scripted test +scenarios. In order to run these, you will need both of those tools +installed on your system. + +You can run them by issuing the following command + +```shell +% rake spec_clean +% rspec spec/acceptance +``` + +This will now download a pre-fabricated image configured in the [default node-set](./spec/acceptance/nodesets/default.yml), +install puppet, copy this module and install its dependencies per [spec/spec_helper_acceptance.rb](./spec/spec_helper_acceptance.rb) +and then run all the tests under [spec/acceptance](./spec/acceptance). + +Writing Tests +------------- + +XXX getting started writing tests. + +Additional Resources +==================== + +* [General GitHub documentation](http://help.github.com/) + +* [GitHub pull request documentation](http://help.github.com/send-pull-requests/) + diff --git a/pkg/loomsen-rsnapshot-0.1.1/Gemfile b/pkg/loomsen-rsnapshot-0.1.1/Gemfile new file mode 100644 index 0000000..9016155 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/Gemfile @@ -0,0 +1,32 @@ +source ENV['GEM_SOURCE'] || 'https://rubygems.org' + +group :development, :unit_tests do + gem 'rspec-core', '~> 3.1.7', :require => false + gem 'rspec-puppet', '~> 2.1', :require => false + gem 'puppetlabs_spec_helper', :require => false + gem 'simplecov', :require => false + gem 'puppet_facts', :require => false + gem 'json', :require => false + gem 'metadata-json-lint', :require => false + gem 'puppet-lint', '< 1.1.0', :require => false +end + +group :system_tests do + gem 'beaker-rspec', :require => false + gem 'serverspec', :require => false + gem 'beaker-puppet_install_helper', :require => false +end + +if facterversion = ENV['FACTER_GEM_VERSION'] + gem 'facter', facterversion, :require => false +else + gem 'facter', :require => false +end + +if puppetversion = ENV['PUPPET_GEM_VERSION'] + gem 'puppet', puppetversion, :require => false +else + gem 'puppet', :require => false +end + +# vim:ft=ruby diff --git a/pkg/loomsen-rsnapshot-0.1.1/README.md b/pkg/loomsen-rsnapshot-0.1.1/README.md new file mode 100644 index 0000000..1dc32b5 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/README.md @@ -0,0 +1,305 @@ +# rsnapshot + +#### Table of Contents + +1. [Overview](#overview) +2. [Module Description - What the module does and why it is useful](#module-description) + * [Notes](#notes) +3. [Setup - The basics of getting started with rsnapshot](#setup) + * [What rsnapshot affects](#what-rsnapshot-affects) + * [Setup requirements](#setup-requirements) + * [Getting started with rsnapshot](#getting-started) +4. [Configuration - options and additional functionality](#configuration) + * [Examples](#examples) + * [More Options](#more-options) +5. [Reference - An under-the-hood peek at what the module is doing and how](#reference) +5. [Limitations - OS compatibility, etc.](#limitations) +6. [Development - Guide for contributing to the module](#development) +7. [Editors](#editors) +8. [Contributors](#contributors) + +## Overview + +The rsnapshot module installs, configures and manages rsnapshot on a dedicated backup server. + +## Module Description +The rsnapshot module installs, configures and manages rsnapshot on a dedicated backup server. It allows to set up a centralized Backup Server for all your nodes. +For the cron setup, the module will pick random time entries for the crons from an Array or a Range of time. For how to configure this, [please see below](#more-options) + +### Notes +This module is best used with an ENC like hiera. It will make your config much easier to read and to maintain. Check the examples to see what I mean. + +## Setup + +### What rsnapshot affects + +* This module will install the rsnapshot package on your system +* This module will manage the rsnapshot config on your system +* This module will manage cron entries for your configured nodes + +### Setup Requirements + +On CentOS Systems this module requires the stahnma-epel module. Also you will need to have rsync installed on all nodes to be backed up. +It will create repeatable random cron entries from a configurable timerange for all hosts. + +### Getting Started + +You will need to pass the nodenames to be backed up at least. +This will pickup all defaults and add localhost to the backups: + + +```puppet +class { '::rsnapshot': + hosts => { + 'localhost' => {}, + } +} +``` + +## Configuration +Here are some more elaborate examples of what you can do with this module. + +### Examples +This will backup localhost with defaults. It will disable the default backup locations for example.com +and just backup '/var' for example.com. +```puppet +class { '::rsnapshot': + hosts => { + 'localhost' => {}, + 'example.com' => { + backup_defaults => false, + backup => { + '/var/' => './' + } + } + } +} +``` +The same in hiera: +```yaml +--- +classes: rsnapshot +rsnapshot::hosts: + localhost: + example.com: + backup_defaults: false + backup: + '/var/': './' +``` + + + +A more complete hiera example: +```yaml +--- +classes: + - rsnapshot + +# override default backup dirs for all hosts: +rsnapshot::default_backup: + '/etc': './' + '/usr/local': './' + '/home': './' + +# configure hosts to be backed up +rsnapshot::hosts: +# pick all defaults for localhost + localhost: +# add futher backups for node foo.example.com (additional to default_backup) and use a different snapshot root + foo.example.com: + backup: + '/foo': './' + '/bar': './' + '/baz': './misc' + snapshot_root: '/tmp/rsnapshot' +# all defaults + foo1.example.com: + foo2: +# disable default backup dirs and just backup /var for node bar1 +# also set the minute to 0-10 for daily cron (note: this is not particularly useful, it's just meant to document the features) +# lastly set the range of hours to pick a random hour from (the cron for bar1 will have hour set to something between 1 and 5) + bar1: + backup_defaults: false + backup: + '/var': './var' + cron: + 'daily': + 'minute': '0-10' + 'hour': '1..5' + + +``` + + + +### More options +The defaults are pretty reasonable, I hope. However, you may override pretty much anything. Available parameters are discussed below. + +#### Specials +As mentioned, this module will generate random time entries for your hosts. The random number generator is hashed with hostname and backup_level, so the randomness will be repeatable per host.level. This is important so puppet won't override the crons with each run. +You may specify time ranges as follows: + * default cron syntax (1-10, '*/5', 5) + * an array with allowed values, for example, if you want the backup for a host to run between 1am and 5am, you would override the hours setting for the host in question. +in hiera this would look like: (Explanation see below) +```yaml +rsnapshot::hosts: + example.com: + cron: + 'daily': + 'minute': '1' + 'hour': '1..5' +``` +This will create the rsnapshot config using defaults from params.pp, but set the minute of the daily backup to '1' and the hour to something random between 1 and 5. +So it would look something like: +``` +1 4 * * * foo daily +``` +or maybe +``` +1 2 * * * foo daily +``` +## Reference + +### Classes + +#### Public Classes +* rsnapshot: Main class, includes all other classes. + +####Private Classes + +* rsnapshot::install: Handles the packages. +* rsnapshot::config: Handles configuration and cron files. +* rsnapshot::params: default values. + +### Functions +####`assert_empty_hash` +Sets an empty value to a hash (we need this so a loop doesn't break if just a hostname is given to pick up all defaults. + +####`pick_undef` +Like pick but returns undef values. + +####`rand_from_array` +Takes an Integer, a String or an Array as input, and returns a random entry from the array (or just the String/Integer) + +### Parameters + +The following parameters are available in the `::rsnapshot` class: + +####`$hosts` +Hash containing the hosts to be backed up and optional overrides per host +####`$conf_d` +The place where the configs will be dropped (Default: /etc/rsnapshot (will be created if it doesn't exist)) +####`$backup_user` +The user to run the backup scripts as (Default: root, also the user used for ssh connections, if you change this make sure you have proper key deployed and the user exists in the nodes to be backed up.) +####`$package_name` +Default: rsnapshot +####`$package_ensure` +Default: present +####`$cron_dir` +Directory to drop the cron files to. Crons will be created per host. (Default: /etc/cron.d) +####`$backup_levels` +Array containing the backup levels (hourly, daily, weekly, monthly) +Configure the backup_levels (valid per host and global, so you may either set: rsnapshot::backup_levels for all hosts or override default backup_levels for specific hosts) +####`$backup_defaults` +Boolean. Backup default backup dirs or not. +####`$cron` +Hash. Set time ranges for different backup levels. +Hash is of the form: +```puppet +cron =>{ + daily => { + minute => param, + hour => param, + } + weekly => { + minute => param, + hour => param, + } + {...} +} +``` +####`$snapshot_root` +global. the directory holding your backups. you will end up with a structure like: +``` +/backup/ +├── example.com +│   ├── daily.0 +│   ├── daily.1 +│   ├── daily.2 +│   ├── daily.3 +│   ├── weekly.0 +│   ├── weekly.1 +│   ├── weekly.2 +│   └── weekly.3 +└── localhost + ├── daily.0 + ├── daily.1 + ├── daily.2 + └── weekly.0 +``` + +####`$default_backup` +The default backup directories (may be set per host, even though there is not much sense in doing so) +Default is: +```puppet +default_backup => { + '/etc' => './', + '/home' => './', +} +``` +### rsnapshot configuration variables +Please read up on the following in the [rsnapshot manpage](http://linux.die.net/man/1/rsnapshot) +####`$cmd_cp` +####`$cmd_rm` +####`$cmd_rsync` +####`$cmd_ssh` +####`$cmd_logger` +####`$cmd_du` +####`$cmd_rsnapshot_diff` +####`$cmd_preexec` +####`$cmd_postexec` +####`$use_lvm` +####`$linux_lvm_cmd_lvcreate` +####`$linux_lvm_cmd_lvremove` +####`$linux_lvm_cmd_mount` +####`$linux_lvm_cmd_umount` +####`$linux_lvm_snapshotsize` +####`$linux_lvm_snapshotname` +####`$linux_lvm_vgpath` +####`$linux_lvm_mountpath` +####`$logpath` +####`$logfile` +####`$lockpath` +####`$no_create_root` +####`$verbose` +####`$loglevel` +####`$stop_on_stale_lockfile` +####`$rsync_short_args` +####`$rsync_long_args` +####`$ssh_args` +####`$du_args` +####`$one_fs` +####`$retain` +####`$interval` +####`$include` +####`$exclude` +####`$include_file` +####`$exclude_file` +####`$link_dest` +####`$sync_first` +####`$rsync_numtries` +####`$use_lazy_deletes` +####`$backup_scripts` + +## Limitations +Currently, this module support CentOS, Fedora (with the bloonix CentOS Repo), Ubuntu and Debian. + +## Development +I have limited access to resources and time, so if you think this module is useful, like it, hate it, want to make it better or +want it off the face of the planet, feel free to get in touch with me. + +## Editors +Norbert Varzariu (loomsen) + +## Contributors +Please see the [list of contributors.](https://github.com/loomsen/puppet-bloonix_agent/graphs/contributors) diff --git a/pkg/loomsen-rsnapshot-0.1.1/Rakefile b/pkg/loomsen-rsnapshot-0.1.1/Rakefile new file mode 100644 index 0000000..8c9b63e --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/Rakefile @@ -0,0 +1,23 @@ +require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet-lint/tasks/puppet-lint' + +PuppetLint.configuration.log_format = "%{path}:%{linenumber}:%{check}:%{KIND}:%{message}" +PuppetLint.configuration.fail_on_warnings = true +PuppetLint.configuration.send('relative') +PuppetLint.configuration.send('disable_80chars') +PuppetLint.configuration.send('disable_class_inherits_from_params_class') +PuppetLint.configuration.ignore_paths = ["vendor/**/*.pp", "spec/**/*.pp", "pkg/**/*.pp"] + +desc "Validate manifests, templates, and ruby files" +task :validate do + Dir['manifests/**/*.pp'].each do |manifest| + sh "puppet parser validate --noop #{manifest}" + end + Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file| + sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/ + end + Dir['templates/**/*.erb'].each do |template| + sh "erb -P -x -T '-' #{template} | ruby -c" + end +end + diff --git a/pkg/loomsen-rsnapshot-0.1.1/TODO b/pkg/loomsen-rsnapshot-0.1.1/TODO new file mode 100644 index 0000000..e69de29 diff --git a/pkg/loomsen-rsnapshot-0.1.1/checksums.json b/pkg/loomsen-rsnapshot-0.1.1/checksums.json new file mode 100644 index 0000000..c5d3b1a --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/checksums.json @@ -0,0 +1,26 @@ +{ + "CONTRIBUTING.md": "1d1592146aac11936cfda288a04df0e0", + "Gemfile": "1291530f9171164c98d314b359bf1d94", + "README.md": "f8aa8b62e3137cd2e42b99d853b32c0b", + "Rakefile": "53164c731c7c0dee279cbe74fce9371e", + "TODO": "d41d8cd98f00b204e9800998ecf8427e", + "lib/puppet/parser/functions/assert_empty_hash.rb": "69fbc5b1d1f85fdd4d4266154d2f074c", + "lib/puppet/parser/functions/pick_undef.rb": "227f605e6442d77311cc7faa77c1d293", + "lib/puppet/parser/functions/rand_from_array.rb": "bd6e47f00da29df03f529cacb12635ea", + "manifests/config.pp": "6d84bac803bf0b143d3d75837a038cea", + "manifests/cron.pp": "e2cde5fdb7dd677e0d97308f55fae765", + "manifests/init.pp": "714aa55c4e1a495b522075e77c334fdc", + "manifests/install.pp": "fb9ade1c118a3ea8c124584418bd45ad", + "manifests/params.pp": "de10018211fa504d698fa980d2f1a65b", + "metadata.json": "9e568b31809ee9caba45a3ae805e9e0d", + "spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml": "6e8a9cb235318d510f5931e73ac07c05", + "spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml": "d170363003b078c180a7263f4b34f53c", + "spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml": "2114f58c30427f4c57e1140b1cbdcab9", + "spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml": "07eedc8f2975ab1c5a5ce28133ef8017", + "spec/classes/init_spec.rb": "12aea61c02cc639c7f42a7e988639159", + "spec/spec.opts": "a600ded995d948e393fbe2320ba8e51c", + "spec/spec_helper.rb": "f3f775caa765cd5ebec8d307f2b07fc5", + "templates/cron.erb": "e9455ec3d623a67de0b3fa62255199f7", + "templates/rsnapshot.erb": "28250af764432307b330d1ec579afcca", + "tests/init.pp": "289ce3c27eea72b5c648097a23bcea61" +} \ No newline at end of file diff --git a/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/assert_empty_hash.rb b/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/assert_empty_hash.rb new file mode 100644 index 0000000..fb90c2c --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/assert_empty_hash.rb @@ -0,0 +1,18 @@ +module Puppet::Parser::Functions +newfunction(:assert_empty_hash, :type => :rvalue, :doc => <<-EOS +This function checks an input struct for undefined hashes in key => hash and assigns {}. This is only a helper function to make a hash.each work if one of the values is undefined +EOS +)do |args| + fail "Must receive one argument." if args.empty? + args.each do |arg| + h = Hash.new + arg.each_pair do |host, hash| + unless hash.is_a? Hash + hash = {} + end + h[host] = hash + end + return h + end + end +end diff --git a/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/pick_undef.rb b/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/pick_undef.rb new file mode 100644 index 0000000..f62cd78 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/pick_undef.rb @@ -0,0 +1,15 @@ +module Puppet::Parser::Functions +newfunction(:pick_undef, :type => :rvalue, :doc => <<-EOS +This function is similar to pick_default, but will return or undefined values. +EOS +) do |args| + fail "Must receive at least one argument." if args.empty? + default = args.last + args = args[0..-2].compact +# args.delete(:undef) +# args.delete(:undefined) +# args.delete("") + args << default + return args[0] + end +end diff --git a/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/rand_from_array.rb b/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/rand_from_array.rb new file mode 100644 index 0000000..416c463 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/lib/puppet/parser/functions/rand_from_array.rb @@ -0,0 +1,37 @@ +module Puppet::Parser::Functions +newfunction(:rand_from_array, :type => :rvalue, :doc => <<-EOS +This function takes either an int or an array as input and returns the int or a +random element from the array +EOS +)do |args| + fail "Must receive two argument." if args.empty? +#++ this works if the input is an array + # return args.sample +# +++++++++++++++++++++++++++++++++++++ +# args.flatten! + params = [] + params << args[0] + params.flatten! + arr = [] + salt = args[1].sum % 60 + rnd = Random.new(salt) +# rnd = Random.new() + params.each do |key| + if key.is_a?(String) and key =~ /\d\.\.\d/ + k = key.split('..') + r = Range.new(k[0],k[1]).to_a + arr << r + arr.flatten! + elsif key.is_a?(String) + arr << key + arr.flatten! + elsif key.is_a?(Integer) + arr << key.to_s + arr.flatten! + end + end + last_i = arr.length - 1 + return arr[rnd.rand(0..last_i)] + +end +end diff --git a/pkg/loomsen-rsnapshot-0.1.1/manifests/config.pp b/pkg/loomsen-rsnapshot-0.1.1/manifests/config.pp new file mode 100644 index 0000000..ab4af20 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/manifests/config.pp @@ -0,0 +1,148 @@ +# == Class: rsnapshot::config +# +# manage host configs +class rsnapshot::config ( + $hosts = $rsnapshot::hosts, + $cron_dir = $rsnapshot::cron_dir, +) { + # these are global settings, no point in setting them per host + $config_version = $rsnapshot::params::config_version + $lockpath = pick($rsnapshot::lockpath, $rsnapshot::params::config_lockpath) + $conf_d = pick($rsnapshot::conf_d, $rsnapshot::params::conf_d) + $snapshot_root = pick($hosts['snapshot_root'], $rsnapshot::params::config_snapshot_root) + # make sure lock path and conf path exist + file { $conf_d: + ensure => 'directory', + } + file { $lockpath: + ensure => 'directory', + } + file { $cron_dir: + ensure => 'directory', + } + file { $snapshot_root: + ensure => 'directory', + } + # custom function, if only a hostname is given as a param, this is an empty hash + # the next loop would break as puppet does not allow to reassign variables + # the function checks $hosts for elements like: + # { foo => } and converts those to { foo => {} } + $hosts_clean = assert_empty_hash($hosts) + + $hosts_clean.each |String $host, Hash $hash | { + $backup_user = pick($hash['backup_user'], $rsnapshot::params::config_backup_user) + $default_backup_dirs = pick($rsnapshot::default_backup, $rsnapshot::params::config_default_backup) + $backup_levels = pick($hash['backup_levels'], $rsnapshot::params::config_backup_levels, 'weekly') + $backup = $hash['backup'] + $backup_defaults = pick($hash['backup_defaults'], $rsnapshot::params::config_backup_defaults) + $cmd_cp = pick($hash['cmd_cp'], $rsnapshot::params::config_cmd_cp) + $cmd_rm = pick($hash['cmd_rm'], $rsnapshot::params::config_cmd_rm) + $cmd_rsync = pick($hash['cmd_rsync'], $rsnapshot::params::config_cmd_rsync) + $cmd_ssh = pick($hash['cmd_ssh'], $rsnapshot::params::config_cmd_ssh) + $cmd_logger = pick($hash['cmd_logger'], $rsnapshot::params::config_cmd_logger) + $cmd_du = pick($hash['cmd_du'], $rsnapshot::params::config_cmd_du) + $cmd_rsnapshot_diff = pick_undef($hash['cmd_rsnapshot_diff'], $rsnapshot::params::config_cmd_rsnapshot_diff) + $cmd_preexec = pick_undef($hash['cmd_preexec'], $rsnapshot::params::config_cmd_preexec) + $cmd_postexec = pick_undef($hash['cmd_postexec'], $rsnapshot::params::config_cmd_postexec) + $use_lvm = pick_undef($hash['use_lvm'], $rsnapshot::params::config_use_lvm) + $linux_lvm_cmd_lvcreate = pick_undef($hash['linux_lvm_cmd_lvcreate'], $rsnapshot::params::config_linux_lvm_cmd_lvcreate) + $linux_lvm_cmd_lvremove = pick_undef($hash['linux_lvm_cmd_lvremove'], $rsnapshot::params::config_linux_lvm_cmd_lvremove) + $linux_lvm_cmd_mount = pick_undef($hash['linux_lvm_cmd_mount'], $rsnapshot::params::config_linux_lvm_cmd_mount) + $linux_lvm_cmd_umount = pick_undef($hash['linux_lvm_cmd_umount'], $rsnapshot::params::config_linux_lvm_cmd_umount) + $linux_lvm_snapshotsize = pick_undef($hash['linux_lvm_snapshotsize'], $rsnapshot::params::config_linux_lvm_snapshotsize) + $linux_lvm_snapshotname = pick_undef($hash['linux_lvm_snapshotname'], $rsnapshot::params::config_linux_lvm_snapshotname) + $linux_lvm_vgpath = pick_undef($hash['linux_lvm_vgpath'], $rsnapshot::params::config_linux_lvm_vgpath) + $linux_lvm_mountpath = pick_undef($hash['linux_lvm_mountpath'], $rsnapshot::params::config_linux_lvm_mountpath) + $no_create_root = pick_undef($hash['no_create_root'], $rsnapshot::params::config_no_create_root) + $logpath = pick($hash['logpath'], $rsnapshot::logpath, $rsnapshot::params::config_logpath) + $verbose = pick($hash['verbose'], $rsnapshot::params::config_verbose) + $loglevel = pick($hash['loglevel'], $rsnapshot::params::config_loglevel) + $stop_on_stale_lockfile = pick_undef($hash['stop_on_stale_lockfile'], $rsnapshot::params::config_stop_on_stale_lockfile) + $rsync_short_args = pick($hash['rsync_short_args'], $rsnapshot::params::config_rsync_short_args) + $rsync_long_args = pick_undef($hash['rsync_long_args'], $rsnapshot::params::config_rsync_long_args) + $ssh_args = pick_undef($hash['ssh_args'], $rsnapshot::params::config_ssh_args) + $du_args = pick_undef($hash['du_args'], $rsnapshot::params::config_du_args) + $one_fs = pick_undef($hash['one_fs'], $rsnapshot::params::config_one_fs) + $interval = pick($hash['interval'], $rsnapshot::params::config_interval) + $retain = pick_undef($hash['retain'], $rsnapshot::params::config_retain) + $include = pick_undef($hash['include'], $rsnapshot::params::config_include) + $exclude = pick_undef($hash['exclude'], $rsnapshot::params::config_exclude) + $include_file = pick_undef($hash['include_file'], $rsnapshot::params::config_include_file) + $exclude_file = pick($hash['exclude_file'], $rsnapshot::params::config_exclude_file, "${conf_d}/${host}.exclude") + $link_dest = pick_undef($hash['link_dest'], $rsnapshot::params::config_link_dest) + $sync_first = pick_undef($hash['sync_first'], $rsnapshot::params::config_sync_first) + $use_lazy_deletes = pick_undef($hash['use_lazy_deletes'], $rsnapshot::params::config_use_lazy_deletes) + $rsync_numtries = pick_undef($hash['rsync_numtries'], $rsnapshot::params::config_rsync_numtries) + $backup_scripts = pick_undef($hash['backup_scripts'], $rsnapshot::params::config_backup_scripts) + + $snapshot_dir = "${config_snapshot_root}/${host}" + $config = "${conf_d}/${host}.rsnapshot.conf" + $lockfile = "${lockpath}/${host}.pid" + $logfile = "${logpath}/${host}.log" + + # fail if $backup_defaults is set to false and no $host[backup] defined + if ! $backup_defaults and ! $backup { + fail("==> Configuration error: backup_defaults is ${backup_defaults} and backup definitions for this host don't exist <==") + } + + # merge the backup hashes to one if backup_default is set (defaults to true) + if $backup_defaults { + $backups = merge($backup, $default_backup_dirs) + } else { + $backups = $backup + } + + # one of both interval or retain must be present + if ! ( $interval and $retain ) { + $interval = pick($hash['interval'], $rsnapshot::params::config_interval) + } + # rsnapshot wants numeric values + if $link_dest { + $link_dest_num = bool2num($link_dest) + } + if $sync_first { + $sync_first_num = bool2num($sync_first) + } + if $use_lazy_deletes { + $use_lazy_deletes_num = bool2num($use_lazy_deletes) + } + + file { $exclude_file: + ensure => 'file', + } + file { $config: + content => template('rsnapshot/rsnapshot.erb') + } + $cronfile = "${cron_dir}/${host}" + concat { "${cronfile}": + } + $backup_levels.each |String $level| { + if validate_hash($hash) { + # allow to globally override ranges, create random numbers for backup_levels daily, weekly, monthly + if has_key($host, 'cron'){ + $c_min = pick($host['cron'][$level]['minute'], $rsnapshot::params::cron[$level]['minute'], '*') + $c_hour = pick($host['cron'][$level]['hour'], $rsnapshot::params::cron[$level]['hour'], '*') + $c_monthday = pick($host['cron'][$level]['monthday'], $rsnapshot::params::cron[$level]['monthday'], '*') + $c_month = pick($host['cron'][$level]['month'], $rsnapshot::params::cron[$level]['month'], '*') + $c_weekday = pick($host['cron'][$level]['weekday'], $rsnapshot::params::cron[$level]['weekday'], '*') + } + } else { + $c_min = $rsnapshot::params::cron[$level]['minute'] + $c_hour = $rsnapshot::params::cron[$level]['hour'] + $c_monthday = $rsnapshot::params::cron[$level]['monthday'] + $c_month = $rsnapshot::params::cron[$level]['month'] + $c_weekday = $rsnapshot::params::cron[$level]['weekday'] + } + $minute = rand_from_array($c_min, "${host}.${level}") + $hour = rand_from_array($c_hour, "${host}.${level}") + $monthday = rand_from_array($c_monthday, "${host}.${level}") + $month = rand_from_array($c_month, "${host}.${level}") + $weekday = rand_from_array($c_weekday, "${host}.${level}") + concat::fragment { "${host}.${level}": + target => "${cronfile}", + content => template('rsnapshot/cron.erb'), + } + } + } +} + diff --git a/pkg/loomsen-rsnapshot-0.1.1/manifests/cron.pp b/pkg/loomsen-rsnapshot-0.1.1/manifests/cron.pp new file mode 100644 index 0000000..0b2a868 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/manifests/cron.pp @@ -0,0 +1,7 @@ +# this class sets up cron +# * todo +# let the user specify a range of hours and randomize cron creation in this range use rand for #args and return arg[rand] + +class rsnapshot::cron { + +} diff --git a/pkg/loomsen-rsnapshot-0.1.1/manifests/init.pp b/pkg/loomsen-rsnapshot-0.1.1/manifests/init.pp new file mode 100644 index 0000000..0c26dfd --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/manifests/init.pp @@ -0,0 +1,23 @@ +# == Class: rsnapshot +# +# Manages rsnapshot. +# +# === Parameters +# +class rsnapshot ( + $hosts = $rsnapshot::params::hosts, + $conf_d = $rsnapshot::params::conf_d, + $logpath = $rsnapshot::params::config_logpath, + $lockpath = $rsnapshot::params::config_lockpath, + $default_backup = $rsnapshot::params::config_default_backup, + $package_name = $rsnapshot::params::package_name, + $package_ensure = $rsnapshot::params::package_ensure, +) inherits rsnapshot::params { + if $hosts { + class { 'rsnapshot::install': }-> + class { 'rsnapshot::config': } + contain 'rsnapshot::install' + contain 'rsnapshot::config' + } +} + diff --git a/pkg/loomsen-rsnapshot-0.1.1/manifests/install.pp b/pkg/loomsen-rsnapshot-0.1.1/manifests/install.pp new file mode 100644 index 0000000..0758784 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/manifests/install.pp @@ -0,0 +1,14 @@ +# == Class: rsnapshot::install +# +# Installs the rsnapshot package. +class rsnapshot::install inherits rsnapshot { + case $::operatingsystem { + /^CentOS$/: { include epel } + default: {} + } + package { $rsnapshot::package_name: + ensure => $rsnapshot::package_ensure, + } + +} + diff --git a/pkg/loomsen-rsnapshot-0.1.1/manifests/params.pp b/pkg/loomsen-rsnapshot-0.1.1/manifests/params.pp new file mode 100644 index 0000000..d4cd5c4 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/manifests/params.pp @@ -0,0 +1,94 @@ +# == Class: rsnapshot +# +# default params +class rsnapshot::params { + $hosts = undef + $conf_d = '/etc/rsnapshot' # the place where the host specific configs are stored + $config_backup_user = 'root' + $package_name = 'rsnapshot' + $package_ensure = 'present' + $cron_dir = '/etc/cron.d' + $config_backup_levels = [ 'daily', 'weekly', ] + $config_backup_defaults = true + $config_version = '1.2' + $config_cmd_cp = '/bin/cp' + $config_cmd_rm = '/bin/rm' + $config_cmd_rsync = '/usr/bin/rsync' + $config_cmd_ssh = '/usr/bin/ssh' + $config_cmd_logger = '/usr/bin/logger' + $config_cmd_du = '/usr/bin/du' + $config_cmd_rsnapshot_diff = '/usr/bin/rsnapshot-diff' + $config_cmd_preexec = undef + $config_cmd_postexec = undef + $config_use_lvm = undef + $config_linux_lvm_cmd_lvcreate = undef # '/sbin/lvcreate' + $config_linux_lvm_cmd_lvremove = undef # '/sbin/lvremove' + $config_linux_lvm_cmd_mount = undef # '/sbin/mount' + $config_linux_lvm_cmd_umount = undef # '/sbin/umount' + $config_linux_lvm_snapshotsize = undef # '100M' + $config_linux_lvm_snapshotname = undef # 'rsnapshot' + $config_linux_lvm_vgpath = undef # '/dev' + $config_linux_lvm_mountpath = undef # '/mount/rsnapshot' + $config_logpath = '/var/log/rsnapshot' + $config_logfile = '/var/log/rsnapshot.log' # unused, we are logging to $logpath/$host.log + $config_lockpath = '/var/run/rsnapshot' + $config_snapshot_root = '/backup/' + $config_no_create_root = undef # bool, true or false + $config_verbose = '2' + $config_loglevel = '4' + $config_stop_on_stale_lockfile = undef # bool + $config_rsync_short_args = '-az' + $config_rsync_long_args = undef # defaults are --delete --numeric-ids --relative --delete-excluded + $config_ssh_args = undef + $config_du_args = undef + $config_one_fs = undef + $config_retain = { } + $config_interval = { + 'daily' => '7', + 'weekly' => '4', + 'monthly' => '6', + } + $config_include = [] + $config_exclude = [] + $config_include_file = undef + $config_exclude_file = undef + $config_link_dest = false + $config_sync_first = false + $config_rsync_numtries = 1 + $config_use_lazy_deletes = false + $config_default_backup = { + '/etc' => './', + '/home' => './', + } + $config_backup_scripts = {} + $cron = { + 'hourly' => { + 'minute' => '0..59', + 'hour' => '*', # you could also do: ['21..23','0..4','5'], + 'monthday' => '*', + 'month' => '*', + 'weekday' => '*', + }, + 'daily' => { + 'minute' => '0..59', + 'hour' => '0..23', # you could also do: ['21..23','0..4','5'], + 'monthday' => '*', + 'month' => '*', + 'weekday' => '*', + }, + 'weekly' => { + 'minute' => '0..59', + 'hour' => '0..23', # you could also do: ['21..23','0..4','5'], + 'monthday' => '*', + 'month' => '*', + 'weekday' => '0..6', + }, + 'monthly' => { + 'minute' => '0..59', + 'hour' => '0..23', # you could also do: ['21..23','0..4','5'], + 'monthday' => '0..28', + 'month' => '*', + 'weekday' => '*', + }, + } +} diff --git a/pkg/loomsen-rsnapshot-0.1.1/metadata.json b/pkg/loomsen-rsnapshot-0.1.1/metadata.json new file mode 100644 index 0000000..71eb9e8 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/metadata.json @@ -0,0 +1,69 @@ +{ + "name": "loomsen-rsnapshot", + "version": "0.1.1", + "author": "loomsen", + "summary": "Configures rsnapshot.", + "license": "Apache-2.0", + "source": "https://github.com/loomsen/puppet-rsnapshot", + "project_page": "https://github.com/loomsen/puppet-rsnapshot", + "issues_url": "https://github.com/loomsen/puppet-rsnapshot/issues", + "dependencies": [ + {"name":"puppetlabs-stdlib"}, + {"name":"stahnma-epel"} + ], + "data_provider": null, + "tags": [ + "rsnapshot", + "backup", + "rsync" + ], + "requirements": [ + { + "name": "pe", + "version_requirement": ">= 3.0.0" + }, + { + "name": "puppet", + "version_requirement": ">= 3.0.0" + } + ], + "operatingsystem_support": [ + { + "operatingsystem": "CentOS", + "operatingsystemrelease": [ + "5", + "6", + "7" + ] + }, + { + "operatingsystem": "Debian", + "operatingsystemrelease": [ + "6", + "7", + "8" + ] + }, + { + "operatingsystem": "Ubuntu", + "operatingsystemrelease": [ + "12.04", + "10.04", + "14.04" + ] + }, + { + "operatingsystem": "Fedora", + "operatingsystemrelease": [ + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" + ] + } + ] +} diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml new file mode 100644 index 0000000..890730a --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml @@ -0,0 +1,12 @@ +HOSTS: + ubuntu-1204-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-12.04-amd64 + hypervisor : docker + image: ubuntu:12.04 + # This stops the image from being deleted on completion, speeding up the process. + docker_preserve_image: true +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml new file mode 100644 index 0000000..d3c7e15 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-12.04-x86_64-vagrant.yml @@ -0,0 +1,10 @@ +HOSTS: + ubuntu-1204-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-12.04-amd64 + hypervisor : vagrant + box : puppetlabs/ubuntu-12.04-64-nocm +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml new file mode 100644 index 0000000..744e027 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml @@ -0,0 +1,12 @@ +HOSTS: + ubuntu-1404-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-14.04-amd64 + hypervisor : docker + image: ubuntu:14.04 + # This stops the image from being deleted on completion, speeding up the process. + docker_preserve_image: true +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml new file mode 100644 index 0000000..7188ccb --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml @@ -0,0 +1,10 @@ +HOSTS: + ubuntu-1404-x64: + default_apply_opts: + strict_variables: + platform: ubuntu-14.04-amd64 + hypervisor : vagrant + box : puppetlabs/ubuntu-14.04-64-nocm +CONFIG: + type: foss + log_level: debug diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/classes/init_spec.rb b/pkg/loomsen-rsnapshot-0.1.1/spec/classes/init_spec.rb new file mode 100644 index 0000000..d4615d2 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/classes/init_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' +describe 'rsnapshot' do + + {'Ubuntu' => 'Debian', 'Debian' => 'Debian'}.each do |system, family| + context "when on system #{system} no lvm" do + let :facts do + { + :osfamily => family, + :operatingsystem => system, + } + end + + it { should contain_class('rsnapshot') } + it { should contain_class('rsnapshot::install') } + it { should contain_class('rsnapshot::config') } + end + + context "when on system #{system} with lvm" do + let :facts do + { + :osfamily => family, + :operatingsystem => system, + } + end + + let(:params) { {:use_lvm => true} } + + it { should contain_class('rsnapshot') } + it { should contain_class('rsnapshot::install') } + it { should contain_class('rsnapshot::config') } + + it { + should contain_file('/etc/rsnapshot.conf').with_content(/^linux_lvm_((\w|_)+)\t(.*)$/) + } + end + end +end diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/spec.opts b/pkg/loomsen-rsnapshot-0.1.1/spec/spec.opts new file mode 100644 index 0000000..91cd642 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/spec.opts @@ -0,0 +1,6 @@ +--format +s +--colour +--loadby +mtime +--backtrace diff --git a/pkg/loomsen-rsnapshot-0.1.1/spec/spec_helper.rb b/pkg/loomsen-rsnapshot-0.1.1/spec/spec_helper.rb new file mode 100644 index 0000000..d4197d7 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/spec/spec_helper.rb @@ -0,0 +1,29 @@ +require 'puppetlabs_spec_helper/module_spec_helper' + +RSpec.configure do |c| + c.include PuppetlabsSpec::Files + + c.before :each do + # Ensure that we don't accidentally cache facts and environment + # between test cases. + Facter::Util::Loader.any_instance.stubs(:load_all) + Facter.clear + Facter.clear_messages + + # Store any environment variables away to be restored later + @old_env = {} + ENV.each_key {|k| @old_env[k] = ENV[k]} + + if Gem::Version.new(`puppet --version`) >= Gem::Version.new('3.5') + Puppet.settings[:strict_variables]=true + end + if ENV['PARSER'] + Puppet.settings[:parser]=ENV['PARSER'] + end + end + + c.after :each do + PuppetlabsSpec::Files.cleanup + end +end + diff --git a/pkg/loomsen-rsnapshot-0.1.1/templates/cron.erb b/pkg/loomsen-rsnapshot-0.1.1/templates/cron.erb new file mode 100644 index 0000000..5eb5e0e --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/templates/cron.erb @@ -0,0 +1 @@ +<%= @minute %> <%= @hour %> <%= @month %> <%= @monthday %> <%= @weekday %> root /usr/bin/rsnapshot -c <%= @config %> <%= @level %> diff --git a/pkg/loomsen-rsnapshot-0.1.1/templates/rsnapshot.erb b/pkg/loomsen-rsnapshot-0.1.1/templates/rsnapshot.erb new file mode 100644 index 0000000..62ceadc --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/templates/rsnapshot.erb @@ -0,0 +1,144 @@ +# This file is being managed by puppet +# Module 'rsnaphost' + +config_version <%= @config_version %> +snapshot_root <%= @snapshot_root %> +<% if @no_create_root != '' -%> +no_create_root <%= @no_create_root %> +<% end -%> +cmd_rsync <%= @cmd_rsync %> +<% if @cmd_cp != '' -%> +cmd_cp <%= @cmd_cp %> +<% end -%> +<% if @cmd_rm != '' -%> +cmd_rm <%= @cmd_rm %> +<% end -%> +<% if @cmd_ssh != '' -%> +cmd_ssh <%= @cmd_ssh %> +<% end -%> +<% if @cmd_logger != '' -%> +cmd_logger <%= @cmd_logger %> +<% end -%> +<% if @cmd_du != '' -%> +cmd_du <%= @cmd_du %> +<% end -%> +<% if @cmd_rsnapshot_diff != '' -%> +cmd_rsnapshot_diff <%= @cmd_rsnapshot_diff %> +<% end -%> +<% if @cmd_preexec != '' -%> +cmd_preexec <%= @cmd_preexec %> +<% end -%> +<% if @cmd_postexec != '' -%> +cmd_postexec <%= @cmd_postexec %> +<% end -%> +<% if @use_lvm != '' -%> +<% if @linux_lvm_cmd_lvcreate -%> +linux_lvm_cmd_lvcreate <%= @linux_lvm_cmd_lvcreate %> +<% end -%> +<% if @linux_lvm_cmd_lvremove != '' -%> +linux_lvm_cmd_lvremove <%= @linux_lvm_cmd_lvremove %> +<% end -%> +<% if @linux_lvm_cmd_mount != '' -%> +linux_lvm_cmd_mount <%= @linux_lvm_cmd_mount %> +<% end -%> +<% if @linux_lvm_cmd_umount != '' -%> +linux_lvm_cmd_umount <%= @linux_lvm_cmd_umount %> +<% end -%> +<% end -%> +######################################### +# BACKUP INTERVALS # +# Must be unique and in ascending order # +# i.e. hourly, daily, weekly, etc. # +######################################### +<%if @interval != '' -%> +<% @interval.each_pair do |name, time| -%> +interval <%= name %> <%= time %> +<% end -%> +<% else %> +<% @retain.each_pair do |name, time| -%> +retain <%= name %> <%= time %> +<% end -%> +<% end -%> +verbose <%= @verbose %> +loglevel <%= @loglevel %> +<% if @logfile != '' -%> +logfile <%= @logfile %> +<% end -%> +<% if @lockfile != '' -%> +lockfile <%= @lockfile %> +<% end -%> +<% if @stop_on_stale_lockfile != '' -%> +stop_on_stale_lockfile <%= @stop_on_stale_lockfile %> +<%end-%> +<% if @rsync_short_args != '' -%> +rsync_short_args <%= @rsync_short_args %> +<% end -%> +<% if @rsync_long_args != '' -%> +rsync_long_args <%= @rsync_long_args %> +<% end -%> +<% if @ssh_args != '' -%> +ssh_args <%= @ssh_args %> +<% end -%> +<% if @du_args != '' -%> +du_args <%= @du_args %> +<% end -%> +<% if @one_fs != '' %> +one_fs <%= @one_fs_num %> +<% end -%> +<% if @include != '' %> +<% @include.each do |pattern| -%> +include <%= pattern %> +<% end -%> +<%end-%> +<% if @exclude != '' %> +<% @exclude.each do |pattern| -%> +exclude <%= pattern %> +<% end -%> +<%end-%> +<% if @include_file != '' -%> +include_file <%= @include_file %> +<% end -%> +<% if @exclude_file != '' -%> +exclude_file <%= @exclude_file %> +<% end -%> +<% if @link_dest != '' -%> +link_dest <%= @link_dest_num %> +<% end -%> +<% if @sync_first != '' -%> +sync_first <%= @sync_first_num %> +<% end -%> +<% if @use_lazy_deletes != '' -%> +use_lazy_deletes <%= @use_lazy_deletes_num %> +<% end -%> +<% if @rsync_numtries != '' -%> +rsync_numtries <%= @rsync_numtries %> +<% end -%> +<% if @use_lvm != '' -%> +<% if @linux_lvm_snapshotsize -%> +linux_lvm_snapshotsize <%= @linux_lvm_snapshotsize %> +<% end -%> +<% if @linux_lvm_snapshotname != '' -%> +linux_lvm_snapshotname <%= @linux_lvm_snapshotname %> +<% end -%> +<% if @linux_lvm_vgpath != '' -%> +linux_lvm_vgpath <%= @linux_lvm_vgpath %> +<% end -%> +<% if @linux_lvm_mountpath != '' -%> +linux_lvm_mountpath <%= @linux_lvm_mountpath %> +<% end -%> +<% end -%> +<% @backups.each_pair do |source, dest| -%> +<% if @host == 'localhost' -%> +backup <%= source %> <%=dest%> +<% elsif @backup_user != '' -%> +backup <%= @backup_user %>@<%=@host%>:<%= source %> <%=dest%> +<% else -%> +backup <%=@host%>:<%= source %> <%=dest%> +<% end -%> +<% end -%> +<% if @backup_scripts != '' -%> +<% @backup_scripts.each_pair do |source, dest| -%> +backup_script <%= source %> <%= dest %> +<% end -%> +<%end-%> + diff --git a/pkg/loomsen-rsnapshot-0.1.1/tests/init.pp b/pkg/loomsen-rsnapshot-0.1.1/tests/init.pp new file mode 100644 index 0000000..e5a32f6 --- /dev/null +++ b/pkg/loomsen-rsnapshot-0.1.1/tests/init.pp @@ -0,0 +1,12 @@ +# The baseline for module testing used by Puppet Labs is that each manifest +# should have a corresponding test manifest that declares that class or defined +# type. +# +# Tests are then run by using puppet apply --noop (to check for compilation +# errors and view a log of events) or by fully applying the test in a virtual +# environment (to compare the resulting system state to the desired state). +# +# Learn more about module testing here: +# http://docs.puppetlabs.com/guides/tests_smoke.html +# +include rsnapshot