diff --git a/.gitignore b/.gitignore index 4be519e..49fe372 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,17 @@ .bundle/ .idea/ .project .travis/secrets.tar .vagrant/ .yardoc/ *.iml *.swn *.swo *.swp Gemfile.lock coverage/ +docs/ pkg/ spec/fixtures/ vendor/ log/ diff --git a/.travis.yml b/.travis.yml index b95bdfc..b20784b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,26 +1,26 @@ --- language: ruby cache: bundler before_install: rm Gemfile.lock || true -bundler_args: --without development system_tests +bundler_args: --without development acceptance sudo: false script: - "bundle exec rake lint" - "bundle exec rake validate" - "bundle exec rake spec SPEC_OPTS='--format documentation'" matrix: fast_finish: true include: - - env: "NET_SSH_GEM_VERSION=2.9.4 PUPPET_GEM_VERSION=3.8.4 TINS_GEM_VERSION=0.8.4 JSON_PURE_GEM_VERSION=2.0.1 NET_HTTP_PERSISTENT_GEM_VERSION=2.9.4" + env: "ADDRESSABLE_GEM_VERSION=2.4.0 NET_SSH_GEM_VERSION=2.9.4 PUPPET_GEM_VERSION=3.8.4 TINS_GEM_VERSION=0.8.4 JSON_PURE_GEM_VERSION=2.0.1 NET_HTTP_PERSISTENT_GEM_VERSION=2.9.4" rvm: 1.9.3 - rvm: 2.3.1 env: PUPPET_GEM_VERSION="~> 4.0" - rvm: 2.1.9 env: PUPPET_GEM_VERSION="~> 4.0" - rvm: 2.1.9 env: PUPPET_GEM_VERSION="~> 4.6.0" - rvm: 2.1.9 env: PUPPET_GEM_VERSION="~> 4.5.0" notifications: email: false diff --git a/.yardopts b/.yardopts index 557279e..a5f7e83 100644 --- a/.yardopts +++ b/.yardopts @@ -1,3 +1,5 @@ +--output-dir docs --markup markdown --tag caveats:"Caveats:" --tag resolution:"Resolution:" +- CONTRIBUTING.md LICENSE README.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 43d53db..794dc1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,1029 +1,1047 @@ # Change Log for Puppet Module locp-cassandra -##2016-10-29 - Release 2.1.0 ([diff](https://github.com/locp/cassandra/compare/2.1.0...2.1.1)) +##2016-11-02 - Release 2.1.2 ([diff](https://github.com/locp/cassandra/compare/2.1.1...2.1.2)) + +### Summary + +Basically a non-functional release to reduce some of the technical debt +from the 2.0.0 release. Also some minor improvements to the documentation. + +##2016-11-19 - Release 1.26.1 ([diff](https://github.com/locp/cassandra/compare/1.26.0...1.26.1)) + +### Summary + +Retro-fitted a bug that was fixed in 2.1.1 into the 1.X.Y version of the module. + +### Bugfixes + +* A hotfix for a bug in `cassandra::schema` that has been around since version 1.18.0 of this + module. + +##2016-11-02 - Release 2.1.1 ([diff](https://github.com/locp/cassandra/compare/2.1.0...2.1.1)) ### Summary A hotfix for a bug in `cassandra::schema` that has been around since version 1.18.0 of this module. ### Bugfixes * Fixed a bug where cql_types would not be created unless keyspaces were also provided. * Fixed a minor typo in the README. ##2016-10-29 - Release 2.1.0 ([diff](https://github.com/locp/cassandra/compare/2.0.2...2.1.0)) ### Summary A mixture of new features, a new style of documentation and other improvements. Also ran the [Sonar-Puppet](https://github.com/iwarapter/sonar-puppet) plugin against the code to improve the code quality. ### Features * The following facts are now available: * cassandramajorversion * cassandraminorversion * cassandrapatchversion * cassandrarelease * The following attributes are now available: * cassandra::commitlog_directory * cassandra::commitlog_directory_mode * cassandra::data_file_directories * cassandra::data_file_directories_mode * cassandra::hints_directory * cassandra::hints_directory_mode * cassandra::saved_caches_directory * cassandra::saved_caches_directory_mode * cassandra::systemctl ### Bugfixes * Resolved all issues identified by Sonar-Puppet from 38 (2 major, 36 minor). In doing so, this reduced the technical debt ration from 0.9% to 0.0%. ### Improvements * The reference documentation is now processed via http://locp.github.io/cassandra * Made a start on refactoring the spec/unit tests so that there is less duplication of code. ##2016-10-12 - Release 2.0.2 ([diff](https://github.com/locp/cassandra/compare/2.0.1...2.0.2)) ### Summary This is a non-functional patch release that fixes some issues in documentation, and fixes some bugs and makes some improvements in our testing framework. ### Improvements * Ensure there is a framework for supporting the legacy 1.X.Y. module until the end of 2016. * A more obvious test rig for the beaker/acceptance tests on TravisCI. ### Bugfixes * Corrected misleading documentation. * Ensure legacy test builds still work against Ruby 1.9.3. * Corrected deprecated tags in the module metadata. +##2016-10-08 - Release 1.26.0 ([diff](https://github.com/locp/cassandra/compare/1.25.2...1.26.0)) + +### Improvements +* The `cassandra::seeds` paramater can now be provided as an array or as a string. + +# Bugfixes +* Ensure legacy builds still work on TravisCI. + ##2016-10-01 - Release 2.0.1 ([diff](https://github.com/locp/cassandra/compare/2.0.0...2.0.1)) ### Summary A non-functional release containing some improvements and documentation corrections. ### Improvements * Corrected some out of date documentation. * Removed some deprecated files. * Regained 100% spec test coverage. ##2016-09-29 - Release 2.0.0 ([diff](https://github.com/locp/cassandra/compare/1.26.0...2.0.0)) ### Summary This is a major release and will more than likely break your existing manifest until you alter your code. Please see the [Upgrading](https://github.com/locp/cassandra/tree/release/274/v2.0.0#upgrading) section of the README for further details. * The method of passing parameters to Cassandra has been made more flexible. * Support for Ubuntu 16.04. * Changes to how `service_ensure` is handled. * `cassandra::file` is now a define, not a class (as it should have been). -##2016-10-08 - Release 1.26.0 ([diff](https://github.com/locp/cassandra/compare/1.25.2...1.26.0)) - -# Improvements -* The `cassandra::seeds` paramater can now be provided as an array or as a string. - -# Bugfixes -* Ensure legacy builds still work on TravisCI. - ##2016-09-03 - Release 1.25.2 ([diff](https://github.com/locp/cassandra/compare/1.25.1...1.25.2)) ### Summary The `service_systemd` attribute is now deprecated for the `cassandra`, `cassandra::datastax_agent` and `cassandra::opscenter` classes. See https://github.com/locp/cassandra/wiki/DEP-020 for more details. ##2016-08-14 - Release 1.25.1 ([diff](https://github.com/locp/cassandra/compare/1.25.0...1.25.1)) ### Summary Bugfix to ensure that the name of the PID file for the DataStax Agent service matches with the service name. ##2016-07-17 - Release 1.25.0 ([diff](https://github.com/locp/cassandra/compare/1.24.3...1.25.0)) ### Summary A feature release. ### Features * The `cassandra` class now has a `disk_access_mode` attribute. ##2016-06-26 - Release 1.24.3 ([diff](https://github.com/locp/cassandra/compare/1.24.2...1.24.3)) ### Summary A couple of non-functional bug fixes. ### Bugfixes * The new version of RuboCop flagged code changes required in the Vagrantfile. * The new version of Puppet Lint flagged code changes required in cassandra::java. ##2016-06-20 - Release 1.24.2 ([diff](https://github.com/locp/cassandra/compare/1.24.1...1.24.2)) ### Summary A non-functional bug fix. ### Bugfixes * The release of the specinfra gem (2.59.1) caused problems with our build. Pinned now to 2.59.0. ##2016-06-18 - Release 1.24.1 ([diff](https://github.com/locp/cassandra/compare/1.24.0...1.24.1)) ### Summary Really only affects CentOS 7 as all the other supported operating systems do not require the systemd file to be installed. ### Bugfixes * Change the way that systemd shuts Cassandra down. ##2015-05-25 - Release 1.24.0 ([diff](https://github.com/locp/cassandra/compare/1.23.1...1.24.0)) ### Summary A Debian-centric release. Debian 8 is now supported and a workaround for [CASSANDRA-2356](https://issues.apache.org/jira/browse/CASSANDRA-2356) (which only affects Debian. ### Features * New attributes to the `::cassandra` class are: * cassandra_2356_sleep_seconds * config_path_parents * rackdc_tmpl ### Bugfixes * CASSANDRA-2356 ### Improvements * Debian 8 is now part of the acceptance testing release process. ##2016-05-10 - Release 1.23.1 ([diff](https://github.com/locp/cassandra/compare/1.23.0...1.23.1)) ### Summary A minor bugfix that fixes a problem that would only affect module developers, not users of the module. ### Bugfixes * Rubocop 0.4.0 is stricter so implemented changes that were flagged by it. ##2016-05-07 - Release 1.23.0 ([diff](https://github.com/locp/cassandra/compare/1.22.1...1.23.0)) ### Summary A couple of new features, a non-functional improvement and a bugfix. ### Features * Added the cassandra::file class. * Added the following attributes to the cassandra::schema class: * cqlsh_client_tmpl * cqlsh_client_config ### Bugfixes * Fixed a daft error that stopped beaker tests running on CentOS 7. ### Improvements * Improved how fast the beaker/acceptance tests are run from TravisCI. ##2016-05-03 - Release 1.22.1 ([diff](https://github.com/locp/cassandra/compare/1.22.0...1.22.1)) ### Summary A non-functional release for a minor improvement and a bug fix. ### Bugfixes * Fixes a problem with resource ordering if the service_refresh attribute is set to false. ### Improvements * Test coverage in Coveralls is now back at 100% (https://coveralls.io/github/locp/cassandra). ##2016-04-25 - Release 1.22.0 ([diff](https://github.com/locp/cassandra/compare/1.21.0...1.22.0)) ### Summary Two new features. ### Features * Allow the creation and dropping of users with the following: * A new defined type cassandra::schema::user * The new attribute cassandra::schema::users * Allow the manipulation of the environment file with the new class cassandra::env. ##2016-04-20 - Release 1.21.0 ([diff](https://github.com/locp/cassandra/compare/1.20.0...1.21.0)) ### Summary Some minor bug fixes. Also some features and improvements that allow acceptance tests to be run against Cassandra 3. ### Features * Added the following attributes to cassandra::java: * aptkey * aptsource * yumrepo ### Bugfixes * Corrected some errors in the README and CHANGELOG. * Fixed problems with TravisCI builds. * Fixed problems with CircleCI builds. ### Improvements * Acceptance testing of Cassandra 3. ##2016-04-13 - Release 1.20.0 ([diff](https://github.com/locp/cassandra/compare/1.19.0...1.20.0)) ### Summary A minor release for client requirements. ### Features * Added the compaction_large_partition_warning_threshold_mb and memtable_allocation_type attributes to the cassandra class. ##2016-04-06 - Release 1.19.0 ([diff](https://github.com/locp/cassandra/compare/1.18.1...1.19.0)) ### Summary A new template attribute and a couple of bug fixes. ### Features * The hints_directory attribute has been added to the cassandra class for placing into the template. ### Bugfixes * Some documentation errors that had been identified have been resolved. * A problem with OpsCenter and systemd has been resolved. So far only CentOS 7 from the supported operating systems has been identified as being required to use systemd. ##2016-03-27 - Release 1.18.1 ([diff](https://github.com/locp/cassandra/compare/1.18.0...1.18.1)) ### Summary Bug fixes and some minor and non-functional improvements. ### Bugfixes * Resource ordering clarified in the cassandra::schema class. * The cqlsh command now attempts to connect to rpc_address, not the listen_address. ### Improvements * Optimised the CircleCI build process. * Made some changes to the documentation to better reflect the new functionality delivered in 1.18.0. ##2016-03-26 - Release 1.18.0 ([diff](https://github.com/locp/cassandra/compare/1.17.0...1.18.0)) ### Summary Some more functionality and sub-classes for cassandra::schema. Also some code and pipe-line improvements and a couple of bug fixes. ### Features * The cassandra::schema class now has the following additional attributes: * cql_types * indexes * tables There are also corresponting defined types for those attributes: * cassandra::schema::cql_type * cassandra::schema::index * cassandra::schema::table * The cassandra::opscenter class now has a new attribute called ldap_group_search_filter_with_dn. ### Bugfixes * In the firewalls class, an OpsCenter server also needs to connect to the Cassandra node it is monitoring as a client. The ports have been adjusted to allow this to happen. * rspec-puppet version 2.4.0 was breaking our builds so pegged ourselves to 2.3.2. ### Improvements * Some minor and non-functional improvements to the build pipe-line. * Carried out an audit using the Puppet plugin for SonarQube. The number of issues has been reduced from 227 (13 major, 214 minor) to 4 major issues of which 2 are false positives. The remaining issues will be resolved in 2.0.0. ##2016-03-22 - Release 1.17.0 ([diff](https://github.com/locp/cassandra/compare/1.16.0...1.17.0)) ### Summary Another small change that is an emergency requirement for a client. ### Features * Added the `storage_keyspace` attribute to the cassandra::datastax_agent class. ##2016-03-15 - Release 1.16.0 ([diff](https://github.com/locp/cassandra/compare/1.15.1...1.16.0)) ### Summary A smaller release than usual, but containing changes required for a client. ### Features * Added the `hosts` attribute to the cassandra::datastax_agent class. ### Bugfixes * The **address.yaml** file for the DataStax agent is now owned by the cassandra user. ##2016-03-11 - Release 1.15.1 ([diff](https://github.com/locp/cassandra/compare/1.15.0...1.15.1)) ### Summary A small improvement. ### Improvements * Clarified CQL and Python versions. ##2016-03-10 - Release 1.15.0 ([diff](https://github.com/locp/cassandra/compare/1.14.2...1.15.0)) ### Summary A rather large release. Minor (non-functional) fixes to the production pipeline and new features. ### Features * A new class `cassandra::schema` allows the creation and dropping of keyspaces. * Added the `additional_lines` attribute to the `cassandra` class. * Added the `service_systemd` attribute to the `cassandra::opscenter` class. * Allow the systemd template sources to be specified by the user. This is with the `service_systemd_tmpl` attribute to the following classes: * cassandra * cassandra::datastax_agent * cassandra::opscenter * Added another template file for `cassandra` => `service_systemd_tmpl` that is suitable for Cassandra 2.0. ### Bugfixes * Worked around a problem with rake-11 in the Gemfile. * Fixed a problem in the CircleCI configuration. ### Improvements * Renamed the `ensure` attribute to `package_ensure` so that it is more in line with how it's called in other modules. This was done on the the following classes: * cassandra::optutils * cassandra::opscenter * cassandra::opscenter::pycrypto * cassandra::java * Updated the AWS AMI for the TravisCI/AWS acceptance testing to hopefully speed up builds a bit. ##2016-02-29 - Release 1.14.2 ([diff](https://github.com/locp/cassandra/compare/1.14.1...1.14.2)) ### Summary A small bugfix release. ### Bugfixes * Removed `Restart=always` from the Systemd configuration files. ##2016-02-27 - Release 1.14.1 ([diff](https://github.com/locp/cassandra/compare/1.14.0...1.14.1)) ### Summary A non-functional release of improvements and a bugfix. ### Bugfixes * If a systemd service file is created or updated, then systemctl daemon-reload is now be executed. ### Improvements * The workflow for building the module has been improved to include: * Automatic integration of improvements and bugfixes into release candidates. * Testing of release candidates includes acceptance (beaker) as well as unit (spec) tests. * The refactoring of the majority of the Ruby code used to test and build this module so that it is hopefully more readable and easier to maintain. * The automation of what had previously been manual steps when building a release. ##2016-02-19 - Release 1.14.0 ([diff](https://github.com/locp/cassandra/compare/1.13.0...1.14.0)) ### Summary A minor release with one of each of a feature, bug fix and improvement. ### Features * Added the orbited_longpoll attribute to the cassandra::opscenter class. ### Bugfixes * Fixed a problem with the DataStax agent and systemd. ### Improvements * Refactored the contributors section of the README. ##2016-02-14 - Release 1.13.0 ([diff](https://github.com/locp/cassandra/compare/1.12.2...1.13.0)) ### Summary A mixed back of new features in the shape of attributes for the cassandra, cassandra::datastax_agent and cassandra::opscenter classes. A couple of bug fixes and some non-functional improvements. ### Features * Added the thrift_framed_transport_size_in_mb attribute to ::cassandra. * Added the following attributes to ::cassandra::datastax_agent: * async_pool_size * async_queue_size * service_systemd * Added the config_purge attribute to ::cassandra::opscenter. ### Bugfixes * Removed incorrect puppet code from the README examples. * Fixed a problem with the beaker 2.34.0 gem which was causing problems during automated acceptance testing. ### Improvements * Changed the AWS instance type used by the TravisCI triggered acceptance tests from a c3.xlarge to c4.xlarge. * Merged the acceptance tests virtual nodes into family specific node sets. * Refactored the Gemfile. * Changed references in the documentation to parameters to refer to attributes as that is more Puppet-like. * Changed the format of the contributers section. ##2016-02-12 - Release 1.12.2 ([diff](https://github.com/locp/cassandra/compare/1.12.1...1.12.2)) ### Summary More bug fixes. ### Bugfixes * Fixed a problem with the Red Hat family and systemd not starting the service and reporting all service stops as failures, regardless of if they were or not. ##2016-02-08 - Release 1.12.1 ([diff](https://github.com/locp/cassandra/compare/1.12.0...1.12.1)) ### Summary This is a non-functional release. Some bug fixes and release improvements. ### Bugfixes * Completed documentation for attributes. This was missing for the `inter_dc_stream_throughput_outbound_megabits_per_sec` and `stream_throughput_outbound_megabits_per_sec` options. * Corrected the ownership and directories for the OpsCenter configuration. ### Improvements * Nightly build created so that issues similar to those found in issues #136 and #157 can be caught quicker. ##2016-01-27 - Release 1.12.0 ([diff](https://github.com/locp/cassandra/compare/1.11.0...1.12.0)) ### Summary A new feature in the cassandra::datastax_agent class, a minor bug fix and integration with CircleCI. ### Features * There is now an agent_alias attribute for the cassandra::datastax_agent class. ### Bugfixes * Unit tests were failing due to problems with the puppet-3.8.5 gem. ### Improvements * In addition to TravisCI, the build process is now integrated with [CircleCI](https://circleci.com/gh/locp/cassandra). ##2016-01-01 - Release 1.11.0 ([diff](https://github.com/locp/cassandra/compare/1.10.0...1.11.0)) ### Summary New features added to the main class. Also some non-functional improvements. ### Features * The addition of the listen_interface and rpc_interface attributes to the main class. ### Improvements * Added more detail to the attributes to the main class in the README. * Improved the module metadata. * Clarified private defined types with the private subclass. * The test coverage in release 1.10.0 dropped to 99.09%. Got it back to 100% in this release. ##2015-12-19 - Release 1.10.0 ([diff](https://github.com/locp/cassandra/compare/1.9.2...1.10.0)) ### Summary A feature release with minor improvements. ### Features * Added the ability to allow setting the local_interface for the DataStax agent configuration. * Allow the service provider to be specified for the Cassandra, DataStax agent and OpsCenter services with the service_provider attribute. * Optionally allow a systemd system file be inserted with the cassandra::service_systemd attribute. ### Improvements * Allow the files resources specified with in the cassandra attributes: * commitlog_directory * data_file_directories * saved_caches_directory To co-exist with file resources with the same name. ##2015-11-21 - Release 1.9.2 ([diff](https://github.com/locp/cassandra/compare/1.9.1...1.9.2)) ### Summary A bug fix release that deals with some problems with Cassandra 3. ### Bugfixes * Attempt to mitigate against problems with Debian attempting to install Cassandra 3 when installing the dsc22 package. * Also reverted the project home to the GitHub project page. ##2015-11-09 - Release 1.9.1 ([diff](https://github.com/locp/cassandra/compare/1.9.0...1.9.1)) ### Summary A bug fix release. ### Bugfixes * The default value for the permissions mode of the Cassandra configuration file were far too open. Changed from 0666 to 0644. ##2015-10-25 - Release 1.9.0 ([diff](https://github.com/locp/cassandra/compare/1.8.1...1.9.0)) ### Summary Added more features for the configuration of Cassandra, some improvements to the testing carried out before a release and a minor correction to the change log documentation. ### Features * The following attributes have been added to the ::cassandra class to be configured into the configuration file: * client_encryption_algorithm * client_encryption_cipher_suites * client_encryption_protocol * client_encryption_require_client_auth * client_encryption_store_type * client_encryption_truststore * client_encryption_truststore_password * counter_cache_size_in_mb * index_summary_capacity_in_mb * key_cache_save_period * key_cache_keys_to_save * seed_provider_class_name * server_encryption_algorithm * server_encryption_cipher_suites * server_encryption_protocol * server_encryption_require_client_auth * server_encryption_store_type Please see the README file for more details. ### Bugfixes * Corrected an incorrect date (typo) in this document. ### Improvements * There is now an automated test to mitigate the risk of unnecessarily refreshes of the Cassandra service due to non-functional changes to the configuration file. ##2015-10-14 - Release 1.8.1 ([diff](https://github.com/locp/cassandra/compare/1.8.0...1.8.1)) ### Summary A minor bug fix. ### Bugfixes * Fixed an edge case issue concerning users that may have been using the fail_on_non_supported_os before it was fixed in 1.8.0. ##2015-10-06 - Release 1.8.0 ([diff](https://github.com/locp/cassandra/compare/1.7.1...1.8.0)) ### Summary Some new features a minor bug fix and some non-functional improvements. ### Features * Added the service_refresh and config_file_mode attributes to the Cassandra class. ### Bugfixes * The name of the fail_on_non_supported_os attribute has been corrected. ### Improvements * Automated acceptance tests in preparation for a release now run faster. ##1015-10-01 - Release 1.7.1 ([diff](https://github.com/locp/cassandra/compare/1.7.0...1.7.1)) ### Summary A minor bug fix that incorrctly gave a failed build status for the module. ### Bugfixes * Fixed a problem that was showing the status of the module build as an error since the release of the fog-google gem version 0.1.1. ##2015-10-01 - Release 1.7.0 ([diff](https://github.com/locp/cassandra/compare/1.6.0...1.7.0)) ### Summary * Corrected a bug in how commitlog_sync has handled by Cassandra. * Some non-functional improvements * Additional features for the cassandra::datastax_repo class. ### Features * Added the commitlog_segment_size_in_mb attribute to the cassandra class. * Added the following fields to the cassandra::datastax_repo class: * descr * key_id * key_url * pkg_url * release This should make the configuring of repositories more flexible. ### Bugfixes * Fixed a bug in how the commitlog_sync and the attributes that are associated with it are handled ### Improvements The following non-functional improvements were implemented: * Added tags to the module metadata. * Migrated the acceptance tests from Vagrant to Docker. The associated improvements to performance means that more rigorous acceptance tests can be applied in a shorter time. For the first time as well, they are visible on Travis. ##2015-09-23 - Release 1.6.0 ([diff](https://github.com/locp/cassandra/compare/1.5.0...1.6.0)) ### Summary More attributes for ::cassandra and ::cassandra::datastax_agent. Also some non-functional improvements in the automated unit tests. ### Features * The JAVA_HOME can now be set for the datastax_agent (see the cassandra::datastax_agent => java_home attribute). * The file mode for the directories can now be specified for the commitlog_directory, data_file_directories and the saved_caches_directory in the cassandra class. ### Improvements * Uncovered resources in the unit testing are now tested. ##2015-09-21 - Release 1.5.0 ([diff](https://github.com/locp/cassandra/compare/1.4.2...1.5.0)) ### Summary More attributes have been added that can be configured into the cassandra.yaml file. ### Features * The following attributes to the cassandra class can be configured into the cassandra configuration: * broadcast_address * broadcast_rpc_address * commitlog_sync * commitlog_sync_batch_window_in_ms * commitlog_total_space_in_mb * concurrent_compactors * counter_cache_keys_to_save * file_cache_size_in_mb * initial_token * inter_dc_stream_throughput_outbound_megabits_per_sec * internode_authenticator * internode_recv_buff_size_in_bytes * internode_send_buff_size_in_bytes * memory_allocator * memtable_cleanup_threshold * memtable_flush_writers * memtable_heap_space_in_mb * memtable_offheap_space_in_mb * native_transport_max_concurrent_connections * native_transport_max_concurrent_connections_per_ip * native_transport_max_frame_size_in_mb * native_transport_max_threads * permissions_update_interval_in_ms * phi_convict_threshold * request_scheduler_options_default_weight * request_scheduler_options_throttle_limit * row_cache_keys_to_save * rpc_max_threads * rpc_min_threads * rpc_recv_buff_size_in_bytes * rpc_send_buff_size_in_bytes * streaming_socket_timeout_in_ms * stream_throughput_outbound_megabits_per_sec ### Improvements * Clarity of changes per release in the change log (this document). ##2015-09-15 - Release 1.4.2 ([diff](https://github.com/locp/cassandra/compare/1.4.1...1.4.2)) ### Summary Fixed a problem identified whilst releasing 1.4.1 and a bug fixed by a contributed pull request. ### Features * n/a ### Bugfixes * Fixed a problem with the acceptance tests. * The datastax-agent service is restarted if the package is updated. ### Improvements * n/a ##2015-09-15 - Release 1.4.1 ([diff](https://github.com/locp/cassandra/compare/1.4.0...1.4.1)) ### Summary This release fixes a minor bug (possibly better described as a typing mistake) and makes some non-functional improvements. It also allows the user to override the default behaviour of failing on a non-supported operating system. ### Features * A new flag called `fail_on_non_suppoted_os` has been added to the `cassandra` class and can be set to **false** so that an attempt can be made to use this module on an operating system that is not in the Debian or Red Hat families. ### Bugfixes * Changed the default value for the `package_name` of the `cassandra::optutils` class from `'undef'` to *undef*. ### Improvements * Clarified the expectations of submitted contributions. * Unit test improvements. ##2015-09-10 - Release 1.4.0 ([diff](https://github.com/locp/cassandra/compare/1.3.7...1.4.0)) * Ensured that directories specified in the directory attributes are controlled with file resources. * Added the following attributes to the cassandra.yml file: * batchlog_replay_throttle_in_kb * cas_contention_timeout_in_ms * column_index_size_in_kb * commit_failure_policy * compaction_throughput_mb_per_sec * counter_cache_save_period * counter_write_request_timeout_in_ms * cross_node_timeout * dynamic_snitch_badness_threshold * dynamic_snitch_reset_interval_in_ms * dynamic_snitch_update_interval_in_ms * hinted_handoff_throttle_in_kb * index_summary_resize_interval_in_minutes * inter_dc_tcp_nodelay * max_hints_delivery_threads * max_hint_window_in_ms * permissions_validity_in_ms * range_request_timeout_in_ms * read_request_timeout_in_ms * request_scheduler * request_timeout_in_ms * row_cache_save_period * row_cache_size_in_mb * sstable_preemptive_open_interval_in_mb * tombstone_failure_threshold * tombstone_warn_threshold * trickle_fsync * trickle_fsync_interval_in_kb * truncate_request_timeout_in_ms * write_request_timeout_in_ms ##2015-09-08 - Release 1.3.7 ([diff](https://github.com/locp/cassandra/compare/1.3.6...1.3.7)) * Made the auto_bootstrap attribute available. ##2015-09-03 - Release 1.3.6 ([diff](https://github.com/locp/cassandra/compare/1.3.5...1.3.6)) * Fixed a bug, now allowing the user to set the enabled state of the Cassandra service. * More cleaning up of the README and more links in that file to allow faster navigation. ##2015-09-01 - Release 1.3.5 ([diff](https://github.com/locp/cassandra/compare/1.3.4...1.3.5)) * Fixed a bug, now allowing the user to set the running state of the Cassandra service. * More automated testing with spec tests. * A refactoring of the README. ##2015-08-28 - Release 1.3.4 ([diff](https://github.com/locp/cassandra/compare/1.3.3...1.3.4)) * Minor corrections to the README. * The addition of the storage_cassandra_seed_hosts attribute to cassandra::opscenter::cluster_name which is part of a bigger part of work but is urgently require by a client. ##2015-08-27 - Release 1.3.3 ([diff](https://github.com/locp/cassandra/compare/1.3.2...1.3.3)) * Corrected dependency version for puppetlabs-apt. ##2015-08-26 - Release 1.3.2 ([diff](https://github.com/locp/cassandra/compare/1.3.1...1.3.2)) * Fixed bug in cassandra::opscenter::cluster_name. * Fixed code in cassandra::firewall_ports::rule to avoid deprecation warnings concerning the use of puppetlabs-firewall => port. * Added more examples to the README ##2015-08-22 - Release 1.3.1 ([diff](https://github.com/locp/cassandra/compare/1.3.0...1.3.1)) This was mainly a non-functional change. The biggest thing to say is that Debian 7 is now supported. ##2015-08-19 - Release 1.3.0 ([diff](https://github.com/locp/cassandra/compare/1.2.0...1.3.0)) * Allow additional TCP ports to be specified for the host based firewall. * Fixed a problem where the client subnets were ignored by the firewall. * Added more automated testing. * Continued work on an ongoing improvement of the documentation. * Added the ability to set the DC and RACK in the snitch properties. ##2015-08-10 - Release 1.2.0 ([diff](https://github.com/locp/cassandra/compare/1.1.0...1.2.0)) * Added the installation of Java Native Access (JNA) to cassandra::java * For DataStax Enterprise, allow the remote storage of metric data with cassandra::opscenter::cluster_name. ##2015-08-03 - Release 1.1.0 ([diff](https://github.com/locp/cassandra/compare/1.0.1...1.1.0)) * Provided the cassandra::firewall_ports class. * All OpsCenter options are now configurable in opscenterd.conf. * ssl_storage_port is now configurable. ##2015-07-27 - Release 1.0.1 ([diff](https://github.com/locp/cassandra/compare/1.0.0...1.0.1)) * Provided a workaround for [CASSANDRA-9822](https://issues.apache.org/jira/browse/CASSANDRA-9822). ##2015-07-25 - Release 1.0.0 ([diff](https://github.com/locp/cassandra/compare/0.4.3...1.0.0)) * Changed the default installation from Cassandra 2.1 to 2.2. * Fixed a bug that arose when the cassandra config_path was set. * Created a workaround for [PUP-3829](https://tickets.puppetlabs.com/browse/PUP-3829). * Minor changes to the API (see the Upgrading section of the README). * Allow a basic installation of OpsCenter. ##2015-07-18 - Release 0.4.3 ([diff](https://github.com/locp/cassandra/compare/0.4.2...0.4.3)) * Module dependency metadata was too strict. ##2015-07-16 - Release 0.4.2 ([diff](https://github.com/locp/cassandra/compare/0.4.1...0.4.2)) * Some minor documentation changes. * Fixed a problem with the module metadata that caused Puppetfile issues. * Integrated with Coveralls (https://coveralls.io/github/locp/cassandra). * Removed the deprecated config and install classes. These were private so there is no change to the API. ##2015-07-14 - Release 0.4.1 ([diff](https://github.com/locp/cassandra/compare/0.4.0...0.4.1)) * Fixed a resource ordering problem in the cassandra::datastax class. * Tidied up the documentation a bit. * Some refactoring of the spec tests. ##2015-07-12 - Release 0.4.0 ([diff](https://github.com/locp/cassandra/compare/0.3.0...0.4.0)) ### Summary * Some major changes to the API on how Java, the optional Cassandra tools and the DataStax agent are installed. See the Upgrading section of the README file. * Allowed the setting of the *stomp_interface* for the DataStax agent. * Non-functionally, we have integrated with Travis CI (see https://travis-ci.org/locp/cassandra for details) and thanks to those guys for providing such a neat service. * More spec tests. ##2015-06-27 - Release 0.3.0 ([diff](https://github.com/locp/cassandra/compare/0.2.2...0.3.0)) ### Summary * Slight changes to the API. See the Upgrading section of the README file for full details. * Allow for the installation of the DataStax Agent. * Improved automated testing (and fixed some bugs along the way). * Confirmed Ubuntu 12.04 works OK with this module. * A Cassandra 1.X template has been provided. * Some smarter handling of the differences between Ubuntu/Debian and RedHat derivatives. ##2015-06-17 - Release 0.2.2 ([diff](https://github.com/locp/cassandra/compare/0.2.1...0.2.2)) ### Summary A non-functional change to change the following: * Split the single manifest into multiple files. * Implement automated testing. * Test on additional operating systems. ##2015-05-28 - Release 0.2.1 ([diff](https://github.com/locp/cassandra/compare/0.2.0...0.2.1)) ### Summary A non-functional change to fix puppet-lint problems identified by Puppet Forge. ##2015-05-28 - Release 0.2.0 ([diff](https://github.com/locp/cassandra/compare/0.1.0...0.2.0)) ### Summary Added more attributes and improved the module metadata. ##2015-05-26 - Release 0.1.0 ### Summary An initial release with **VERY** limited options. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54e7532..29b4004 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,104 +1,143 @@ # Contributing to the Module or Raising Issues ## Table of Contents 1. [Raising an Issue](#raising-an-issue) 1. [Contribtions](#contributions) * [Unit Tests](#unit-tests) +1. [Contributors](#contributors) 1. [Further Reading](#further-reading) ## Raising an Issue When raising an issue, please provide the following information: * The version of the locp-cassandra module that you are using. * The version of Cassandra that you are installing. * The operating system and release (output from `facter os` would be appropriate). * A sample of your manifest/profile that is calling the `cassandra` module. Feel free to obfuscate sections of the code that contain details that are confidential (e.g. passwords and other secrets). ## Contributions Contributions will be gratefully accepted. Please go to the project page, fork the project, make your changes locally and then raise a pull request. Details on how to do this are available at https://guides.github.com/activities/contributing-to-open-source. However, we do ask that at the very least, all items marked as **MUST** or **WON'T** in the list below are applicable: * Any new features (e.g. new resources or new attributes to existing resoures) **MUST** be fully documented . * Unit tests **MUST** be completing successfully. See [Unit Tests](#unit-tests) for more details. If your initial unit tests fail after a pull request and you need to fix them, simply change the code on your branch and push them to *origin* again as this will re-run the tests. It is not required to submit a new pull request. * Any new functionality or enhancements **SHOULD** be covered by unit/spec tests. If you are not comfortable with this, submit the PR anyway and we will fill in these gaps. You will most probably be asked to rebase your PR branch and then push again to register these changes. * If applicable, changes **COULD** be covered in beaker/acceptance tests. * Change **WON'T** break any functionality on any of the supported operating systems. ### Unit Tests First, you'll need to install the testing dependencies using [bundler](http://bundler.io). ```shell bundle install ``` To run all of the unit tests execute the following: ```shell bundle exec rake test ``` This should output something like the following: ``` Running RuboCop... Inspecting 24 files ........................ 24 files inspected, no offenses detected ---> syntax:manifests ---> syntax:templates ---> syntax:hiera:yaml /home/ben/.rvm/rubies/ruby-2.1.6/bin/ruby -I/home/ben/.rvm/gems/ruby-2.1.6/gems/rspec-core-3.5.4/lib:/home/ben/.rvm/gems/ruby-2.1.6/gems/rspec-support-3.5.0/lib /home/ben/.rvm/gems/ruby-2.1.6/gems/rspec-core-3.5.4/exe/rspec --pattern spec/\{aliases,classes,defines,unit,functions,hosts,integration,types\}/\*\*/\*_spec.rb --color [Coveralls] Set up the SimpleCov formatter. [Coveralls] Using SimpleCov's default settings. ....................................................... Finished in 7.86 seconds (files took 0.81841 seconds to load) 55 examples, 0 failures Total resources: 64 Touched resources: 64 Resource coverage: 100.00% [Coveralls] Outside the CI environment, not sending data. ``` Note that if you prefer, you can run the lint, syntax, and spec tests separately with individual commands: ```shell bundle exec rake metadata_lint bundle exec rake rubocop bundle exec rake lint bundle exec rake validate bundle exec rake spec ``` If in doubt, or you are stuck, please ask for help in the PR or via our [Gitter Room](https://gitter.im/locp/cassandra). +## Contributors + +**Release** | **PR/Issue** | **Contributer** +------------|-----------------------------------------------------|---------------------------------------------------- +2.1.1 | [Correct cql_types conditional in cassandra::schema class](https://github.com/locp/cassandra/pull/325)| [@aaron-miller](https://github.com/aaron-miller) +2.0.2 | [locp/cassandra 2.0 example has two cassandra declarations](https://github.com/locp/cassandra/issues/291)| [@ericy-jana](https://github.com/ericy-jana) +2.0.0 | [Convert cassandra::file from a class to a define](https://github.com/locp/cassandra/issues/266)| [@stanleyz](https://github.com/stanleyz) +1.26.1 | [Correct cql_types conditional in cassandra::schema class](https://github.com/locp/cassandra/pull/325)| [@aaron-miller](https://github.com/aaron-miller) +1.25.2 | [Ubuntu 16 doesnt like the service file](https://github.com/locp/cassandra/issues/269)| [@ahharu](https://github.com/ahharu) +1.25.1 | [PID file name in systemd file for datastax-agent doesn't match PID file name in /etc/init.d/datastax-agent](https://github.com/locp/cassandra/issues/264)| [@pampelix](https://github.com/pampelix) +1.25.0 | [adding support for mmap](https://github.com/locp/cassandra/pull/261) | [@tibers](https://github.com/tibers) +1.24.0 | [remove varlib_dir require from data directory](https://github.com/locp/cassandra/pull/247) | [@ericy-jana](https://github.com/ericy-jana) +1.24.0 | [stage config files before installing cassandra package](https://github.com/locp/cassandra/pull/246) | [@ericy-jana](https://github.com/ericy-jana) +1.24.0 | [locp/cassandra starts two Cassandra processes](https://github.com/locp/cassandra/issues/245)| [@ericy-jana](https://github.com/ericy-jana) +1.23.0 | [attemping to realize client security](https://github.com/locp/cassandra/pull/235) | [@tibers](https://github.com/tibers) +1.22.1 | [#232 - add ordering to service definition](https://github.com/locp/cassandra/pull/233) | [@tibers](https://github.com/tibers) +1.22.1 | [module tries to start cassandra before it's installed](https://github.com/locp/cassandra/issues/232)| [@tibers](https://github.com/tibers) +1.21.0 | [Issue: Java version installed on Debian family by cassandra::java class #223](https://github.com/locp/cassandra/pull/226) | [@tibers](https://github.com/tibers) +1.20.0 | [Missing attributes in cassandra.yaml](https://github.com/locp/cassandra/issues/217)| [@samyray](https://github.com/samyray) +1.19.0 | [adding hints_directory for cassandra 3.x](https://github.com/locp/cassandra/pull/215) | [@tibers](https://github.com/tibers) +1.18.0 | [Added opscenter ldap option group_search_filter_with_dn](https://github.com/locp/cassandra/pull/203) | [@Mike-Petersen](https://github.com/Mike-Petersen) +1.15.0 | [creating vanilla cassandra 2.0.xx template](https://github.com/locp/cassandra/pull/189) | [@tibers](https://github.com/tibers) +1.14.0 | [Feature/opscenter orbited longpoll](https://github.com/locp/cassandra/pull/171) | [@jonen10](https://github.com/jonen10) +1.13.0 | [Allowing setting of async_pool_size and async_queue_size for the agent](https://github.com/locp/cassandra/pull/166) | [@Mike-Petersen](https://github.com/Mike-Petersen) +1.13.0 | [parameterized thrift_framed_transport_size_in_mb](https://github.com/locp/cassandra/pull/163) | [@VeriskPuppet](https://github.com/VeriskPuppet) +1.12.2 | [Error opening zip file or JAR manifest missing : /usr/sbin/../lib/jamm-0.3.0.jar](https://github.com/locp/cassandra/pull/165) | [@palmertime](https://github.com/palmertime) +1.12.0 | [Rename alias to agent_alias as alias is a reserved puppet word](https://github.com/locp/cassandra/pull/156) | [@stuartbfox](https://github.com/stuartbfox) +1.12.0 | [Added interfaces as an option](https://github.com/locp/cassandra/pull/153) | [@Mike-Petersen](https://github.com/Mike-Petersen) +1.10.0 | [Allowing setting of local_interface for the datastax agent configuration](https://github.com/locp/cassandra/pull/144) | [@Mike-Petersen](https://github.com/Mike-Petersen) +1.9.2 | [When installing cassandra dsc22 it tries to install cassandra 3.0.0 and as dependecy 2.2.3 is needed](https://github.com/locp/cassandra/issues/136)| [@mantunovic](https://github.com/mantunovic) +1.9.2 | [When installing cassandra dsc22 it tries to install cassandra 3.0.0 and as dependecy 2.2.3 is needed](https://github.com/locp/cassandra/issues/136)| [@al4](https://github.com/al4) +1.4.2 | [restart service if datastax agent package is upgraded](https://github.com/locp/cassandra/pull/110) | [@markasammut](https://github.com/markasammut) +1.4.0 | [allow batch_size_warn_threshold to be modified externally](https://github.com/locp/cassandra/pull/100) | [@markasammut](https://github.com/markasammut) +1.3.5 | [service_ensure unused](https://github.com/locp/cassandra/issues/93) | [@sampowers](https://github.com/sampowers) +1.3.3 | [Fails To Run With puppetlabs-apt v1.8.0](https://github.com/locp/cassandra/pull/87) | [@DylanGriffith](https://github.com/DylanGriffith) +0.4.2 | [Fix syntax in version_requirements](https://github.com/locp/cassandra/pull/34) | [@amosshapira](https://github.com/amosshapira) +0.3.0 | [Add a template for Cassandra 1.x compat](https://github.com/locp/cassandra/pull/11) | [@spredzy](https://github.com/Spredzy) + ## Further Reading * *RSpec tests for your Puppet manifests* * *Beaker Info* diff --git a/Gemfile b/Gemfile index d9bcef2..20f83c9 100644 --- a/Gemfile +++ b/Gemfile @@ -1,47 +1,56 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' def gem_env_ver(gemname) environment_var = gemname.upcase + '_GEM_VERSION' environment_var = environment_var.tr('-', '_') gemversion = ENV[environment_var] if gemversion gem gemname, gemversion, require: false else gem gemname, require: false end end +gem_env_ver('addressable') gem_env_ver('json_pure') gem_env_ver('net-http-persistent') gem_env_ver('net-ssh') gem_env_ver('puppet') gem_env_ver('tins') group :test do gem 'coveralls', require: false gem 'facter', '>= 1.7.0' gem 'hiera', require: false gem 'metadata-json-lint', require: false gem 'puppet-blacksmith', require: false gem 'puppet-lint', require: false gem 'puppet-strings', require: false gem 'puppetlabs_spec_helper', require: false gem 'rake', require: false gem 'rspec_junit_formatter', require: false gem 'rspec-puppet', '>= 2.3.2' gem 'rspec-puppet-utils', require: false gem 'rubocop', '0.41.2' if RUBY_VERSION < '2.0.0' gem 'rubocop' if RUBY_VERSION >= '2.0.0' gem 'rubocop-rspec', '~> 1.6' if RUBY_VERSION >= '2.3.0' gem 'travis', require: false gem 'travis-lint', require: false gem 'yard', require: false end -group :system_tests do +group :acceptance do + gem 'aws-sdk-core' gem 'beaker-rspec' gem 'beaker-puppet_install_helper' + gem 'git', '1.3.0' + gem 'httparty' gem 'pry' + gem 'retries' +end + +group :development do + gem 'notes', '~> 0.1.2' end diff --git a/README.md b/README.md index 849c853..81606d3 100644 --- a/README.md +++ b/README.md @@ -1,598 +1,565 @@ # Cassandra [![Puppet Forge](http://img.shields.io/puppetforge/v/locp/cassandra.svg)](https://forge.puppetlabs.com/locp/cassandra) [![Github Tag](https://img.shields.io/github/tag/locp/cassandra.svg)](https://github.com/locp/cassandra) [![Build Status](https://travis-ci.org/locp/cassandra.png?branch=master)](https://travis-ci.org/locp/cassandra) [![Coverage Status](https://coveralls.io/repos/locp/cassandra/badge.svg?branch=master&service=github)](https://coveralls.io/github/locp/cassandra?branch=master) [![Join the chat at https://gitter.im/locp/cassandra](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/locp/cassandra?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![CircleCI](https://circleci.com/gh/locp/cassandra.svg?style=svg)](https://circleci.com/gh/locp/cassandra) [![Puppet Forge Downloads](http://img.shields.io/puppetforge/dt/locp/cassandra.svg)](https://forge.puppetlabs.com/locp/cassandra) [![Puppet Forge Endorsement](https://img.shields.io/puppetforge/e/locp/cassandra.svg)](https://forge.puppetlabs.com/locp/cassandra) -#### Table of Contents +## Table of Contents 1. [Overview](#overview) 1. [Setup - The basics of getting started with Cassandra](#setup) * [What Cassandra affects](#what-cassandra-affects) * [Upgrading](#upgrading) * [Beginning with Cassandra](#beginning-with-cassandra) 1. [Usage - Configuration options and additional functionality](#usage) * [Setup a keyspace and users](#setup-a-keyspace-and-users) * [Create a Cluster in a Single Data Center](#create-a-cluster-in-a-single-data-center) * [Create a Cluster in Multiple Data Centers](#create-a-cluster-in-multiple-data-centers) * [DataStax Enterprise](#datastax-enterprise) 1. [Reference](#reference) 1. [Limitations - OS compatibility, etc.](#limitations) -1. [Contributers](#contributers) +1. [Development](#development) ## Overview A Puppet module to install and manage Cassandra, DataStax Agent & OpsCenter ## Setup ### What Cassandra affects #### What the Cassandra class affects * Installs the Cassandra package (default **cassandra22** on Red Hat and **cassandra** on Debian). * Configures settings in `${config_path}/cassandra.yaml`. * On CentOS 7 if the `init` service provider is used, then cassandra is added as a system service. * Optionally ensures that the Cassandra service is enabled and running. * On Debian systems: * Optionally replace ```/etc/init.d/cassandra``` with a workaround for [CASSANDRA-9822](https://issues.apache.org/jira/browse/CASSANDRA-9822). #### What the cassandra::datastax_agent class affects * Optionally installs the DataStax agent. * Optionally sets JAVA_HOME in **/etc/default/datastax-agent**. #### What the cassandra::datastax_repo class affects * Optionally configures a Yum repository to install the Cassandra packages from (on Red Hat). * Optionally configures an Apt repository to install the Cassandra packages from (on Debian). #### What the cassandra::firewall_ports class affects * Optionally configures the firewall for the Cassandra related network ports. #### What the cassandra::java class affects * Optionally installs a JRE/JDK package (e.g. java-1.7.0-openjdk) and the Java Native Access (JNA). #### What the cassandra::optutils class affects * Optionally installs the Cassandra support tools (e.g. cassandra22-tools). ### Upgrading We follow [SemVer Versioning](http://semver.org/) and an update of the major release (i.e. from 1.*Y*.*Z* to 2.*Y*.*Z*) will indicate a significant change to the API which will most probably require a change to your manifest. #### Changes in 2.0.0 This is a major change to the API and you will more than likely need to change your manifest to accomodate these changes. The `service_ensure` attribute of the cassandra class now defaults to *undef*, users who do want to manage service status in Puppet can still set it to true. If leaving the value at the default and setting `service_refresh` and `service_enable` to false will mean that the user and not Puppet running will control the running state of Cassandra. This currently works OK on the Red Hat family, but has issues on Debian due to [CASSANDRA-2356](https://issues.apache.org/jira/browse/CASSANDRA-2356) during an initial install or package upgrade. All the functionality relating to OpsCenter has been divested to the [locp/opscenter](https://forge.puppet.com/locp/opscenter) module on Puppet Forge. It should also be noted that the module no longer creates directories for the `data`, `commitlog`, `saved_caches` and for Cassandra 3 the `hints` directory. These resources will now need to be defined in your manifest/profile. For a list of features that have been deprecated in this release, please see https://github.com/locp/cassandra/wiki/Deprecations For details on migrating from the version 1.X.X attributes to the `settings` hash, see https://github.com/locp/cassandra/wiki/Version-1.X.Y-Template-Defaults-Shown-As-2.X.Y-Hash Please also see the notes for 2.0.0 in the [CHANGELOG](https://forge.puppet.com/locp/cassandra/changelog). #### Changes in 1.19.0 The hints_directory documentation will cause a change in the cassandra.yaml file regardless of the value you set it to. If you do not wish this to result in a refesh of the Cassandra service, please set service_refresh to false. #### Changes in 1.9.2 Now that Cassandra 3 is available from the DataStax repositories, there is a problem (especially on Debian) with the operating system package manager attempting to install Cassandra 3. This can be mitigated against using something similar to the code in this modules acceptance test. Please note that the default Cassandra package name has now been changed from 'dsc'. See the documentation for cassandra::package_name below for details. ```puppet if $::osfamily == 'RedHat' { $version = '2.2.4-1' } else { $version = '2.2.4' } class { 'cassandra': package_ensure => $version, } ``` #### Changes in 1.8.0 A somewhat embarrassing correction to the spelling of the cassandra::fail_on_non_suppoted_os to cassandra::fail_on_non_supported_os. #### Issues when Upgrading to 1.4.0 Unfortunately both releases 1.3.7 and 1.4.0 have subsequently been found to call a refresh service even when no changes had been made to the underlying configuration. In release 1.8.0 (somewhat belatedly) the service_refresh flag has been introduced to mitigate against similar problems. #### Issues When Upgrading to 1.3.7 * Please see the notes for 1.4.0. #### Changes in 1.0.0 * cassandra::cassandra_package_ensure has been renamed to cassandra::package_ensure. * cassandra::cassandra_package_name has been renamed to cassandra::package_name. #### Changes in 0.4.0 There is now a cassandra::datastax_agent class, therefore: * cassandra::datastax_agent_package_ensure has now been replaced with cassandra::datastax_agent::package_ensure. * cassandra::datastax_agent_service_enable has now been replaced with cassandra::datastax_agent::service_enable. * cassandra::datastax_agent_service_ensure has now been replaced with cassandra::datastax_agent::service_ensure. * cassandra::datastax_agent_package_name has now been replaced with cassandra::datastax_agent::package_name. * cassandra::datastax_agent_service_name has now been replaced with cassandra::datastax_agent::service_name. Likewise now there is a new class for handling the installation of Java: * cassandra::java_package_ensure has now been replaced with cassandra::java::ensure. * cassandra::java_package_name has now been replaced with cassandra::java::package_name. Also there is now a class for installing the optional utilities: * cassandra::cassandra_opt_package_ensure has now been replaced with cassandra::optutils:ensure. * cassandra::cassandra_opt_package_name has now been replaced with cassandra::optutils:package_name. #### Changes in 0.3.0 * cassandra_opt_package_ensure changed from 'present' to undef. * The manage_service option has been replaced with service_enable and service_ensure. ### Beginning with Cassandra Create a Cassandra 2.X cluster called MyCassandraCluster which uses the GossipingPropertyFileSnitch and password authentication. In this very basic example the node itself becomes a seed for the cluster and the credentials will default to a user called cassandra with a password called of cassandra.. ```puppet # Cassandra pre-requisites include cassandra::datastax_repo include cassandra::java class { 'cassandra': settings => { 'authenticator' => 'PasswordAuthenticator', 'cluster_name' => 'MyCassandraCluster', 'commitlog_directory' => '/var/lib/cassandra/commitlog', 'commitlog_sync' => 'periodic', 'commitlog_sync_period_in_ms' => 10000, 'data_file_directories' => ['/var/lib/cassandra/data'], 'endpoint_snitch' => 'GossipingPropertyFileSnitch', 'listen_address' => $::ipaddress, 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', 'seed_provider' => [ { 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', 'parameters' => [ { 'seeds' => $::ipaddress, }, ], }, ], 'start_native_transport' => true, }, require => Class['cassandra::datastax_repo', 'cassandra::java'], } ``` For this code to run with version 3.X of Cassandra, the `hints_directory` will also need to be specified: ```puppet ... class { 'cassandra': settings => { ... 'hints_directory' => '/var/lib/cassandra/hints', ... }, require => Class['cassandra::datastax_repo', 'cassandra::java'], } ``` ## Usage ### Setup a keyspace and users We assume that authentication has been enabled for the cassandra cluster and we are connecting with the default user name and password ('cassandra/cassandra'). In this example, we create a keyspace (mykeyspace) with a table called 'users' and an index called 'users_lname_idx'. We also add three users (to Cassandra, not the mykeyspace.users table) called spillman, akers and boone while ensuring that a user called lucan is absent. ```puppet class { 'cassandra': ... } class { 'cassandra::schema': cqlsh_password => 'cassandra', cqlsh_user => 'cassandra', cqlsh_host => $::ipaddress, indexes => { 'users_lname_idx' => { table => 'users', keys => 'lname', keyspace => 'mykeyspace', }, }, keyspaces => { 'mykeyspace' => { durable_writes => false, replication_map => { keyspace_class => 'SimpleStrategy', replication_factor => 1, }, } }, tables => { 'users' => { columns => { user_id => 'int', fname => 'text', lname => 'text', 'PRIMARY KEY' => '(user_id)', }, keyspace => 'mykeyspace', }, }, users => { 'spillman' => { password => 'Niner27', }, 'akers' => { password => 'Niner2', superuser => true, }, 'boone' => { password => 'Niner75', }, 'lucan' => { 'ensure' => absent }, }, } ``` ### Create a Cluster in a Single Data Center In the DataStax documentation _Initializing a multiple node cluster (single data center)_ there is a basic example of a six node cluster with two seeds to be created in a single data center spanning two racks. The nodes in the cluster are: **Node Name** | **IP Address** | ---------------|----------------| node0 (seed 1) | 110.82.155.0 | node1 | 110.82.155.1 | node2 | 110.82.155.2 | node3 (seed 2) | 110.82.156.3 | node4 | 110.82.156.4 | node5 | 110.82.156.5 | Each node is configured to use the GossipingPropertyFileSnitch and 256 virtual nodes (vnodes). The name of the cluster is _MyCassandraCluster_. Also, while building the initial cluster, we are setting the auto_bootstrap to false. In this initial example, we are going to expand the example by: * Ensuring that the software is installed via the DataStax Community repository by including `cassandra::datastax_repo`. This needs to be executed before the Cassandra package is installed. * That a suitable Java Runtime environment (JRE) is installed with Java Native Access (JNA) by including `cassandra::java`. This need to be executed before the Cassandra service is started. ```puppet node /^node\d+$/ { class { 'cassandra::datastax_repo': before => Class['cassandra'] } class { 'cassandra::java': before => Class['cassandra'] } class { 'cassandra': settings => { 'authenticator' => 'AllowAllAuthenticator', 'auto_bootstrap' => false, 'cluster_name' => 'MyCassandraCluster', 'commitlog_directory' => '/var/lib/cassandra/commitlog', 'commitlog_sync' => 'periodic', 'commitlog_sync_period_in_ms' => 10000, 'data_file_directories' => ['/var/lib/cassandra/data'], 'endpoint_snitch' => 'GossipingPropertyFileSnitch', 'hints_directory' => '/var/lib/cassandra/hints', 'listen_interface' => 'eth1', 'num_tokens' => 256, 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', 'seed_provider' => [ { 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', 'parameters' => [ { 'seeds' => '110.82.155.0,110.82.156.3', }, ], }, ], 'start_native_transport' => true, }, } } ``` The default value for the num_tokens is already 256, but it is included in the example for clarity. Do not forget to either set auto_bootstrap to true or not set the attribute at all after initializing the cluster. ### Create a Cluster in Multiple Data Centers To continue with the examples provided by DataStax, we look at the example for a cluster across multiple data centers . **Node Name** | **IP Address** | **Data Center** | **Rack** | ---------------|----------------|-----------------|----------| node0 (seed 1) | 10.168.66.41 | DC1 | RAC1 | node1 | 10.176.43.66 | DC1 | RAC1 | node2 | 10.168.247.41 | DC1 | RAC1 | node3 (seed 2) | 10.176.170.59 | DC2 | RAC1 | node4 | 10.169.61.170 | DC2 | RAC1 | node5 | 10.169.30.138 | DC2 | RAC1 | For the sake of simplicity, we will confine this example to the nodes: ```puppet node /^node[012]$/ { class { 'cassandra': dc => 'DC1', settings => { 'authenticator' => 'AllowAllAuthenticator', 'auto_bootstrap' => false, 'cluster_name' => 'MyCassandraCluster', 'commitlog_directory' => '/var/lib/cassandra/commitlog', 'commitlog_sync' => 'periodic', 'commitlog_sync_period_in_ms' => 10000, 'data_file_directories' => ['/var/lib/cassandra/data'], 'endpoint_snitch' => 'GossipingPropertyFileSnitch', 'hints_directory' => '/var/lib/cassandra/hints', 'listen_interface' => 'eth1', 'num_tokens' => 256, 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', 'seed_provider' => [ { 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', 'parameters' => [ { 'seeds' => '110.82.155.0,110.82.156.3', }, ], }, ], 'start_native_transport' => true, }, } } node /^node[345]$/ { class { 'cassandra': dc => 'DC2', settings => { 'authenticator' => 'AllowAllAuthenticator', 'auto_bootstrap' => false, 'cluster_name' => 'MyCassandraCluster', 'commitlog_directory' => '/var/lib/cassandra/commitlog', 'commitlog_sync' => 'periodic', 'commitlog_sync_period_in_ms' => 10000, 'data_file_directories' => ['/var/lib/cassandra/data'], 'endpoint_snitch' => 'GossipingPropertyFileSnitch', 'hints_directory' => '/var/lib/cassandra/hints', 'listen_interface' => 'eth1', 'num_tokens' => 256, 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', 'seed_provider' => [ { 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', 'parameters' => [ { 'seeds' => '110.82.155.0,110.82.156.3', }, ], }, ], 'start_native_transport' => true, }, } } ``` We don't need to specify the rack name (with the rack attribute) as RAC1 is the default value. Again, do not forget to either set auto_bootstrap to true or not set the attribute at all after initializing the cluster. ## Reference ### Public Classes * [cassandra](http://locp.github.io/cassandra/puppet_classes/cassandra.html) * [cassandra::datastax_agent] (http://locp.github.io/cassandra/puppet_classes/cassandra_3A_3Adatastax_agent.html) * [cassandra::datastax_repo] (http://locp.github.io/cassandra/puppet_classes/cassandra_3A_3Adatastax_repo.html) * [cassandra::firewall_ports] (http://locp.github.io/cassandra/puppet_classes/cassandra_3A_3Afirewall_ports.html) * [cassandra::java] (http://locp.github.io/cassandra/puppet_classes/cassandra_3A_3Ajava.html) * [cassandra::optutils] (http://locp.github.io/cassandra/puppet_classes/cassandra_3A_3Aoptutils.html) * [cassandra::schema] (http://locp.github.io/cassandra/puppet_classes/cassandra_3A_3Aschema.html) ### Public Defined Types * [cassandra::file] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Afile.html) * [cassandra::schema::cql_type] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aschema_3A_3Acql_type.html) * [cassandra::schema::index] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aschema_3A_3Aindex.html) * [cassandra::schema::keyspace] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aschema_3A_3Akeyspace.html) * [cassandra::schema::table] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aschema_3A_3Atable.html) * [cassandra::schema::user] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aschema_3A_3Auser.html) ### Private Defined Types -* [cassandra::private::deprecation_warning] - (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Adeprecation_warning.html) * [cassandra::private::firewall_ports::rule] (http://locp.github.io/cassandra/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Afirewall_ports_3A_3Arule.html) ### Facts * [cassandramajorversion] (http://locp.github.io/cassandra/top-level-namespace.html#cassandramajorversion-instance_method) * [cassandraminorversion] (http://locp.github.io/cassandra/top-level-namespace.html#cassandraminorversion-instance_method) * [cassandrapatchversion] (http://locp.github.io/cassandra/top-level-namespace.html#cassandrapatchversion-instance_method) * [cassandrarelease] (http://locp.github.io/cassandra/top-level-namespace.html#cassandrarelease-instance_method) ## Limitations When using a Ruby version before 1.9.0, the contents of the Cassandra configuration file may change order of elements due to a problem with to_yaml in earlier versions of Ruby. When creating key spaces, indexes, cql_types and users the settings will only be used to create a new resource if it does not currently exist. If a change is made to the Puppet manifest but the resource already exits, this change will not be reflected. -## Contributers +## Development Contributions will be gratefully accepted. Please go to the project page, fork the project, make your changes locally and then raise a pull request. Details on how to do this are available at https://guides.github.com/activities/contributing-to-open-source. Please also see the [CONTRIBUTING.md](https://github.com/locp/cassandra/blob/master/CONTRIBUTING.md) page for project specific requirements. ### Additional Contributers -**Release** | **PR/Issue** | **Contributer** --------------|-----------------------------------------------------|---------------------------------------------------- -2.1.1 | [#325](https://github.com/locp/cassandra/pull/325) | [@aaron-miller](https://github.com/aaron-miller) -2.0.2 | [#291](https://github.com/locp/cassandra/issues/291)| [@ericy-jana](https://github.com/ericy-jana) -2.0.0 | [#266](https://github.com/locp/cassandra/issues/266)| [@stanleyz](https://github.com/stanleyz) -1.25.2 | [#269](https://github.com/locp/cassandra/issues/269)| [@ahharu](https://github.com/ahharu) -1.25.1 | [#264](https://github.com/locp/cassandra/issues/264)| [@pampelix](https://github.com/pampelix) -1.25.0 | [#261](https://github.com/locp/cassandra/pull/261) | [@tibers](https://github.com/tibers) -1.24.0 | [#247](https://github.com/locp/cassandra/pull/247) | [@ericy-jana](https://github.com/ericy-jana) -1.24.0 | [#246](https://github.com/locp/cassandra/pull/246) | [@ericy-jana](https://github.com/ericy-jana) -1.24.0 | [#245](https://github.com/locp/cassandra/issues/245)| [@ericy-jana](https://github.com/ericy-jana) -1.23.0 | [#235](https://github.com/locp/cassandra/pull/235) | [@tibers](https://github.com/tibers) -1.22.1 | [#233](https://github.com/locp/cassandra/pull/233) | [@tibers](https://github.com/tibers) -1.22.1 | [#232](https://github.com/locp/cassandra/issues/232)| [@tibers](https://github.com/tibers) -1.21.0 | [#226](https://github.com/locp/cassandra/pull/226) | [@tibers](https://github.com/tibers) -1.20.0 | [#217](https://github.com/locp/cassandra/issues/217)| [@samyray](https://github.com/samyray) -1.19.0 | [#215](https://github.com/locp/cassandra/pull/215) | [@tibers](https://github.com/tibers) -1.18.0 | [#203](https://github.com/locp/cassandra/pull/203) | [@Mike-Petersen](https://github.com/Mike-Petersen) -1.15.0 | [#189](https://github.com/locp/cassandra/pull/189) | [@tibers](https://github.com/tibers) -1.14.0 | [#171](https://github.com/locp/cassandra/pull/171) | [@jonen10](https://github.com/jonen10) -1.13.0 | [#166](https://github.com/locp/cassandra/pull/166) | [@Mike-Petersen](https://github.com/Mike-Petersen) -1.13.0 | [#163](https://github.com/locp/cassandra/pull/163) | [@VeriskPuppet](https://github.com/VeriskPuppet) -1.12.2 | [#165](https://github.com/locp/cassandra/pull/165) | [@palmertime](https://github.com/palmertime) -1.12.0 | [#156](https://github.com/locp/cassandra/pull/156) | [@stuartbfox](https://github.com/stuartbfox) -1.12.0 | [#153](https://github.com/locp/cassandra/pull/153) | [@Mike-Petersen](https://github.com/Mike-Petersen) -1.10.0 | [#144](https://github.com/locp/cassandra/pull/144) | [@Mike-Petersen](https://github.com/Mike-Petersen) -1.9.2 | [#136](https://github.com/locp/cassandra/issues/136)| [@mantunovic](https://github.com/mantunovic) -1.9.2 | [#136](https://github.com/locp/cassandra/issues/136)| [@al4](https://github.com/al4) -1.4.2 | [#110](https://github.com/locp/cassandra/pull/110) | [@markasammut](https://github.com/markasammut) -1.4.0 | [#100](https://github.com/locp/cassandra/pull/100) | [@markasammut](https://github.com/markasammut) -1.3.5 | [#93](https://github.com/locp/cassandra/issues/93) | [@sampowers](https://github.com/sampowers) -1.3.3 | [#87](https://github.com/locp/cassandra/pull/87) | [@DylanGriffith](https://github.com/DylanGriffith) -0.4.2 | [#34](https://github.com/locp/cassandra/pull/34) | [@amosshapira](https://github.com/amosshapira) -0.3.0 | [#11](https://github.com/locp/cassandra/pull/11) | [@spredzy](https://github.com/Spredzy) +For a list of contributers see +[CONTRIBUTING.md](https://github.com/locp/cassandra/blob/master/CONTRIBUTING.md) +and https://github.com/locp/cassandra/graphs/contributors diff --git a/Rakefile b/Rakefile index e331773..3884284 100644 --- a/Rakefile +++ b/Rakefile @@ -1,20 +1,14 @@ require 'metadata-json-lint/rake_task' require 'puppet_blacksmith/rake_tasks' require 'puppet-strings/tasks' require 'puppetlabs_spec_helper/rake_tasks' require 'rubocop/rake_task' require 'rubygems' +# TravisCI does not require the extra module tasks. +require_relative 'rake/rake_tasks' unless ENV['TRAVIS'] == 'true' + # Use a custom pattern with git tag. %s is replaced with the version number. Blacksmith::RakeTask.new do |t| t.tag_pattern = '%s' end - -desc 'Run metadata_lint, rubocop, lint, validate and spec.' -task test: [ - :metadata_lint, - :rubocop, - :lint, - :validate, - :spec -] diff --git a/circle.yml b/circle.yml index 97b5da7..1880480 100644 --- a/circle.yml +++ b/circle.yml @@ -1,51 +1,56 @@ --- branches: ignore: - gh-pages # list of branches to ignore dependencies: bundler: without: [development] cache_directories: - - "~/.rvm/gems" + - "/opt/circleci/.rvm/gems" override: - bundle install --without development: timeout: 240 environment: PUPPET_GEM_VERSION: '~> 4.0' STRICT_VARIABLES: yes post: - rvm cleanup all deployment: master: branch: master commands: - git config --global user.email "info@locp.co.uk" - git config --global user.name "CircleCI" - - ./scripts/circle.bash deploy + - bundle exec rake strings:gh_pages:update + - bundle exec rake deploy machine: environment: BEAKER_GEM_VERSION: '<= 2.33.0' PUPPET_GEM_VERSION: '~> 4.0' STRICT_VARIABLES: yes ruby: version: 2.3.1 services: - docker notify: webhooks: - url: "https://webhooks.gitter.im/e/da8c065419a91983f0cf" test: override: - bundle exec rake metadata_lint: parallel: true - bundle exec rake rubocop: parallel: true - bundle exec rake lint: parallel: true - bundle exec rake validate: parallel: true - - bundle exec rake spec SPEC_OPTS="--format RspecJunitFormatter -o $CIRCLE_TEST_REPORTS/rspec/puppet.xml": + - bundle exec rake spec SPEC_OPTS="--format documentation --format RspecJunitFormatter -o $CIRCLE_TEST_REPORTS/rspec/puppet.xml": parallel: true - - ./scripts/circle.bash acceptance_tests: + - bundle exec puppet module install puppetlabs-aws: + parallel: true + - bundle exec rake acceptance:aws_deploy: + parallel: true + - bundle exec rake acceptance:tests: parallel: true diff --git a/config/image_templates/ec2.yaml b/config/image_templates/ec2.yaml new file mode 100644 index 0000000..a542513 --- /dev/null +++ b/config/image_templates/ec2.yaml @@ -0,0 +1,26 @@ +--- +AMI: + centos6-x86-64-euwest1: + :image: + :foss: ami-edb9069e + :region: eu-west-1 + centos7-x86-64-euwest1: + :image: + :foss: ami-7abd0209 + :region: eu-west-1 + debian8-amd-euwest1: + :image: + :foss: ami-2897d35b + :region: eu-west-1 + ubuntu1204-amd-euwest1: + :image: + :foss: ami-666e2415 + :region: eu-west-1 + ubuntu1404-amd-euwest1: + :image: + :foss: ami-a56c26d6 + :region: eu-west-1 + ubuntu1604-amd-euwest1: + :image: + :foss: ami-be3559cd + :region: eu-west-1 diff --git a/doc/_index.html b/doc/_index.html deleted file mode 100644 index 96a166e..0000000 --- a/doc/_index.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
- - - - -

Documentation by YARD 0.9.5

-
-

Alphabetic Index

- -

Puppet Class Listing A-Z

- - - - - - -
- - - - -
- - -

Defined Type Listing A-Z

- - - - - - -
- - - - -
- - - - - -

File Listing

- - -
- - -
- -
- - - -
- - \ No newline at end of file diff --git a/doc/css/common.css b/doc/css/common.css deleted file mode 100644 index cf25c45..0000000 --- a/doc/css/common.css +++ /dev/null @@ -1 +0,0 @@ -/* Override this file with custom rules */ \ No newline at end of file diff --git a/doc/css/full_list.css b/doc/css/full_list.css deleted file mode 100644 index fa35982..0000000 --- a/doc/css/full_list.css +++ /dev/null @@ -1,58 +0,0 @@ -body { - margin: 0; - font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; - font-size: 13px; - height: 101%; - overflow-x: hidden; - background: #fafafa; -} - -h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; } -.clear { clear: both; } -.fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; } -#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; } -#content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; } -#full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; } -#full_list ul { padding: 0; } -#full_list li { padding: 0; margin: 0; list-style: none; } -#full_list li .item { padding: 5px 5px 5px 12px; } -#noresults { padding: 7px 12px; background: #fff; } -#content.insearch #noresults { margin-left: 7px; } -li.collapsed ul { display: none; } -li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; } -li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; } -li { color: #888; cursor: pointer; } -li.deprecated { text-decoration: line-through; font-style: italic; } -li.odd { background: #f0f0f0; } -li.even { background: #fafafa; } -.item:hover { background: #ddd; } -li small:before { content: "("; } -li small:after { content: ")"; } -li small.search_info { display: none; } -a, a:visited { text-decoration: none; color: #05a; } -li.clicked > .item { background: #05a; color: #ccc; } -li.clicked > .item a, li.clicked > .item a:visited { color: #eee; } -li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; } -li.collapsed.clicked a.toggle { background-position: top right; } -#search input { border: 1px solid #bbb; border-radius: 3px; } -#full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; } -#full_list_nav a, #nav a:visited { color: #358; } -#full_list_nav a:hover { background: transparent; color: #5af; } -#full_list_nav span:after { content: ' | '; } -#full_list_nav span:last-child:after { content: ''; } - -#content h1 { margin-top: 0; } -li { white-space: nowrap; cursor: normal; } -li small { display: block; font-size: 0.8em; } -li small:before { content: ""; } -li small:after { content: ""; } -li small.search_info { display: none; } -#search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; } -#content.insearch #search { background-position: center right; } -#search input { width: 110px; } - -#full_list.insearch ul { display: block; } -#full_list.insearch .item { display: none; } -#full_list.insearch .found { display: block; padding-left: 11px !important; } -#full_list.insearch li a.toggle { display: none; } -#full_list.insearch li small.search_info { display: block; } diff --git a/doc/css/style.css b/doc/css/style.css deleted file mode 100644 index 55ec699..0000000 --- a/doc/css/style.css +++ /dev/null @@ -1,481 +0,0 @@ -html { - width: 100%; - height: 100%; -} -body { - font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; - font-size: 13px; - width: 100%; - margin: 0; - padding: 0; - display: flex; - display: -webkit-flex; - display: -ms-flexbox; -} - -#nav { - position: relative; - width: 100%; - height: 100%; - border: 0; - border-right: 1px dotted #eee; - overflow: auto; -} -.nav_wrap { - margin: 0; - padding: 0; - width: 20%; - height: 100%; - position: relative; - display: flex; - display: -webkit-flex; - display: -ms-flexbox; - flex-shrink: 0; - -webkit-flex-shrink: 0; - -ms-flex: 1 0; -} -#resizer { - position: absolute; - right: -5px; - top: 0; - width: 10px; - height: 100%; - cursor: col-resize; - z-index: 9999; -} -#main { - flex: 5 1; - -webkit-flex: 5 1; - -ms-flex: 5 1; - outline: none; - position: relative; - background: #fff; - padding: 1.2em; - padding-top: 0.2em; -} - -@media (max-width: 920px) { - .nav_wrap { display: none; } -} - -@media (min-width: 920px) { - body { height: 100%; overflow: hidden; } - #main { height: 100%; overflow: auto; } - #search { display: none; } - #search_frame { display: none; } -} - -#main img { max-width: 100%; } -h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; } -h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; } -h1.title { margin-bottom: 10px; } -h1.alphaindex { margin-top: 0; font-size: 22px; } -h2 { - padding: 0; - padding-bottom: 3px; - border-bottom: 1px #aaa solid; - font-size: 1.4em; - margin: 1.8em 0 0.5em; - position: relative; -} -h2 small { font-weight: normal; font-size: 0.7em; display: inline; position: absolute; right: 0; } -h2 small a { - display: block; - height: 20px; - border: 1px solid #aaa; - border-bottom: 0; - border-top-left-radius: 5px; - background: #f8f8f8; - position: relative; - padding: 2px 7px; -} -.clear { clear: both; } -.inline { display: inline; } -.inline p:first-child { display: inline; } -.docstring, .tags, #filecontents { font-size: 15px; line-height: 1.5145em; } -.docstring p > code, .docstring p > tt, .tags p > code, .tags p > tt { - color: #c7254e; background: #f9f2f4; padding: 2px 4px; font-size: 1em; - border-radius: 4px; -} -.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; } -.docstring h1 { font-size: 1.2em; } -.docstring h2 { font-size: 1.1em; } -.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; } -.summary_desc .object_link a, .docstring .object_link a { - font-family: monospace; font-size: 1.05em; - color: #05a; background: #EDF4FA; padding: 2px 4px; font-size: 1em; - border-radius: 4px; -} -.rdoc-term { padding-right: 25px; font-weight: bold; } -.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; } - -/* style for */ -#filecontents table, .docstring table { border-collapse: collapse; } -#filecontents table th, #filecontents table td, -.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; } -#filecontents table tr:nth-child(odd), -.docstring table tr:nth-child(odd) { background: #eee; } -#filecontents table tr:nth-child(even), -.docstring table tr:nth-child(even) { background: #fff; } -#filecontents table th, .docstring table th { background: #fff; } - -/* style for
    */ -#filecontents li > p, .docstring li > p { margin: 0px; } -#filecontents ul, .docstring ul { padding-left: 20px; } -/* style for
    */ -#filecontents dl, .docstring dl { border: 1px solid #ccc; } -#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; } -#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; } -#filecontents dd > p, .docstring dd > p { margin: 0px; } - -.note { - color: #222; - margin: 20px 0; - padding: 10px; - border: 1px solid #eee; - border-radius: 3px; - display: block; -} -.docstring .note { - border-left-color: #ccc; - border-left-width: 5px; -} -.note.todo { background: #ffffc5; border-color: #ececaa; } -.note.returns_void { background: #efefef; } -.note.deprecated { background: #ffe5e5; border-color: #e9dada; } -.note.title.deprecated { background: #ffe5e5; border-color: #e9dada; } -.note.private { background: #ffffc5; border-color: #ececaa; } -.note.title { padding: 3px 6px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; } -.summary_signature + .note.title { margin-left: 7px; } -h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; } -.note.title { background: #efefef; } -.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; } -.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; } -.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; } -.note.title.private { background: #d5d5d5; border-color: #c5c5c5; } -.note.title.not_defined_here { background: transparent; border: none; font-style: italic; } -.discussion .note { margin-top: 6px; } -.discussion .note:first-child { margin-top: 0; } - -h3.inherited { - font-style: italic; - font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; - font-weight: normal; - padding: 0; - margin: 0; - margin-top: 12px; - margin-bottom: 3px; - font-size: 13px; -} -p.inherited { - padding: 0; - margin: 0; - margin-left: 25px; -} - -.box_info dl { - margin: 0; - border: 0; - width: 100%; - font-size: 1em; - display: flex; - display: -webkit-flex; - display: -ms-flexbox; -} -.box_info dl dt { - flex-shrink: 0; - -webkit-flex-shrink: 1; - -ms-flex-shrink: 1; - width: 100px; - text-align: right; - font-weight: bold; - border: 1px solid #aaa; - border-width: 1px 0px 0px 1px; - padding: 6px 0; - padding-right: 10px; -} -.box_info dl dd { - flex-grow: 1; - -webkit-flex-grow: 1; - -ms-flex: 1; - max-width: 420px; - padding: 6px 0; - padding-right: 20px; - border: 1px solid #aaa; - border-width: 1px 1px 0 0; - overflow: hidden; - position: relative; -} -.box_info dl:last-child > * { - border-bottom: 1px solid #aaa; -} -.box_info dl:nth-child(odd) > * { background: #eee; } -.box_info dl:nth-child(even) > * { background: #fff; } -.box_info dl > * { margin: 0; } - -ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; } -.index_inline_list { padding-left: 0; font-size: 1.1em; } - -.index_inline_list li { - list-style: none; - display: inline-block; - padding: 0 12px; - line-height: 30px; - margin-bottom: 5px; -} - -dl.constants { margin-left: 10px; } -dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; } -dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; } -dl.constants .docstring .note:first-child { margin-top: 5px; } - -.summary_desc { - margin-left: 32px; - display: block; - font-family: sans-serif; - font-size: 1.1em; - margin-top: 8px; - line-height: 1.5145em; - margin-bottom: 0.8em; -} -.summary_desc tt { font-size: 0.9em; } -dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; } -dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; } -dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; } -dl.constants .discussion *:first-child { margin-top: 0; } -dl.constants .discussion *:last-child { margin-bottom: 0; } - -.method_details { border-top: 1px dotted #ccc; margin-top: 25px; padding-top: 0; } -.method_details.first { border: 0; margin-top: 5px; } -.method_details.first h3.signature { margin-top: 1em; } -p.signature, h3.signature { - font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace; - padding: 6px 10px; margin-top: 1em; - background: #E8F4FF; border: 1px solid #d8d8e5; border-radius: 5px; -} -p.signature tt, -h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; } -p.signature .overload, -h3.signature .overload { display: block; } -p.signature .extras, -h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; } -p.signature .not_defined_here, -h3.signature .not_defined_here, -p.signature .aliases, -h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; } -p.signature .aliases .names, -h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; } - -.tags .tag_title { font-size: 1.05em; margin-bottom: 0; font-weight: bold; } -.tags .tag_title tt { color: initial; padding: initial; background: initial; } -.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; } -.tags ul li { margin-bottom: 3px; } -.tags ul .name { font-family: monospace; font-weight: bold; } -.tags ul .note { padding: 3px 6px; } -.tags { margin-bottom: 12px; } - -.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; } -.tags .examples .inline p { padding: 0; margin: 0; font-weight: bold; font-size: 1em; } -.tags .examples .inline p:before { content: "▸"; font-size: 1em; margin-right: 5px; } - -.tags .overload .overload_item { list-style: none; margin-bottom: 25px; } -.tags .overload .overload_item .signature { - padding: 2px 8px; - background: #F1F8FF; border: 1px solid #d8d8e5; border-radius: 3px; -} -.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; } -.tags .overload .docstring { margin-top: 15px; } - -.defines { display: none; } - -#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; } - -.showSource { font-size: 0.9em; } -.showSource a, .showSource a:visited { text-decoration: none; color: #666; } - -#content a, #content a:visited { text-decoration: none; color: #05a; } -#content a:hover { background: #ffffa5; } - -ul.summary { - list-style: none; - font-family: monospace; - font-size: 1em; - line-height: 1.5em; - padding-left: 0px; -} -ul.summary a, ul.summary a:visited { - text-decoration: none; font-size: 1.1em; -} -ul.summary li { margin-bottom: 5px; } -.summary .summary_signature { - padding: 4px 8px; - background: #f8f8f8; - border: 1px solid #f0f0f0; - border-radius: 5px; -} -.summary_signature:hover { background: #CFEBFF; border-color: #A4CCDA; cursor: pointer; } -ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;} -ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; } -#content .summary_signature:hover a, -#content .summary_signature:hover a:visited { - background: transparent; - color: #049; -} - -p.inherited a { font-family: monospace; font-size: 0.9em; } -p.inherited { word-spacing: 5px; font-size: 1.2em; } - -p.children { font-size: 1.2em; } -p.children a { font-size: 0.9em; } -p.children strong { font-size: 0.8em; } -p.children strong.modules { padding-left: 5px; } - -ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; } -ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; } -ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAHtJREFUeNqMzrEJAkEURdGzuhgZbSoYWcAWoBVsB4JgZAGmphsZCZYzTQgWNCYrDN9RvMmHx+X916SUBFbo8CzD1idXrLErw1mQttgXtyrOcQ/Ny5p4Qh+2XqLYYazsPWNTiuMkRxa4vcV+evuNAUOLIx5+c2hyzv7hNQC67Q+/HHmlEwAAAABJRU5ErkJggg==) no-repeat top center; } -ul.fullTree li:first-child { padding-top: 0; background: transparent; } -ul.fullTree li:last-child { padding-bottom: 0; } -.showAll ul.fullTree { display: block; } -.showAll .inheritName { display: none; } - -#search { position: absolute; right: 12px; top: 0px; z-index: 9000; } -#search a { - display: block; float: left; - padding: 4px 8px; text-decoration: none; color: #05a; fill: #05a; - border: 1px solid #d8d8e5; - border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; - background: #F1F8FF; - box-shadow: -1px 1px 3px #ddd; -} -#search a:hover { background: #f5faff; color: #06b; fill: #06b; } -#search a.active { - background: #568; padding-bottom: 20px; color: #fff; fill: #fff; - border: 1px solid #457; - border-top-left-radius: 5px; border-top-right-radius: 5px; -} -#search a.inactive { color: #999; fill: #999; } -.inheritanceTree, .toggleDefines { - float: right; - border-left: 1px solid #aaa; - position: absolute; top: 0; right: 0; - height: 100%; - background: #f6f6f6; - padding: 5px; - min-width: 55px; - text-align: center; -} - -#menu { font-size: 1.3em; color: #bbb; } -#menu .title, #menu a { font-size: 0.7em; } -#menu .title a { font-size: 1em; } -#menu .title { color: #555; } -#menu a, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; } -#menu a:hover { color: #05a; } - -#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; } -#footer a, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; } -#footer a:hover { color: #05a; } - -#listing ul.alpha { font-size: 1.1em; } -#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; } -#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; } -#listing ul.alpha ul { margin: 0; padding-left: 15px; } -#listing ul small { color: #666; font-size: 0.7em; } - -li.r1 { background: #f0f0f0; } -li.r2 { background: #fafafa; } - -#search_frame { - z-index: 9999; - background: #fff; - display: none; - position: absolute; - top: 40px; - right: 12px; - width: 500px; - max-width: 80%; - height: 80%; - overflow-y: scroll; - border: 1px solid #999; - border-collapse: collapse; - box-shadow: -7px 5px 25px #aaa; - border-radius: 2px; -} - -#content ul.summary li.deprecated .summary_signature a, -#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; } - -#toc { - position: relative; - float: right; - overflow-x: auto; - right: -3px; - margin-left: 20px; - margin-bottom: 20px; - padding: 20px; padding-right: 30px; - max-width: 300px; - z-index: 5000; - background: #fefefe; - border: 1px solid #ddd; - box-shadow: -2px 2px 6px #bbb; -} -#toc .title { margin: 0; } -#toc ol { padding-left: 1.8em; } -#toc li { font-size: 1.1em; line-height: 1.7em; } -#toc > ol > li { font-size: 1.1em; font-weight: bold; } -#toc ol > ol { font-size: 0.9em; } -#toc ol ol > ol { padding-left: 2.3em; } -#toc ol + li { margin-top: 0.3em; } -#toc.hidden { padding: 10px; background: #fefefe; box-shadow: none; } -#toc.hidden:hover { background: #fafafa; } -#filecontents h1 + #toc.nofloat { margin-top: 0; } -@media (max-width: 560px) { - #toc { - margin-left: 0; - margin-top: 16px; - float: none; - max-width: none; - } -} - -/* syntax highlighting */ -.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; } -#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; } -#filecontents pre.code, .docstring pre.code { display: block; } -.source_code .lines { padding-right: 12px; color: #555; text-align: right; } -#filecontents pre.code, .docstring pre.code, -.tags pre.example { - padding: 9px 14px; - margin-top: 4px; - border: 1px solid #e1e1e8; - background: #f7f7f9; - border-radius: 4px; - font-size: 1em; - overflow-x: auto; - line-height: 1.2em; -} -pre.code { color: #000; tab-size: 2; } -pre.code .info.file { color: #555; } -pre.code .val { color: #036A07; } -pre.code .tstring_content, -pre.code .heredoc_beg, pre.code .heredoc_end, -pre.code .qwords_beg, pre.code .qwords_end, -pre.code .tstring, pre.code .dstring { color: #036A07; } -pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s, -pre.code .rubyid_to_sym, pre.code .rubyid_to_f, -pre.code .dot + pre.code .id, -pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; } -pre.code .comment { color: #0066FF; } -pre.code .const, pre.code .constant { color: #585CF6; } -pre.code .label, -pre.code .symbol { color: #C5060B; } -pre.code .kw, -pre.code .rubyid_require, -pre.code .rubyid_extend, -pre.code .rubyid_include { color: #0000FF; } -pre.code .ivar { color: #318495; } -pre.code .gvar, -pre.code .rubyid_backref, -pre.code .rubyid_nth_ref { color: #6D79DE; } -pre.code .regexp, .dregexp { color: #036A07; } -pre.code a { border-bottom: 1px dotted #bbf; } diff --git a/doc/file.README.html b/doc/file.README.html deleted file mode 100644 index d610a1d..0000000 --- a/doc/file.README.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - - - File: README - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -

    Cassandra

    - -

    -

    - -

    Table of Contents

    -
    1. -

      Overview

      -
    2. -

      Setup - The basics of getting started with Cassandra

      - -
    3. -

      Usage - Configuration options and additional -functionality

      - -
    4. -

      Reference

      -
    5. -

      Limitations - OS compatibility, etc.

      -
    6. -

      Contributers

      -
    - -

    Overview

    - -

    A Puppet module to install and manage Cassandra, DataStax Agent & -OpsCenter

    - -

    Setup

    - -

    What Cassandra affects

    - -

    What the Cassandra class affects

    -
    • -

      Installs the Cassandra package (default cassandra22 on Red -Hat and cassandra on Debian).

      -
    • -

      Configures settings in ${config_path}/cassandra.yaml.

      -
    • -

      On CentOS 7 if the init service provider is used, then -cassandra is added as a system service.

      -
    • -

      Optionally ensures that the Cassandra service is enabled and running.

      -
    • -

      On Debian systems:

      -
    • -

      Optionally replace /etc/init.d/cassandra with a workaround for -CASSANDRA-9822.

      -
    - -

    What the cassandra::datastax_agent class affects

    -
    • -

      Optionally installs the DataStax agent.

      -
    • -

      Optionally sets JAVA_HOME in /etc/default/datastax-agent.

      -
    - -

    What the cassandra::datastax_repo class affects

    -
    • -

      Optionally configures a Yum repository to install the Cassandra packages -from (on Red Hat).

      -
    • -

      Optionally configures an Apt repository to install the Cassandra packages -from (on Debian).

      -
    - -

    What the cassandra::firewall_ports class affects

    -
    • -

      Optionally configures the firewall for the Cassandra related network -ports.

      -
    - -

    What the cassandra::java class affects

    -
    • -

      Optionally installs a JRE/JDK package (e.g. java-1.7.0-openjdk) and the -Java Native Access (JNA).

      -
    - -

    What the cassandra::optutils class affects

    -
    • -

      Optionally installs the Cassandra support tools (e.g. cassandra22-tools).

      -
    - -

    Upgrading

    - -

    We follow SemVer Versioning and an update -of the major release (i.e. from 1.Y.Z to -2.Y.Z) will indicate a significant change to the API -which will most probably require a change to your manifest.

    - -

    Changes in 2.0.0

    - -

    This is a major change to the API and you will more than likely need to -change your manifest to accomodate these changes.

    - -

    The service_ensure attribute of the cassandra class now -defaults to undef, users who do want to manage service status in -Puppet can still set it to true. If leaving the value at the default and -setting service_refresh and service_enable to -false will mean that the user and not Puppet running will control the -running state of Cassandra. This currently works OK on the Red Hat family, -but has issues on Debian due to CASSANDRA-2356 -during an initial install or package upgrade.

    - -

    All the functionality relating to OpsCenter has been divested to the locp/opscenter module on -Puppet Forge.

    - -

    It should also be noted that the module no longer creates directories for -the data, commitlog, saved_caches -and for Cassandra 3 the hints directory. These resources will -now need to be defined in your manifest/profile.

    - -

    For a list of features that have been deprecated in this release, please -see github.com/locp/cassandra/wiki/Deprecations

    - -

    For details on migrating from the version 1.X.X attributes to the -settings hash, see github.com/locp/cassandra/wiki/Version-1.X.Y-Template-Defaults-Shown-As-2.X.Y-Hash

    - -

    Please also see the notes for 2.0.0 in the CHANGELOG.

    - -

    Changes in 1.19.0

    - -

    The hints_directory documentation will cause a change in the cassandra.yaml -file regardless of the value you set it to. If you do not wish this to -result in a refesh of the Cassandra service, please set service_refresh to -false.

    - -

    Changes in 1.9.2

    - -

    Now that Cassandra 3 is available from the DataStax repositories, there is -a problem (especially on Debian) with the operating system package manager -attempting to install Cassandra 3. This can be mitigated against using -something similar to the code in this modules acceptance test. Please note -that the default Cassandra package name has now been changed from -'dsc'. See the documentation for cassandra::package_name below for -details.

    - -
    if $::osfamily == 'RedHat' {
    -   $version = '2.2.4-1'
    - } else {
    -   $version = '2.2.4'
    - }
    -
    - class { 'cassandra':
    -   package_ensure => $version,
    - }
    - -

    Changes in 1.8.0

    - -

    A somewhat embarrassing correction to the spelling of the -cassandra::fail_on_non_suppoted_os to cassandra::fail_on_non_supported_os.

    - -

    Issues when Upgrading to 1.4.0

    - -

    Unfortunately both releases 1.3.7 and 1.4.0 have subsequently been found to -call a refresh service even when no changes had been made to the underlying -configuration. In release 1.8.0 (somewhat belatedly) the service_refresh -flag has been introduced to mitigate against similar problems.

    - -

    Issues When Upgrading to 1.3.7

    -
    • -

      Please see the notes for 1.4.0.

      -
    - -

    Changes in 1.0.0

    -
    • -

      cassandra::cassandra_package_ensure has been renamed to -cassandra::package_ensure.

      -
    • -

      cassandra::cassandra_package_name has been renamed to -cassandra::package_name.

      -
    - -

    Changes in 0.4.0

    - -

    There is now a cassandra::datastax_agent class, therefore:

    -
    • -

      cassandra::datastax_agent_package_ensure has now been replaced with -cassandra::datastax_agent::package_ensure.

      -
    • -

      cassandra::datastax_agent_service_enable has now been replaced with -cassandra::datastax_agent::service_enable.

      -
    • -

      cassandra::datastax_agent_service_ensure has now been replaced with -cassandra::datastax_agent::service_ensure.

      -
    • -

      cassandra::datastax_agent_package_name has now been replaced with -cassandra::datastax_agent::package_name.

      -
    • -

      cassandra::datastax_agent_service_name has now been replaced with -cassandra::datastax_agent::service_name.

      -
    - -

    Likewise now there is a new class for handling the installation of Java:

    -
    • -

      cassandra::java_package_ensure has now been replaced with -cassandra::java::ensure.

      -
    • -

      cassandra::java_package_name has now been replaced with -cassandra::java::package_name.

      -
    - -

    Also there is now a class for installing the optional utilities:

    -
    • -

      cassandra::cassandra_opt_package_ensure has now been replaced with -cassandra::optutils:ensure.

      -
    • -

      cassandra::cassandra_opt_package_name has now been replaced with -cassandra::optutils:package_name.

      -
    - -

    Changes in 0.3.0

    -
    • -

      cassandra_opt_package_ensure changed from 'present' to undef.

      -
    • -

      The manage_service option has been replaced with service_enable and -service_ensure.

      -
    - -

    Beginning with Cassandra

    - -

    Create a Cassandra 2.X cluster called MyCassandraCluster which uses the -GossipingPropertyFileSnitch and password authentication. In this very basic -example the node itself becomes a seed for the cluster and the credentials -will default to a user called cassandra with a password called of -cassandra..

    - -
    # Cassandra pre-requisites
    -include cassandra::datastax_repo
    -include cassandra::java
    -
    -class { 'cassandra':
    -  settings => {
    -    'authenticator'               => 'PasswordAuthenticator',
    -    'cluster_name'                => 'MyCassandraCluster',
    -    'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -    'commitlog_sync'              => 'periodic',
    -    'commitlog_sync_period_in_ms' => 10000,
    -    'data_file_directories'       => ['/var/lib/cassandra/data'],
    -    'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -    'listen_address'              => $::ipaddress,
    -    'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -    'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -    'seed_provider'               => [
    -      {
    -        'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -        'parameters' => [
    -          {
    -            'seeds' => $::ipaddress,
    -          },
    -        ],
    -      },
    -    ],
    -    'start_native_transport'      => true,
    -  },
    -  require  => Class['cassandra::datastax_repo', 'cassandra::java'],
    -}
    - -

    For this code to run with version 3.X of Cassandra, the -hints_directory will also need to be specified:

    - -
    ...
    -
    -class { 'cassandra':
    -  settings => {
    -    ...
    -    'hints_directory'             => '/var/lib/cassandra/hints',
    -    ...
    -  },
    -  require  => Class['cassandra::datastax_repo', 'cassandra::java'],
    -}
    - -

    Usage

    - -

    Setup a keyspace and users

    - -

    We assume that authentication has been enabled for the cassandra cluster -and we are connecting with the default user name and password -('cassandra/cassandra').

    - -

    In this example, we create a keyspace (mykeyspace) with a table called -'users' and an index called 'users_lname_idx'.

    - -

    We also add three users (to Cassandra, not the mykeyspace.users table) -called spillman, akers and boone while ensuring that a user called lucan is -absent.

    - -
    class { 'cassandra':
    -  ...
    -}
    -
    -class { 'cassandra::schema':
    -  cqlsh_password => 'cassandra',
    -  cqlsh_user     => 'cassandra',
    -  cqlsh_host     => $::ipaddress,
    -  indexes        => {
    -    'users_lname_idx' => {
    -      table    => 'users',
    -      keys     => 'lname',
    -      keyspace => 'mykeyspace',
    -    },
    -  },
    -  keyspaces      => {
    -    'mykeyspace' => {
    -      durable_writes  => false,
    -      replication_map => {
    -        keyspace_class     => 'SimpleStrategy',
    -        replication_factor => 1,
    -      },
    -    }
    -  },
    -  tables         => {
    -    'users' => {
    -      columns  => {
    -        user_id       => 'int',
    -        fname         => 'text',
    -        lname         => 'text',
    -        'PRIMARY KEY' => '(user_id)',
    -      },
    -      keyspace => 'mykeyspace',
    -    },
    -  },
    -  users          => {
    -    'spillman' => {
    -      password => 'Niner27',
    -    },
    -    'akers'    => {
    -      password  => 'Niner2',
    -      superuser => true,
    -    },
    -    'boone'    => {
    -      password => 'Niner75',
    -    },
    -    'lucan'    => {
    -      'ensure' => absent
    -    },
    -  },
    -}
    - -

    Create a Cluster in a Single Data Center

    - -

    In the DataStax documentation Initializing a multiple node cluster -(single data center) docs.datastax.com/en/cassandra/2.2/cassandra/initialize/initSingleDS.html -there is a basic example of a six node cluster with two seeds to be created -in a single data center spanning two racks. The nodes in the cluster are:

    - -

    Node Name | IP Address | —————|—————-| -node0 (seed 1) | 110.82.155.0 | node1 | 110.82.155.1 | node2 | 110.82.155.2 -| node3 (seed 2) | 110.82.156.3 | node4 | 110.82.156.4 | node5 | -110.82.156.5 |

    - -

    Each node is configured to use the GossipingPropertyFileSnitch and 256 -virtual nodes (vnodes). The name of the cluster is -MyCassandraCluster. Also, while building the initial cluster, we -are setting the auto_bootstrap to false.

    - -

    In this initial example, we are going to expand the example by:

    -
    • -

      Ensuring that the software is installed via the DataStax Community -repository by including cassandra::datastax_repo. This needs -to be executed before the Cassandra package is installed.

      -
    • -

      That a suitable Java Runtime environment (JRE) is installed with Java -Native Access (JNA) by including cassandra::java. This need -to be executed before the Cassandra service is started.

      -
    - -
    node /^node\d+$/ {
    -  class { 'cassandra::datastax_repo':
    -    before => Class['cassandra']
    -  }
    -
    -  class { 'cassandra::java':
    -    before => Class['cassandra']
    -  }
    -
    -  class { 'cassandra':
    -    settings       => {
    -      'authenticator'               => 'AllowAllAuthenticator',
    -      'auto_bootstrap'              => false,
    -      'cluster_name'                => 'MyCassandraCluster',
    -      'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -      'commitlog_sync'              => 'periodic',
    -      'commitlog_sync_period_in_ms' => 10000,
    -      'data_file_directories'       => ['/var/lib/cassandra/data'],
    -      'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -      'hints_directory'             => '/var/lib/cassandra/hints',
    -      'listen_interface'            => 'eth1',
    -      'num_tokens'                  => 256,
    -      'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -      'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -      'seed_provider'               => [
    -        {
    -          'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -          'parameters' => [
    -            {
    -              'seeds' => '110.82.155.0,110.82.156.3',
    -            },
    -          ],
    -        },
    -      ],
    -      'start_native_transport'      => true,
    -    },
    -  }
    -}
    - -

    The default value for the num_tokens is already 256, but it is included in -the example for clarity. Do not forget to either set auto_bootstrap to true -or not set the attribute at all after initializing the cluster.

    - -

    Create a Cluster in Multiple Data Centers

    - -

    To continue with the examples provided by DataStax, we look at the example -for a cluster across multiple data centers docs.datastax.com/en/cassandra/2.2/cassandra/initialize/initMultipleDS.html.

    - -

    Node Name | IP Address | Data -Center | Rack | —————|—————-|—————–|———-| node0 -(seed 1) | 10.168.66.41 | DC1 | RAC1 | node1 | 10.176.43.66 | DC1 | RAC1 | -node2 | 10.168.247.41 | DC1 | RAC1 | node3 (seed 2) | 10.176.170.59 | DC2 | -RAC1 | node4 | 10.169.61.170 | DC2 | RAC1 | node5 | 10.169.30.138 | DC2 | -RAC1 |

    - -

    For the sake of simplicity, we will confine this example to the nodes:

    - -
    node /^node[012]$/ {
    -  class { 'cassandra':
    -    dc             => 'DC1',
    -    settings       => {
    -      'authenticator'               => 'AllowAllAuthenticator',
    -      'auto_bootstrap'              => false,
    -      'cluster_name'                => 'MyCassandraCluster',
    -      'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -      'commitlog_sync'              => 'periodic',
    -      'commitlog_sync_period_in_ms' => 10000,
    -      'data_file_directories'       => ['/var/lib/cassandra/data'],
    -      'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -      'hints_directory'             => '/var/lib/cassandra/hints',
    -      'listen_interface'            => 'eth1',
    -      'num_tokens'                  => 256,
    -      'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -      'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -      'seed_provider'               => [
    -        {
    -          'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -          'parameters' => [
    -            {
    -              'seeds' => '110.82.155.0,110.82.156.3',
    -            },
    -          ],
    -        },
    -      ],
    -      'start_native_transport'      => true,
    -    },
    -  }
    -}
    -
    -node /^node[345]$/ {
    -  class { 'cassandra':
    -    dc             => 'DC2',
    -    settings       => {
    -      'authenticator'               => 'AllowAllAuthenticator',
    -      'auto_bootstrap'              => false,
    -      'cluster_name'                => 'MyCassandraCluster',
    -      'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -      'commitlog_sync'              => 'periodic',
    -      'commitlog_sync_period_in_ms' => 10000,
    -      'data_file_directories'       => ['/var/lib/cassandra/data'],
    -      'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -      'hints_directory'             => '/var/lib/cassandra/hints',
    -      'listen_interface'            => 'eth1',
    -      'num_tokens'                  => 256,
    -      'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -      'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -      'seed_provider'               => [
    -        {
    -          'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -          'parameters' => [
    -            {
    -              'seeds' => '110.82.155.0,110.82.156.3',
    -            },
    -          ],
    -        },
    -      ],
    -      'start_native_transport'      => true,
    -    },
    -  }
    -}
    - -

    We don't need to specify the rack name (with the rack attribute) as -RAC1 is the default value. Again, do not forget to either set -auto_bootstrap to true or not set the attribute at all after initializing -the cluster.

    - -

    Reference

    - -

    Public Classes

    - - -

    Public Defined Types

    - - -

    Private Defined Types

    - - -

    Facts

    - - -

    Limitations

    - -

    When using a Ruby version before 1.9.0, the contents of the Cassandra -configuration file may change order of elementsdue to a problem with -to_yaml in earlier versions of Ruby.

    - -

    When creating key spaces, indexes, cql_types and users the settings will -only be used to create a new resource if it does not currently exist. If a -change is made to the Puppet manifest but the resource already exits, this -change will not be reflected.

    - -

    Contributers

    - -

    Contributions will be gratefully accepted. Please go to the project page, -fork the project, make your changes locally and then raise a pull request. -Details on how to do this are available at guides.github.com/activities/contributing-to-open-source.

    - -

    Please also see the CONTRIBUTING.md -page for project specific requirements.

    - -

    Additional Contributers

    - -

    Release | PR/Issue | -Contributer ————-|—————————————————–|—————————————————- -2.0.2 | #291| @ericy-jana 2.0.0 | #266| @stanleyz 1.25.2 | #269| @ahharu 1.25.1 | #264| @pampelix 1.25.0 | #261 | @tibers 1.24.0 | #247 | @ericy-jana 1.24.0 | #246 | @ericy-jana 1.24.0 | #245| @ericy-jana 1.23.0 | #235 | @tibers 1.22.1 | #233 | @tibers 1.22.1 | #232| @tibers 1.21.0 | #226 | @tibers 1.20.0 | #217| @samyray 1.19.0 | #215 | @tibers 1.18.0 | #203 | @Mike-Petersen 1.15.0 | #189 | @tibers 1.14.0 | #171 | @jonen10 1.13.0 | #166 | @Mike-Petersen 1.13.0 | #163 | @VeriskPuppet 1.12.2 | #165 | @palmertime 1.12.0 | #156 | @stuartbfox 1.12.0 | #153 | @Mike-Petersen 1.10.0 | #144 | @Mike-Petersen 1.9.2 | #136| @mantunovic 1.9.2 | #136| @al4 1.4.2 | #110 | @markasammut 1.4.0 | #100 | @markasammut 1.3.5 | #93 | @sampowers 1.3.3 | #87 | @DylanGriffith 0.4.2 | #34 | @amosshapira 0.3.0 | #11 | @spredzy

    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/frames.html b/doc/frames.html deleted file mode 100644 index 1479606..0000000 --- a/doc/frames.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Documentation by YARD 0.9.5 - - - - diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index 0b39bbf..0000000 --- a/doc/index.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - - - File: README - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -

    Cassandra

    - -

    -

    - -

    Table of Contents

    -
    1. -

      Overview

      -
    2. -

      Setup - The basics of getting started with Cassandra

      - -
    3. -

      Usage - Configuration options and additional -functionality

      - -
    4. -

      Reference

      -
    5. -

      Limitations - OS compatibility, etc.

      -
    6. -

      Contributers

      -
    - -

    Overview

    - -

    A Puppet module to install and manage Cassandra, DataStax Agent & -OpsCenter

    - -

    Setup

    - -

    What Cassandra affects

    - -

    What the Cassandra class affects

    -
    • -

      Installs the Cassandra package (default cassandra22 on Red -Hat and cassandra on Debian).

      -
    • -

      Configures settings in ${config_path}/cassandra.yaml.

      -
    • -

      On CentOS 7 if the init service provider is used, then -cassandra is added as a system service.

      -
    • -

      Optionally ensures that the Cassandra service is enabled and running.

      -
    • -

      On Debian systems:

      -
    • -

      Optionally replace /etc/init.d/cassandra with a workaround for -CASSANDRA-9822.

      -
    - -

    What the cassandra::datastax_agent class affects

    -
    • -

      Optionally installs the DataStax agent.

      -
    • -

      Optionally sets JAVA_HOME in /etc/default/datastax-agent.

      -
    - -

    What the cassandra::datastax_repo class affects

    -
    • -

      Optionally configures a Yum repository to install the Cassandra packages -from (on Red Hat).

      -
    • -

      Optionally configures an Apt repository to install the Cassandra packages -from (on Debian).

      -
    - -

    What the cassandra::firewall_ports class affects

    -
    • -

      Optionally configures the firewall for the Cassandra related network -ports.

      -
    - -

    What the cassandra::java class affects

    -
    • -

      Optionally installs a JRE/JDK package (e.g. java-1.7.0-openjdk) and the -Java Native Access (JNA).

      -
    - -

    What the cassandra::optutils class affects

    -
    • -

      Optionally installs the Cassandra support tools (e.g. cassandra22-tools).

      -
    - -

    Upgrading

    - -

    We follow SemVer Versioning and an update -of the major release (i.e. from 1.Y.Z to -2.Y.Z) will indicate a significant change to the API -which will most probably require a change to your manifest.

    - -

    Changes in 2.0.0

    - -

    This is a major change to the API and you will more than likely need to -change your manifest to accomodate these changes.

    - -

    The service_ensure attribute of the cassandra class now -defaults to undef, users who do want to manage service status in -Puppet can still set it to true. If leaving the value at the default and -setting service_refresh and service_enable to -false will mean that the user and not Puppet running will control the -running state of Cassandra. This currently works OK on the Red Hat family, -but has issues on Debian due to CASSANDRA-2356 -during an initial install or package upgrade.

    - -

    All the functionality relating to OpsCenter has been divested to the locp/opscenter module on -Puppet Forge.

    - -

    It should also be noted that the module no longer creates directories for -the data, commitlog, saved_caches -and for Cassandra 3 the hints directory. These resources will -now need to be defined in your manifest/profile.

    - -

    For a list of features that have been deprecated in this release, please -see github.com/locp/cassandra/wiki/Deprecations

    - -

    For details on migrating from the version 1.X.X attributes to the -settings hash, see github.com/locp/cassandra/wiki/Version-1.X.Y-Template-Defaults-Shown-As-2.X.Y-Hash

    - -

    Please also see the notes for 2.0.0 in the CHANGELOG.

    - -

    Changes in 1.19.0

    - -

    The hints_directory documentation will cause a change in the cassandra.yaml -file regardless of the value you set it to. If you do not wish this to -result in a refesh of the Cassandra service, please set service_refresh to -false.

    - -

    Changes in 1.9.2

    - -

    Now that Cassandra 3 is available from the DataStax repositories, there is -a problem (especially on Debian) with the operating system package manager -attempting to install Cassandra 3. This can be mitigated against using -something similar to the code in this modules acceptance test. Please note -that the default Cassandra package name has now been changed from -'dsc'. See the documentation for cassandra::package_name below for -details.

    - -
    if $::osfamily == 'RedHat' {
    -   $version = '2.2.4-1'
    - } else {
    -   $version = '2.2.4'
    - }
    -
    - class { 'cassandra':
    -   package_ensure => $version,
    - }
    - -

    Changes in 1.8.0

    - -

    A somewhat embarrassing correction to the spelling of the -cassandra::fail_on_non_suppoted_os to cassandra::fail_on_non_supported_os.

    - -

    Issues when Upgrading to 1.4.0

    - -

    Unfortunately both releases 1.3.7 and 1.4.0 have subsequently been found to -call a refresh service even when no changes had been made to the underlying -configuration. In release 1.8.0 (somewhat belatedly) the service_refresh -flag has been introduced to mitigate against similar problems.

    - -

    Issues When Upgrading to 1.3.7

    -
    • -

      Please see the notes for 1.4.0.

      -
    - -

    Changes in 1.0.0

    -
    • -

      cassandra::cassandra_package_ensure has been renamed to -cassandra::package_ensure.

      -
    • -

      cassandra::cassandra_package_name has been renamed to -cassandra::package_name.

      -
    - -

    Changes in 0.4.0

    - -

    There is now a cassandra::datastax_agent class, therefore:

    -
    • -

      cassandra::datastax_agent_package_ensure has now been replaced with -cassandra::datastax_agent::package_ensure.

      -
    • -

      cassandra::datastax_agent_service_enable has now been replaced with -cassandra::datastax_agent::service_enable.

      -
    • -

      cassandra::datastax_agent_service_ensure has now been replaced with -cassandra::datastax_agent::service_ensure.

      -
    • -

      cassandra::datastax_agent_package_name has now been replaced with -cassandra::datastax_agent::package_name.

      -
    • -

      cassandra::datastax_agent_service_name has now been replaced with -cassandra::datastax_agent::service_name.

      -
    - -

    Likewise now there is a new class for handling the installation of Java:

    -
    • -

      cassandra::java_package_ensure has now been replaced with -cassandra::java::ensure.

      -
    • -

      cassandra::java_package_name has now been replaced with -cassandra::java::package_name.

      -
    - -

    Also there is now a class for installing the optional utilities:

    -
    • -

      cassandra::cassandra_opt_package_ensure has now been replaced with -cassandra::optutils:ensure.

      -
    • -

      cassandra::cassandra_opt_package_name has now been replaced with -cassandra::optutils:package_name.

      -
    - -

    Changes in 0.3.0

    -
    • -

      cassandra_opt_package_ensure changed from 'present' to undef.

      -
    • -

      The manage_service option has been replaced with service_enable and -service_ensure.

      -
    - -

    Beginning with Cassandra

    - -

    Create a Cassandra 2.X cluster called MyCassandraCluster which uses the -GossipingPropertyFileSnitch and password authentication. In this very basic -example the node itself becomes a seed for the cluster and the credentials -will default to a user called cassandra with a password called of -cassandra..

    - -
    # Cassandra pre-requisites
    -include cassandra::datastax_repo
    -include cassandra::java
    -
    -class { 'cassandra':
    -  settings => {
    -    'authenticator'               => 'PasswordAuthenticator',
    -    'cluster_name'                => 'MyCassandraCluster',
    -    'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -    'commitlog_sync'              => 'periodic',
    -    'commitlog_sync_period_in_ms' => 10000,
    -    'data_file_directories'       => ['/var/lib/cassandra/data'],
    -    'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -    'listen_address'              => $::ipaddress,
    -    'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -    'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -    'seed_provider'               => [
    -      {
    -        'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -        'parameters' => [
    -          {
    -            'seeds' => $::ipaddress,
    -          },
    -        ],
    -      },
    -    ],
    -    'start_native_transport'      => true,
    -  },
    -  require  => Class['cassandra::datastax_repo', 'cassandra::java'],
    -}
    - -

    For this code to run with version 3.X of Cassandra, the -hints_directory will also need to be specified:

    - -
    ...
    -
    -class { 'cassandra':
    -  settings => {
    -    ...
    -    'hints_directory'             => '/var/lib/cassandra/hints',
    -    ...
    -  },
    -  require  => Class['cassandra::datastax_repo', 'cassandra::java'],
    -}
    - -

    Usage

    - -

    Setup a keyspace and users

    - -

    We assume that authentication has been enabled for the cassandra cluster -and we are connecting with the default user name and password -('cassandra/cassandra').

    - -

    In this example, we create a keyspace (mykeyspace) with a table called -'users' and an index called 'users_lname_idx'.

    - -

    We also add three users (to Cassandra, not the mykeyspace.users table) -called spillman, akers and boone while ensuring that a user called lucan is -absent.

    - -
    class { 'cassandra':
    -  ...
    -}
    -
    -class { 'cassandra::schema':
    -  cqlsh_password => 'cassandra',
    -  cqlsh_user     => 'cassandra',
    -  cqlsh_host     => $::ipaddress,
    -  indexes        => {
    -    'users_lname_idx' => {
    -      table    => 'users',
    -      keys     => 'lname',
    -      keyspace => 'mykeyspace',
    -    },
    -  },
    -  keyspaces      => {
    -    'mykeyspace' => {
    -      durable_writes  => false,
    -      replication_map => {
    -        keyspace_class     => 'SimpleStrategy',
    -        replication_factor => 1,
    -      },
    -    }
    -  },
    -  tables         => {
    -    'users' => {
    -      columns  => {
    -        user_id       => 'int',
    -        fname         => 'text',
    -        lname         => 'text',
    -        'PRIMARY KEY' => '(user_id)',
    -      },
    -      keyspace => 'mykeyspace',
    -    },
    -  },
    -  users          => {
    -    'spillman' => {
    -      password => 'Niner27',
    -    },
    -    'akers'    => {
    -      password  => 'Niner2',
    -      superuser => true,
    -    },
    -    'boone'    => {
    -      password => 'Niner75',
    -    },
    -    'lucan'    => {
    -      'ensure' => absent
    -    },
    -  },
    -}
    - -

    Create a Cluster in a Single Data Center

    - -

    In the DataStax documentation Initializing a multiple node cluster -(single data center) docs.datastax.com/en/cassandra/2.2/cassandra/initialize/initSingleDS.html -there is a basic example of a six node cluster with two seeds to be created -in a single data center spanning two racks. The nodes in the cluster are:

    - -

    Node Name | IP Address | —————|—————-| -node0 (seed 1) | 110.82.155.0 | node1 | 110.82.155.1 | node2 | 110.82.155.2 -| node3 (seed 2) | 110.82.156.3 | node4 | 110.82.156.4 | node5 | -110.82.156.5 |

    - -

    Each node is configured to use the GossipingPropertyFileSnitch and 256 -virtual nodes (vnodes). The name of the cluster is -MyCassandraCluster. Also, while building the initial cluster, we -are setting the auto_bootstrap to false.

    - -

    In this initial example, we are going to expand the example by:

    -
    • -

      Ensuring that the software is installed via the DataStax Community -repository by including cassandra::datastax_repo. This needs -to be executed before the Cassandra package is installed.

      -
    • -

      That a suitable Java Runtime environment (JRE) is installed with Java -Native Access (JNA) by including cassandra::java. This need -to be executed before the Cassandra service is started.

      -
    - -
    node /^node\d+$/ {
    -  class { 'cassandra::datastax_repo':
    -    before => Class['cassandra']
    -  }
    -
    -  class { 'cassandra::java':
    -    before => Class['cassandra']
    -  }
    -
    -  class { 'cassandra':
    -    settings       => {
    -      'authenticator'               => 'AllowAllAuthenticator',
    -      'auto_bootstrap'              => false,
    -      'cluster_name'                => 'MyCassandraCluster',
    -      'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -      'commitlog_sync'              => 'periodic',
    -      'commitlog_sync_period_in_ms' => 10000,
    -      'data_file_directories'       => ['/var/lib/cassandra/data'],
    -      'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -      'hints_directory'             => '/var/lib/cassandra/hints',
    -      'listen_interface'            => 'eth1',
    -      'num_tokens'                  => 256,
    -      'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -      'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -      'seed_provider'               => [
    -        {
    -          'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -          'parameters' => [
    -            {
    -              'seeds' => '110.82.155.0,110.82.156.3',
    -            },
    -          ],
    -        },
    -      ],
    -      'start_native_transport'      => true,
    -    },
    -  }
    -}
    - -

    The default value for the num_tokens is already 256, but it is included in -the example for clarity. Do not forget to either set auto_bootstrap to true -or not set the attribute at all after initializing the cluster.

    - -

    Create a Cluster in Multiple Data Centers

    - -

    To continue with the examples provided by DataStax, we look at the example -for a cluster across multiple data centers docs.datastax.com/en/cassandra/2.2/cassandra/initialize/initMultipleDS.html.

    - -

    Node Name | IP Address | Data -Center | Rack | —————|—————-|—————–|———-| node0 -(seed 1) | 10.168.66.41 | DC1 | RAC1 | node1 | 10.176.43.66 | DC1 | RAC1 | -node2 | 10.168.247.41 | DC1 | RAC1 | node3 (seed 2) | 10.176.170.59 | DC2 | -RAC1 | node4 | 10.169.61.170 | DC2 | RAC1 | node5 | 10.169.30.138 | DC2 | -RAC1 |

    - -

    For the sake of simplicity, we will confine this example to the nodes:

    - -
    node /^node[012]$/ {
    -  class { 'cassandra':
    -    dc             => 'DC1',
    -    settings       => {
    -      'authenticator'               => 'AllowAllAuthenticator',
    -      'auto_bootstrap'              => false,
    -      'cluster_name'                => 'MyCassandraCluster',
    -      'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -      'commitlog_sync'              => 'periodic',
    -      'commitlog_sync_period_in_ms' => 10000,
    -      'data_file_directories'       => ['/var/lib/cassandra/data'],
    -      'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -      'hints_directory'             => '/var/lib/cassandra/hints',
    -      'listen_interface'            => 'eth1',
    -      'num_tokens'                  => 256,
    -      'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -      'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -      'seed_provider'               => [
    -        {
    -          'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -          'parameters' => [
    -            {
    -              'seeds' => '110.82.155.0,110.82.156.3',
    -            },
    -          ],
    -        },
    -      ],
    -      'start_native_transport'      => true,
    -    },
    -  }
    -}
    -
    -node /^node[345]$/ {
    -  class { 'cassandra':
    -    dc             => 'DC2',
    -    settings       => {
    -      'authenticator'               => 'AllowAllAuthenticator',
    -      'auto_bootstrap'              => false,
    -      'cluster_name'                => 'MyCassandraCluster',
    -      'commitlog_directory'         => '/var/lib/cassandra/commitlog',
    -      'commitlog_sync'              => 'periodic',
    -      'commitlog_sync_period_in_ms' => 10000,
    -      'data_file_directories'       => ['/var/lib/cassandra/data'],
    -      'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
    -      'hints_directory'             => '/var/lib/cassandra/hints',
    -      'listen_interface'            => 'eth1',
    -      'num_tokens'                  => 256,
    -      'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
    -      'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
    -      'seed_provider'               => [
    -        {
    -          'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
    -          'parameters' => [
    -            {
    -              'seeds' => '110.82.155.0,110.82.156.3',
    -            },
    -          ],
    -        },
    -      ],
    -      'start_native_transport'      => true,
    -    },
    -  }
    -}
    - -

    We don't need to specify the rack name (with the rack attribute) as -RAC1 is the default value. Again, do not forget to either set -auto_bootstrap to true or not set the attribute at all after initializing -the cluster.

    - -

    Reference

    - -

    Public Classes

    - - -

    Public Defined Types

    - - -

    Private Defined Types

    - - -

    Facts

    - - -

    Limitations

    - -

    When using a Ruby version before 1.9.0, the contents of the Cassandra -configuration file may change order of elementsdue to a problem with -to_yaml in earlier versions of Ruby.

    - -

    When creating key spaces, indexes, cql_types and users the settings will -only be used to create a new resource if it does not currently exist. If a -change is made to the Puppet manifest but the resource already exits, this -change will not be reflected.

    - -

    Contributers

    - -

    Contributions will be gratefully accepted. Please go to the project page, -fork the project, make your changes locally and then raise a pull request. -Details on how to do this are available at guides.github.com/activities/contributing-to-open-source.

    - -

    Please also see the CONTRIBUTING.md -page for project specific requirements.

    - -

    Additional Contributers

    - -

    Release | PR/Issue | -Contributer ————-|—————————————————–|—————————————————- -2.0.2 | #291| @ericy-jana 2.0.0 | #266| @stanleyz 1.25.2 | #269| @ahharu 1.25.1 | #264| @pampelix 1.25.0 | #261 | @tibers 1.24.0 | #247 | @ericy-jana 1.24.0 | #246 | @ericy-jana 1.24.0 | #245| @ericy-jana 1.23.0 | #235 | @tibers 1.22.1 | #233 | @tibers 1.22.1 | #232| @tibers 1.21.0 | #226 | @tibers 1.20.0 | #217| @samyray 1.19.0 | #215 | @tibers 1.18.0 | #203 | @Mike-Petersen 1.15.0 | #189 | @tibers 1.14.0 | #171 | @jonen10 1.13.0 | #166 | @Mike-Petersen 1.13.0 | #163 | @VeriskPuppet 1.12.2 | #165 | @palmertime 1.12.0 | #156 | @stuartbfox 1.12.0 | #153 | @Mike-Petersen 1.10.0 | #144 | @Mike-Petersen 1.9.2 | #136| @mantunovic 1.9.2 | #136| @al4 1.4.2 | #110 | @markasammut 1.4.0 | #100 | @markasammut 1.3.5 | #93 | @sampowers 1.3.3 | #87 | @DylanGriffith 0.4.2 | #34 | @amosshapira 0.3.0 | #11 | @spredzy

    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/js/app.js b/doc/js/app.js deleted file mode 100644 index c9d6aff..0000000 --- a/doc/js/app.js +++ /dev/null @@ -1,243 +0,0 @@ -(function() { - -var localStorage = {}, sessionStorage = {}; -try { localStorage = window.localStorage; } catch (e) { } -try { sessionStorage = window.sessionStorage; } catch (e) { } - -function createSourceLinks() { - $('.method_details_list .source_code'). - before("[View source]"); - $('.toggleSource').toggle(function() { - $(this).parent().nextAll('.source_code').slideDown(100); - $(this).text("Hide source"); - }, - function() { - $(this).parent().nextAll('.source_code').slideUp(100); - $(this).text("View source"); - }); -} - -function createDefineLinks() { - var tHeight = 0; - $('.defines').after(" more..."); - $('.toggleDefines').toggle(function() { - tHeight = $(this).parent().prev().height(); - $(this).prev().css('display', 'inline'); - $(this).parent().prev().height($(this).parent().height()); - $(this).text("(less)"); - }, - function() { - $(this).prev().hide(); - $(this).parent().prev().height(tHeight); - $(this).text("more..."); - }); -} - -function createFullTreeLinks() { - var tHeight = 0; - $('.inheritanceTree').toggle(function() { - tHeight = $(this).parent().prev().height(); - $(this).parent().toggleClass('showAll'); - $(this).text("(hide)"); - $(this).parent().prev().height($(this).parent().height()); - }, - function() { - $(this).parent().toggleClass('showAll'); - $(this).parent().prev().height(tHeight); - $(this).text("show all"); - }); -} - -function searchFrameButtons() { - $('.full_list_link').click(function() { - toggleSearchFrame(this, $(this).attr('href')); - return false; - }); - window.addEventListener('message', function(e) { - if (e.data === 'navEscape') { - $('#search_frame').slideUp(100); - $('#search a').removeClass('active inactive'); - $(window).focus(); - } - }); - - $(window).resize(function() { - if ($('#search:visible').length === 0) { - $('#search_frame').slideUp(100); - $('#search a').removeClass('active inactive'); - $(window).focus(); - } - }); -} - -function toggleSearchFrame(id, link) { - var frame = $('#search_frame'); - $('#search a').removeClass('active').addClass('inactive'); - if (frame.attr('src') === link && frame.css('display') !== "none") { - frame.slideUp(100); - $('#search a').removeClass('active inactive'); - } - else { - $(id).addClass('active').removeClass('inactive'); - if (frame.attr('src') !== link) frame.attr('src', link); - frame.slideDown(100); - } -} - -function linkSummaries() { - $('.summary_signature').click(function() { - document.location = $(this).find('a').attr('href'); - }); -} - -function summaryToggle() { - $('.summary_toggle').click(function(e) { - e.preventDefault(); - localStorage.summaryCollapsed = $(this).text(); - $('.summary_toggle').each(function() { - $(this).text($(this).text() == "collapse" ? "expand" : "collapse"); - var next = $(this).parent().parent().nextAll('ul.summary').first(); - if (next.hasClass('compact')) { - next.toggle(); - next.nextAll('ul.summary').first().toggle(); - } - else if (next.hasClass('summary')) { - var list = $('
      '); - list.html(next.html()); - list.find('.summary_desc, .note').remove(); - list.find('a').each(function() { - $(this).html($(this).find('strong').html()); - $(this).parent().html($(this)[0].outerHTML); - }); - next.before(list); - next.toggle(); - } - }); - return false; - }); - if (localStorage.summaryCollapsed == "collapse") { - $('.summary_toggle').first().click(); - } else { localStorage.summaryCollapsed = "expand"; } -} - -function generateTOC() { - if ($('#filecontents').length === 0) return; - var _toc = $('
        '); - var show = false; - var toc = _toc; - var counter = 0; - var tags = ['h2', 'h3', 'h4', 'h5', 'h6']; - var i; - if ($('#filecontents h1').length > 1) tags.unshift('h1'); - for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; } - var lastTag = parseInt(tags[0][1], 10); - $(tags.join(', ')).each(function() { - if ($(this).parents('.method_details .docstring').length != 0) return; - if (this.id == "filecontents") return; - show = true; - var thisTag = parseInt(this.tagName[1], 10); - if (this.id.length === 0) { - var proposedId = $(this).attr('toc-id'); - if (typeof(proposedId) != "undefined") this.id = proposedId; - else { - var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_'); - if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; } - this.id = proposedId; - } - } - if (thisTag > lastTag) { - for (i = 0; i < thisTag - lastTag; i++) { - var tmp = $('
          '); toc.append(tmp); toc = tmp; - } - } - if (thisTag < lastTag) { - for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent(); - } - var title = $(this).attr('toc-title'); - if (typeof(title) == "undefined") title = $(this).text(); - toc.append('
        1. ' + title + '
        2. '); - lastTag = thisTag; - }); - if (!show) return; - html = ''; - $('#content').prepend(html); - $('#toc').append(_toc); - $('#toc .hide_toc').toggle(function() { - $('#toc .top').slideUp('fast'); - $('#toc').toggleClass('hidden'); - $('#toc .title small').toggle(); - }, function() { - $('#toc .top').slideDown('fast'); - $('#toc').toggleClass('hidden'); - $('#toc .title small').toggle(); - }); -} - -function navResizeFn(e) { - if (e.which !== 1) { - navResizeFnStop(); - return; - } - - sessionStorage.navWidth = e.pageX.toString(); - $('.nav_wrap').css('width', e.pageX); - $('.nav_wrap').css('-ms-flex', 'inherit'); -} - -function navResizeFnStop() { - $(window).unbind('mousemove', navResizeFn); - window.removeEventListener('message', navMessageFn, false); -} - -function navMessageFn(e) { - if (e.data.action === 'mousemove') navResizeFn(e.data.event); - if (e.data.action === 'mouseup') navResizeFnStop(); -} - -function navResizer() { - $('#resizer').mousedown(function(e) { - e.preventDefault(); - $(window).mousemove(navResizeFn); - window.addEventListener('message', navMessageFn, false); - }); - $(window).mouseup(navResizeFnStop); - - if (sessionStorage.navWidth) { - navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)}); - } -} - -function navExpander() { - var done = false, timer = setTimeout(postMessage, 500); - function postMessage() { - if (done) return; - clearTimeout(timer); - var opts = { action: 'expand', path: pathId }; - document.getElementById('nav').contentWindow.postMessage(opts, '*'); - done = true; - } - - window.addEventListener('message', function(event) { - if (event.data === 'navReady') postMessage(); - return false; - }, false); -} - -function mainFocus() { - $('#main')[0].focus(); -} - -$(document).ready(function() { - navResizer(); - navExpander(); - createSourceLinks(); - createDefineLinks(); - createFullTreeLinks(); - searchFrameButtons(); - linkSummaries(); - summaryToggle(); - generateTOC(); - mainFocus(); -}); - -})(); diff --git a/doc/js/full_list.js b/doc/js/full_list.js deleted file mode 100644 index 59069c5..0000000 --- a/doc/js/full_list.js +++ /dev/null @@ -1,216 +0,0 @@ -(function() { - -var $clicked = $(null); -var searchTimeout = null; -var searchCache = []; -var caseSensitiveMatch = false; -var ignoreKeyCodeMin = 8; -var ignoreKeyCodeMax = 46; -var commandKey = 91; - -RegExp.escape = function(text) { - return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); -} - -function escapeShortcut() { - $(document).keydown(function(evt) { - if (evt.which == 27) { - window.parent.postMessage('navEscape', '*'); - } - }); -} - -function navResizer() { - $(window).mousemove(function(e) { - window.parent.postMessage({ - action: 'mousemove', event: {pageX: e.pageX, which: e.which} - }, '*'); - }).mouseup(function(e) { - window.parent.postMessage({action: 'mouseup'}, '*'); - }); - window.parent.postMessage("navReady", "*"); -} - -function clearSearchTimeout() { - clearTimeout(searchTimeout); - searchTimeout = null; -} - -function enableLinks() { - // load the target page in the parent window - $('#full_list li').on('click', function(evt) { - $('#full_list li').removeClass('clicked'); - $clicked = $(this); - $clicked.addClass('clicked'); - evt.stopPropagation(); - - if (evt.target.tagName === 'A') return true; - - var elem = $clicked.find('> .item .object_link a')[0]; - var e = evt.originalEvent; - var newEvent = new MouseEvent(evt.originalEvent.type); - newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); - elem.dispatchEvent(newEvent); - evt.preventDefault(); - return false; - }); -} - -function enableToggles() { - // show/hide nested classes on toggle click - $('#full_list a.toggle').on('click', function(evt) { - evt.stopPropagation(); - evt.preventDefault(); - $(this).parent().parent().toggleClass('collapsed'); - highlight(); - }); -} - -function populateSearchCache() { - $('#full_list li .item').each(function() { - var $node = $(this); - var $link = $node.find('.object_link a'); - if ($link.length > 0) { - searchCache.push({ - node: $node, - link: $link, - name: $link.text(), - fullName: $link.attr('title').split(' ')[0] - }); - } - }); -} - -function enableSearch() { - $('#search input').keyup(function(event) { - if (ignoredKeyPress(event)) return; - if (this.value === "") { - clearSearch(); - } else { - performSearch(this.value); - } - }); - - $('#full_list').after(""); -} - -function ignoredKeyPress(event) { - if ( - (event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) || - (event.keyCode == commandKey) - ) { - return true; - } else { - return false; - } -} - -function clearSearch() { - clearSearchTimeout(); - $('#full_list .found').removeClass('found').each(function() { - var $link = $(this).find('.object_link a'); - $link.text($link.text()); - }); - $('#full_list, #content').removeClass('insearch'); - $clicked.parents().removeClass('collapsed'); - highlight(); -} - -function performSearch(searchString) { - clearSearchTimeout(); - $('#full_list, #content').addClass('insearch'); - $('#noresults').text('').hide(); - partialSearch(searchString, 0); -} - -function partialSearch(searchString, offset) { - var lastRowClass = ''; - var i = null; - for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) { - var item = searchCache[i]; - var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name); - var matchString = buildMatchString(searchString); - var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i"); - if (searchName.match(matchRegexp) == null) { - item.node.removeClass('found'); - item.link.text(item.link.text()); - } - else { - item.node.addClass('found'); - item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1'); - lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2'; - item.link.html(item.name.replace(matchRegexp, "$&")); - } - } - if(i == searchCache.length) { - searchDone(); - } else { - searchTimeout = setTimeout(function() { - partialSearch(searchString, i); - }, 0); - } -} - -function searchDone() { - searchTimeout = null; - highlight(); - if ($('#full_list li:visible').size() === 0) { - $('#noresults').text('No results were found.').hide().fadeIn(); - } else { - $('#noresults').text('').hide(); - } - $('#content').removeClass('insearch'); -} - -function buildMatchString(searchString, event) { - caseSensitiveMatch = searchString.match(/[A-Z]/) != null; - var regexSearchString = RegExp.escape(searchString); - if (caseSensitiveMatch) { - regexSearchString += "|" + - $.map(searchString.split(''), function(e) { return RegExp.escape(e); }). - join('.+?'); - } - return regexSearchString; -} - -function highlight() { - $('#full_list li:visible').each(function(n) { - $(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even'); - }); -} - -/** - * Expands the tree to the target element and its immediate - * children. - */ -function expandTo(path) { - var $target = $(document.getElementById('object_' + path)); - $target.addClass('clicked'); - $target.removeClass('collapsed'); - $target.parentsUntil('#full_list', 'li').removeClass('collapsed'); - if($target[0]) { - window.scrollTo(window.scrollX, $target.offset().top - 250); - highlight(); - } -} - -function windowEvents(event) { - var msg = event.data; - if (msg.action === "expand") { - expandTo(msg.path); - } - return false; -} - -window.addEventListener("message", windowEvents, false); - -$(document).ready(function() { - escapeShortcut(); - navResizer(); - enableLinks(); - enableToggles(); - populateSearchCache(); - enableSearch(); -}); - -})(); diff --git a/doc/js/jquery.js b/doc/js/jquery.js deleted file mode 100644 index 198b3ff..0000000 --- a/doc/js/jquery.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
    a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
    "+""+"
    ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
    t
    ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
    ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/doc/method_list.html b/doc/method_list.html deleted file mode 100644 index 65a7860..0000000 --- a/doc/method_list.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - Ruby Method List - - - -
    -
    -

    Ruby Method List

    - - - -
    - - -
    - - diff --git a/doc/puppet_class_list.html b/doc/puppet_class_list.html deleted file mode 100644 index c26d5c9..0000000 --- a/doc/puppet_class_list.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - Puppet Class List - - - -
    -
    -

    Puppet Class List

    - - - -
    - - -
    - - diff --git a/doc/puppet_classes/cassandra.html b/doc/puppet_classes/cassandra.html deleted file mode 100644 index efd46f0..0000000 --- a/doc/puppet_classes/cassandra.html +++ /dev/null @@ -1,1229 +0,0 @@ - - - - - - - Puppet Class: cassandra - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra

    -
    - -
    -
    Inherits:
    -
    cassandra::params
    -
    - - -
    -
    Defined in:
    -
    - manifests/init.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A class for installing the Cassandra package and manipulate settings in the -configuration file.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - cassandra_2356_sleep_seconds - - - (boolean) - - - (defaults to: 5) - - - — -
      -

      This will provide a workaround for CASSANDRA-2356 -by sleeping for the specifed number of seconds after an event involving the -Cassandra package. This option is silently ignored on the Red Hat family of -operating systems as this bug only affects Debian systems.

      -
      - -
    • - -
    • - - cassandra_9822 - - - (boolean) - - - (defaults to: false) - - - — -
      -

      If set to true, this will apply a patch to the init file for the Cassandra -service as a workaround for CASSANDRA-9822. -This this bug only affects Debian systems.

      -
      - -
    • - -
    • - - cassandra_yaml_tmpl - - - (string) - - - (defaults to: 'cassandra/cassandra.yaml.erb') - - - — -
      -

      The path to the Puppet template for the Cassandra configuration file. This -allows the user to supply their own customized template.`

      -
      - -
    • - -
    • - - commitlog_directory - - - (string) - - - (defaults to: undef) - - - — -
      -

      The path to the commitlog directory. If set, the directory will be managed -as a Puppet resource. Do not specify a value here and in the -settings hash as they are mutually exclusive.

      -
      - -
    • - -
    • - - commitlog_directory_mode - - - (string) - - - (defaults to: '0750') - - - — -
      -

      The mode for the commitlog_directory is ignored unless -commitlog_directory is specified.

      -
      - -
    • - -
    • - - config_file_mode - - - (string) - - - (defaults to: '0644') - - - — -
      -

      The permissions mode of the cassandra configuration file.

      -
      - -
    • - -
    • - - config_path - - - (string) - - - (defaults to: $::cassandra::params::config_path) - - - — -
      -

      The path to the cassandra configuration file.

      -
      - -
    • - -
    • - - data_file_directories - - - (array) - - - (defaults to: undef) - - - — -
      -

      The path(s) to the date directory or directories. If set, the directories -will be managed as a Puppet resource. Do not specify a value here and in -the settings hash as they are mutually exclusive.

      -
      - -
    • - -
    • - - data_file_directories_mode - - - (string) - - - (defaults to: '0750') - - - — -
      -

      The mode for the data_file_directories is ignored unless -data_file_directories is specified.

      -
      - -
    • - -
    • - - dc - - - (string) - - - (defaults to: 'DC1') - - - — -
      -

      Sets the value for dc in -config_path/snitch_properties_file docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchesAbout_c.html -for more details.

      -
      - -
    • - -
    • - - dc_suffix - - - (string) - - - (defaults to: undef) - - - — -
      -

      Sets the value for dc_suffix in -config_path/snitch_properties_file see docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchesAbout_c.html -for more details. If the value is undef then no change will be -made to the snitch properties file for this setting.

      -
      - -
    • - -
    • - - fail_on_non_supported_os - - - (boolean) - - - (defaults to: true) - - - — -
      -

      A flag that dictates if the module should fail if it is not RedHat or -Debian. If you set this option to false then you must also at least set the -config_path attribute as well.

      -
      - -
    • - -
    • - - hints_directory - - - (string) - - - (defaults to: undef) - - - — -
      -

      The path to the hints directory. If set, the directory will be managed as a -Puppet resource. Do not specify a value here and in the -settings hash as they are mutually exclusive. Do not set this -option in Cassandra versions before 3.0.0.

      -
      - -
    • - -
    • - - hints_directory_mode - - - (string) - - - (defaults to: '0750') - - - — -
      -

      The mode for the hints_directory is ignored unless -hints_directory is specified.

      -
      - -
    • - -
    • - - package_ensure - - - (present|latest|string) - - - (defaults to: 'present') - - - — -
      -

      The status of the package specified in package_name. Can -be present, latest or a specific version number.

      -
      - -
    • - -
    • - - package_name - - - (string) - - - (defaults to: $::cassandra::params::cassandra_pkg) - - - — -
      -

      The name of the Cassandra package which must be available from a -repository.

      -
      - -
    • - -
    • - - prefer_local - - - (boolean) - - - (defaults to: undef) - - - — -
      -

      Sets the value for prefer_local in -config_path/snitch_properties_file see docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchesAbout_c.html -for more details. Valid values are true, false or undef. If the -value is undef then change will be made to the snitch properties -file for this setting.

      -
      - -
    • - -
    • - - rack - - - (string) - - - (defaults to: 'RAC1') - - - — -
      -

      Sets the value for rack in -config_path/snitch_properties_file see docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchesAbout_c.html -for more details.

      -
      - -
    • - -
    • - - rackdc_tmpl - - - (string) - - - (defaults to: 'cassandra/cassandra-rackdc.properties.erb') - - - — -
      -

      The template for creating the snitch properties file.

      -
      - -
    • - -
    • - - saved_caches_directory - - - (string) - - - (defaults to: undef) - - - — -
      -

      The path to the saved caches directory. If set, the directory will be -managed as a Puppet resource. Do not specify a value here and in the -settings hash as they are mutually exclusive.

      -
      - -
    • - -
    • - - saved_caches_directory_mode - - - (string) - - - (defaults to: '0750') - - - — -
      -

      The mode for the saved_caches_directory is ignored unless -saved_caches_directory is specified.

      -
      - -
    • - -
    • - - service_enable - - - (boolean) - - - (defaults to: true) - - - — -
      -

      enable the Cassandra service to start at boot time.

      -
      - -
    • - -
    • - - service_ensure - - - (string) - - - (defaults to: undef) - - - — -
      -

      Ensure the Cassandra service is running. Valid values are running or -stopped.

      -
      - -
    • - -
    • - - service_name - - - (string) - - - (defaults to: 'cassandra') - - - — -
      -

      The name of the service that runs the Cassandra software.

      -
      - -
    • - -
    • - - service_provider - - - (string) - - - (defaults to: undef) - - - — -
      -

      The name of the provider that runs the service. If left as undef -then the OS family specific default will be used, otherwise the specified -value will be used instead.

      -
      - -
    • - -
    • - - service_refresh - - - (boolean) - - - (defaults to: true) - - - — -
      -

      If set to true, changes to the Cassandra config file or the data -directories will ensure that Cassandra service is refreshed after the -changes. Setting this flag to false will disable this behaviour, therefore -allowing the changes to be made but allow the user to control when the -service is restarted.

      -
      - -
    • - -
    • - - settings - - - (hash) - - - (defaults to: {}) - - - — -
      -

      A hash that is passed to to_yaml which dumps the results to -the Cassandra configuring file. The minimum required settings for Cassandra -2.X are as follows:

      - -
      {
      -    'authenticator'               => 'PasswordAuthenticator',
      -    'cluster_name'                => 'MyCassandraCluster',
      -    'commitlog_directory'         => '/var/lib/cassandra/commitlog',
      -    'commitlog_sync'              => 'periodic',
      -    'commitlog_sync_period_in_ms' => 10000,
      -    'data_file_directories'       => ['/var/lib/cassandra/data'],
      -    'endpoint_snitch'             => 'GossipingPropertyFileSnitch',
      -    'listen_address'              => $::ipaddress,
      -    'partitioner'                 => 'org.apache.cassandra.dht.Murmur3Partitioner',
      -    'saved_caches_directory'      => '/var/lib/cassandra/saved_caches',
      -    'seed_provider'               => [
      -      {
      -        'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider',
      -        'parameters' => [
      -          {
      -            'seeds' => $::ipaddress,
      -          },
      -        ],
      -      },
      -    ],
      -    'start_native_transport'      => true,
      -  }
      - -

      For Cassandra 3.X you will also need to specify the -hints_directory attribute.

      -
      - -
    • - -
    • - - snitch_properties_file - - - (string) - - - (defaults to: 'cassandra-rackdc.properties') - - - — -
      -

      The name of the snitch properties file. The full path name would be -config_path/snitch_properties_file.

      -
      - -
    • - -
    • - - systemctl - - - (string) - - - (defaults to: $::cassandra::params::systemctl) - - - — -
      -

      The full path to the systemctl command. Only needed when the package is -installed. Will silently continue if the executable does not exist.

      -
      - -
    • - -
    - - -
    -
    - - - - -
    -
    -
    -
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -
    -
    # File 'manifests/init.pp', line 124
    -
    -class cassandra (
    -  $cassandra_2356_sleep_seconds = 5,
    -  $cassandra_9822               = false,
    -  $cassandra_yaml_tmpl          = 'cassandra/cassandra.yaml.erb',
    -  $commitlog_directory          = undef,
    -  $commitlog_directory_mode     = '0750',
    -  $config_file_mode             = '0644',
    -  $config_path                  = $::cassandra::params::config_path,
    -  $data_file_directories        = undef,
    -  $data_file_directories_mode   = '0750',
    -  $dc                           = 'DC1',
    -  $dc_suffix                    = undef,
    -  $fail_on_non_supported_os     = true,
    -  $hints_directory              = undef,
    -  $hints_directory_mode         = '0750',
    -  $package_ensure               = 'present',
    -  $package_name                 = $::cassandra::params::cassandra_pkg,
    -  $prefer_local                 = undef,
    -  $rack                         = 'RAC1',
    -  $rackdc_tmpl                  = 'cassandra/cassandra-rackdc.properties.erb',
    -  $saved_caches_directory       = undef,
    -  $saved_caches_directory_mode  = '0750',
    -  $service_enable               = true,
    -  $service_ensure               = undef,
    -  $service_name                 = 'cassandra',
    -  $service_provider             = undef,
    -  $service_refresh              = true,
    -  $settings                     = {},
    -  $snitch_properties_file       = 'cassandra-rackdc.properties',
    -  $systemctl                    = $::cassandra::params::systemctl,
    -  ) inherits cassandra::params {
    -  if $service_provider != undef {
    -    Service {
    -      provider => $service_provider,
    -    }
    -  }
    -
    -  $config_file = "${config_path}/cassandra.yaml"
    -  $dc_rack_properties_file = "${config_path}/${snitch_properties_file}"
    -
    -  case $::osfamily {
    -    'RedHat': {
    -      $config_file_require = Package['cassandra']
    -      $config_file_before  = []
    -      $config_path_require = Package['cassandra']
    -      $dc_rack_properties_file_require = Package['cassandra']
    -      $dc_rack_properties_file_before  = []
    -      $data_dir_require = Package['cassandra']
    -      $data_dir_before = []
    -
    -      if $::operatingsystemmajrelease == 7 and $::cassandra::service_provider == 'init' {
    -        exec { "/sbin/chkconfig --add ${service_name}":
    -          unless  => "/sbin/chkconfig --list ${service_name}",
    -          require => Package['cassandra'],
    -          before  => Service['cassandra'],
    -        }
    -      }
    -    }
    -    'Debian': {
    -      $config_file_require = [ User['cassandra'], File[$config_path] ]
    -      $config_file_before  = Package['cassandra']
    -      $config_path_require = []
    -      $dc_rack_properties_file_require = [ User['cassandra'], File[$config_path] ]
    -      $dc_rack_properties_file_before  = Package['cassandra']
    -      $data_dir_require = File[$config_file]
    -      $data_dir_before = Package['cassandra']
    -
    -      if $cassandra_9822 {
    -        file { '/etc/init.d/cassandra':
    -          source => 'puppet:///modules/cassandra/CASSANDRA-9822/cassandra',
    -          mode   => '0555',
    -          before => Package['cassandra'],
    -        }
    -      }
    -      # Sleep after package install and before service resource to prevent
    -      # possible duplicate processes arising from CASSANDRA-2356.
    -      exec { 'CASSANDRA-2356 sleep':
    -        command     => "/bin/sleep ${cassandra_2356_sleep_seconds}",
    -        refreshonly => true,
    -        user        => 'root',
    -        subscribe   => Package['cassandra'],
    -        before      => Service['cassandra'],
    -      }
    -
    -      group { 'cassandra':
    -        ensure => present,
    -      }
    -
    -      $user = 'cassandra'
    -
    -      user { $user:
    -        ensure     => present,
    -        comment    => 'Cassandra database,,,',
    -        gid        => 'cassandra',
    -        home       => '/var/lib/cassandra',
    -        shell      => '/bin/false',
    -        managehome => true,
    -        require    => Group['cassandra'],
    -      }
    -      # End of CASSANDRA-2356 specific resources.
    -    }
    -    default: {
    -      $config_file_before  = []
    -      $config_file_require = [ User['cassandra'], File[$config_path] ]
    -      $config_path_require = []
    -      $dc_rack_properties_file_require = Package['cassandra']
    -      $dc_rack_properties_file_before  = []
    -
    -      if $fail_on_non_supported_os {
    -        fail("OS family ${::osfamily} not supported")
    -      } else {
    -        warning("OS family ${::osfamily} not supported")
    -      }
    -    }
    -  }
    -
    -  package { 'cassandra':
    -    ensure => $package_ensure,
    -    name   => $package_name,
    -    notify => Exec['cassandra_reload_systemctl'],
    -  }
    -
    -  exec { 'cassandra_reload_systemctl':
    -    command     => "${systemctl} daemon-reload",
    -    onlyif      => "test -x ${systemctl}",
    -    path        => ['/usr/bin', '/bin'],
    -    refreshonly => true,
    -  }
    -
    -  file { $config_path:
    -    ensure  => directory,
    -    group   => 'cassandra',
    -    owner   => 'cassandra',
    -    mode    => '0755',
    -    require => $config_path_require,
    -  }
    -
    -  if $commitlog_directory {
    -    file { $commitlog_directory:
    -      ensure  => directory,
    -      owner   => 'cassandra',
    -      group   => 'cassandra',
    -      mode    => $commitlog_directory_mode,
    -      require => $data_dir_require,
    -      before  => $data_dir_before,
    -    }
    -
    -    $commitlog_directory_settings = merge($settings,
    -      { 'commitlog_directory' => $commitlog_directory, })
    -  } else {
    -    $commitlog_directory_settings = $settings
    -  }
    -
    -  if is_array($data_file_directories) {
    -    file { $data_file_directories:
    -      ensure  => directory,
    -      owner   => 'cassandra',
    -      group   => 'cassandra',
    -      mode    => $data_file_directories_mode,
    -      require => $data_dir_require,
    -      before  => $data_dir_before,
    -    }
    -
    -    $data_file_directories_settings = merge($settings, {
    -      'data_file_directories' => $data_file_directories,
    -    })
    -  } else {
    -    $data_file_directories_settings = $settings
    -  }
    -
    -  if $hints_directory {
    -    file { $hints_directory:
    -      ensure  => directory,
    -      owner   => 'cassandra',
    -      group   => 'cassandra',
    -      mode    => $hints_directory_mode,
    -      require => $data_dir_require,
    -      before  => $data_dir_before,
    -    }
    -
    -    $hints_directory_settings = merge($settings,
    -      { 'hints_directory' => $hints_directory, })
    -  } else {
    -    $hints_directory_settings = $settings
    -  }
    -
    -  if $saved_caches_directory {
    -    file { $saved_caches_directory:
    -      ensure  => directory,
    -      owner   => 'cassandra',
    -      group   => 'cassandra',
    -      mode    => $saved_caches_directory_mode,
    -      require => $data_dir_require,
    -      before  => $data_dir_before,
    -    }
    -
    -    $saved_caches_directory_settings = merge($settings,
    -      { 'saved_caches_directory' => $saved_caches_directory, })
    -  } else {
    -    $saved_caches_directory_settings = $settings
    -  }
    -
    -  $merged_settings = merge($settings,
    -    $commitlog_directory_settings,
    -    $data_file_directories_settings,
    -    $hints_directory_settings,
    -    $saved_caches_directory_settings)
    -
    -  file { $config_file:
    -    ensure  => present,
    -    owner   => 'cassandra',
    -    group   => 'cassandra',
    -    content => template($cassandra_yaml_tmpl),
    -    mode    => $config_file_mode,
    -    require => $config_file_require,
    -    before  => $config_file_before,
    -  }
    -
    -  file { $dc_rack_properties_file:
    -    ensure  => file,
    -    content => template($rackdc_tmpl),
    -    owner   => 'cassandra',
    -    group   => 'cassandra',
    -    mode    => '0644',
    -    require => $dc_rack_properties_file_require,
    -    before  => $dc_rack_properties_file_before,
    -  }
    -
    -  if $package_ensure != 'absent' and $package_ensure != 'purged' {
    -    if $service_refresh {
    -      service { 'cassandra':
    -        ensure    => $service_ensure,
    -        name      => $service_name,
    -        enable    => $service_enable,
    -        subscribe => [
    -          File[$config_file],
    -          File[$dc_rack_properties_file],
    -          Package['cassandra'],
    -        ],
    -      }
    -    } else {
    -      service { 'cassandra':
    -        ensure  => $service_ensure,
    -        name    => $service_name,
    -        enable  => $service_enable,
    -        require => [
    -          File[$config_file],
    -          File[$dc_rack_properties_file],
    -          Package['cassandra'],
    -        ],
    -      }
    -    }
    -  }
    -}
    -
    - - - - - - - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Adatastax_agent.html b/doc/puppet_classes/cassandra_3A_3Adatastax_agent.html deleted file mode 100644 index 6755762..0000000 --- a/doc/puppet_classes/cassandra_3A_3Adatastax_agent.html +++ /dev/null @@ -1,489 +0,0 @@ - - - - - - - Puppet Class: cassandra::datastax_agent - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::datastax_agent

    -
    - -
    -
    Inherits:
    -
    cassandra::params
    -
    - - -
    -
    Defined in:
    -
    - manifests/datastax_agent.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A class for installing the DataStax Agent and to point it at an OpsCenter -instance.

    - -
    -
    -
    - -
    -

    Examples:

    - - -

    -

    Set agent_alias to foobar, stomp_interface to localhost and ensure that -async_pool_size is absent from the file.

    -

    - -
    class { 'cassandra::datastax_agent':
    -  settings => {
    -    'agent_alias'     => {
    -      'setting' => 'agent_alias',
    -      'value'   => 'foobar',
    -    },
    -    'stomp_interface' => {
    -      'setting' => 'stomp_interface',
    -      'value'   => 'localhost',
    -    },
    -    'async_pool_size' => {
    -      'ensure' => absent,
    -    },
    -  },
    -}
    - -
    -

    Parameters:

    -
      - -
    • - - address_config_file - - - (Any) - - - (defaults to: '/var/lib/datastax-agent/conf/address.yaml') - - - — -
      -

      The full path to the address config file.

      -
      - -
    • - -
    • - - defaults_file - - - (Any) - - - (defaults to: '/etc/default/datastax-agent') - - - — -
      -

      The full path name to the file where java_home is set.

      -
      - -
    • - -
    • - - java_home - - - (Any) - - - (defaults to: undef) - - - — -
      -

      If the value of this variable is left as undef, no action is -taken. Otherwise the value is set as JAVA_HOME in -defaults_file.

      -
      - -
    • - -
    • - - package_ensure - - - (Any) - - - (defaults to: 'present') - - - — -
      -

      Is passed to the package reference. Valid values are -present or a version number.

      -
      - -
    • - -
    • - - package_name - - - (Any) - - - (defaults to: 'datastax-agent') - - - — -
      -

      Is passed to the package reference.

      -
      - -
    • - -
    • - - service_ensure - - - (Any) - - - (defaults to: 'running') - - - — -
      -

      Is passed to the service reference.

      -
      - -
    • - -
    • - - service_enable - - - (Any) - - - (defaults to: true) - - - — -
      -

      Is passed to the service reference.

      -
      - -
    • - -
    • - - service_name - - - (Any) - - - (defaults to: 'datastax-agent') - - - — -
      -

      Is passed to the service reference.

      -
      - -
    • - -
    • - - service_provider - - - (Any) - - - (defaults to: undef) - - - — -
      -

      The name of the provider that runs the service. If left as undef -then the OS family specific default will be used, otherwise the specified -value will be used instead.

      -
      - -
    • - -
    • - - settings - - - (Any) - - - (defaults to: {}) - - - — -
      -

      A hash that is passed to create_ini_settings -with the following additional defaults:

      - -
      {
      -  path              => $address_config_file,
      -  key_val_separator => ': ',
      -  require           => Package[$package_name],
      -  notify            => Service['datastax-agent'],
      -}
      -
      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -
    -
    # File 'manifests/datastax_agent.pp', line 48
    -
    -class cassandra::datastax_agent (
    -  $address_config_file  = '/var/lib/datastax-agent/conf/address.yaml',
    -  $defaults_file        = '/etc/default/datastax-agent',
    -  $java_home            = undef,
    -  $package_ensure       = 'present',
    -  $package_name         = 'datastax-agent',
    -  $service_ensure       = 'running',
    -  $service_enable       = true,
    -  $service_name         = 'datastax-agent',
    -  $service_provider     = undef,
    -  $settings             = {},
    -  ) inherits cassandra::params {
    -  if $service_provider != undef {
    -    System {
    -      provider => $service_provider,
    -    }
    -  }
    -
    -  package { $package_name:
    -    ensure  => $package_ensure,
    -    require => Class['cassandra'],
    -    notify  => Exec['datastax_agent_reload_systemctl'],
    -  }
    -
    -  exec { 'datastax_agent_reload_systemctl':
    -    command     => "${::cassandra::params::systemctl} daemon-reload",
    -    onlyif      => "test -x ${::cassandra::params::systemctl}",
    -    path        => ['/usr/bin', '/bin'],
    -    refreshonly => true,
    -    notify      => Service['datastax-agent'],
    -  }
    -
    -  file { $address_config_file:
    -    owner   => 'cassandra',
    -    group   => 'cassandra',
    -    mode    => '0644',
    -    require => Package[$package_name],
    -  }
    -
    -  if $java_home != undef {
    -    ini_setting { 'java_home':
    -      ensure            => present,
    -      path              => $defaults_file,
    -      section           => '',
    -      key_val_separator => '=',
    -      setting           => 'JAVA_HOME',
    -      value             => $java_home,
    -      notify            => Service['datastax-agent'],
    -    }
    -  }
    -
    -  service { 'datastax-agent':
    -    ensure => $service_ensure,
    -    enable => $service_enable,
    -    name   => $service_name,
    -  }
    -
    -  if $settings {
    -    $defaults = {
    -      path              => $address_config_file,
    -      key_val_separator => ': ',
    -      require           => Package[$package_name],
    -      notify            => Service['datastax-agent'],
    -    }
    -
    -    $full_settings = {
    -      '' => $settings,
    -    }
    -
    -    validate_hash($full_settings)
    -    create_ini_settings($full_settings, $defaults)
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Adatastax_repo.html b/doc/puppet_classes/cassandra_3A_3Adatastax_repo.html deleted file mode 100644 index 923bfec..0000000 --- a/doc/puppet_classes/cassandra_3A_3Adatastax_repo.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - Puppet Class: cassandra::datastax_repo - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::datastax_repo

    -
    - - -
    -
    Defined in:
    -
    - manifests/datastax_repo.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    An optional class that will allow a suitable repository to be configured -from which packages for DataStax Community can be downloaded. Changing the -defaults will allow any Debian Apt or Red Hat Yum repository to be -configured.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - descr - - - (string) - - - (defaults to: 'DataStax Repo for Apache Cassandra') - - - — -
      -

      On the Red Hat family, this is passed as the descr attribute -to a yumrepo resource. On the Debian family, it is passed as -the comment attribute to an apt::source resource.

      -
      - -
    • - -
    • - - key_id - - - (string) - - - (defaults to: '7E41C00F85BFC1706C4FFFB3350200F2B999A372') - - - — -
      -

      On the Debian family, this is passed as the id attribute to an -apt::key resource. On the Red Hat family, it is ignored.

      -
      - -
    • - -
    • - - key_url - - - (string) - - - (defaults to: 'http://debian.datastax.com/debian/repo_key') - - - — -
      -

      On the Debian family, this is passed as the source attribute -to an apt::key resource. On the Red Hat family, it is ignored.

      -
      - -
    • - -
    • - - pkg_url - - - (string) - - - (defaults to: undef) - - - — -
      -

      If left as the default, this will set the baseurl to 'rpm.datastax.com/community' -on a yumrepo resource on the Red Hat family. On the Debian -family, leaving this as the default will set the location -attribute on an apt::source to 'debian.datastax.com/community'.

      -
      - -
    • - -
    • - - release - - - (string) - - - (defaults to: 'stable') - - - — -
      -

      On the Debian family, this is passed as the release attribute -to an apt::source resource. On the Red Hat family, it is -ignored.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -
    -
    # File 'manifests/datastax_repo.pp', line 22
    -
    -class cassandra::datastax_repo (
    -  $descr   = 'DataStax Repo for Apache Cassandra',
    -  $key_id  = '7E41C00F85BFC1706C4FFFB3350200F2B999A372',
    -  $key_url = 'http://debian.datastax.com/debian/repo_key',
    -  $pkg_url = undef,
    -  $release = 'stable',
    -  ) {
    -  case $::osfamily {
    -    'RedHat': {
    -      if $pkg_url != undef {
    -        $baseurl = $pkg_url
    -      } else {
    -        $baseurl = 'http://rpm.datastax.com/community'
    -      }
    -
    -      yumrepo { 'datastax':
    -        ensure   => present,
    -        descr    => $descr,
    -        baseurl  => $baseurl,
    -        enabled  => 1,
    -        gpgcheck => 0,
    -      }
    -    }
    -    'Debian': {
    -      include apt
    -      include apt::update
    -
    -      apt::key {'datastaxkey':
    -        id     => $key_id,
    -        source => $key_url,
    -        before => Apt::Source['datastax'],
    -      }
    -
    -      if $pkg_url != undef {
    -        $location = $pkg_url
    -      } else {
    -        $location = 'http://debian.datastax.com/community'
    -      }
    -
    -      apt::source {'datastax':
    -        location => $location,
    -        comment  => $descr,
    -        release  => $release,
    -        include  => {
    -          'src' => false,
    -        },
    -        notify   => Exec['update-cassandra-repos'],
    -      }
    -
    -      # Required to wrap apt_update
    -      exec {'update-cassandra-repos':
    -        refreshonly => true,
    -        command     => '/bin/true',
    -        require     => Exec['apt_update'],
    -      }
    -    }
    -    default: {
    -      warning("OS family ${::osfamily} not supported")
    -    }
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Afirewall_ports.html b/doc/puppet_classes/cassandra_3A_3Afirewall_ports.html deleted file mode 100644 index 03fda26..0000000 --- a/doc/puppet_classes/cassandra_3A_3Afirewall_ports.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - - Puppet Class: cassandra::firewall_ports - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::firewall_ports

    -
    - - -
    -
    Defined in:
    -
    - manifests/firewall_ports.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    An optional class to configure incoming network ports on the host that are -relevant to the Cassandra installation. If firewalls are being managed -already, simply do not include this module in your manifest.

    - -

    IMPORTANT: The full list of which ports should be configured is assessed at -evaluation time of the configuration. Therefore if one is to use this -class, it must be the final cassandra class included in the manifest.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - client_ports - - - (array) - - - (defaults to: [9042, 9160]) - - - — -
      -

      Only has any effect if the cassandra class is defined on the -node. Allow these TCP ports to be opened for traffic coming from the client -subnets.

      -
      - -
    • - -
    • - - client_subnets - - - (array) - - - (defaults to: ['0.0.0.0/0']) - - - — -
      -

      Only has any effect if the cassandra class is defined on the -node. An array of the list of subnets that are to allowed connection to -cassandra::native_transport_port and cassandra::rpc_port.

      -
      - -
    • - -
    • - - inter_node_ports - - - (array) - - - (defaults to: [7000, 7001, 7199]) - - - — -
      -

      Only has any effect if the cassandra class is defined on the -node. Allow these TCP ports to be opened for traffic between the Cassandra -nodes.

      -
      - -
    • - -
    • - - inter_node_subnets - - - (array) - - - (defaults to: ['0.0.0.0/0']) - - - — -
      -

      Only has any effect if the cassandra class is defined on the -node. An array of the list of subnets that are to allowed connection to -cassandra::storage_port, -cassandra::ssl_storage_port and port 7199 for cassandra JMX -monitoring.

      -
      - -
    • - -
    • - - public_ports - - - (array) - - - (defaults to: [8888]) - - - — -
      -

      Allow these TCP ports to be opened for traffic coming from public subnets -the port specified in $ssh_port will be appended to this list.

      -
      - -
    • - -
    • - - public_subnets - - - (array) - - - (defaults to: ['0.0.0.0/0']) - - - — -
      -

      An array of the list of subnets that are to allowed connection to -cassandra::firewall_ports::ssh_port.

      -
      - -
    • - -
    • - - ssh_port - - - (integer) - - - (defaults to: 22) - - - — -
      -

      Which port does SSH operate on.

      -
      - -
    • - -
    • - - opscenter_ports - - - (array) - - - (defaults to: [9042, 9160, 61620, 61621]) - - - — -
      -

      Only has any effect if the cassandra::datastax_agent is -defined. Allow these TCP ports to be opened for traffic coming to or from -OpsCenter appended to this list.

      -
      - -
    • - -
    • - - opscenter_subnets - - - (array) - - - (defaults to: ['0.0.0.0/0']) - - - — -
      -

      A list of subnets that are to be allowed connection to port 61621 for nodes -built with cassandra::datastax_agent.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -
    -
    # File 'manifests/firewall_ports.pp', line 31
    -
    -class cassandra::firewall_ports (
    -  $client_ports                = [9042, 9160],
    -  $client_subnets              = ['0.0.0.0/0'],
    -  $inter_node_ports            = [7000, 7001, 7199],
    -  $inter_node_subnets          = ['0.0.0.0/0'],
    -  $public_ports                = [8888],
    -  $public_subnets              = ['0.0.0.0/0'],
    -  $ssh_port                    = 22,
    -  $opscenter_ports             = [9042, 9160, 61620, 61621],
    -  $opscenter_subnets           = ['0.0.0.0/0'],
    -  ) {
    -  # Public connections on any node.
    -  $public_subnets_array = prefix($public_subnets, '200_Public_')
    -
    -  cassandra::private::firewall_ports::rule { $public_subnets_array:
    -    ports => concat($public_ports, [$ssh_port]),
    -  }
    -
    -  # If this is a Cassandra node.
    -  if defined ( Class['::cassandra'] ) {
    -    # Inter-node connections for Cassandra
    -    $inter_node_subnets_array = prefix($inter_node_subnets,
    -      '210_InterNode_')
    -
    -    cassandra::private::firewall_ports::rule { $inter_node_subnets_array:
    -      ports => $inter_node_ports,
    -    }
    -
    -    # Client connections for Cassandra
    -    $client_subnets_array = prefix($client_subnets, '220_Client_')
    -
    -    cassandra::private::firewall_ports::rule {$client_subnets_array:
    -      ports => $client_ports,
    -    }
    -  }
    -
    -  # Connections for DataStax Agent
    -  if defined ( Class['::cassandra::datastax_agent'] ) or defined ( Class['::cassandra::opscenter'] ) {
    -    $opscenter_subnets_opc_agent = prefix($opscenter_subnets,
    -      '230_OpsCenter_')
    -
    -    cassandra::private::firewall_ports::rule { $opscenter_subnets_opc_agent:
    -      ports => $opscenter_ports,
    -    }
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Ajava.html b/doc/puppet_classes/cassandra_3A_3Ajava.html deleted file mode 100644 index f28d444..0000000 --- a/doc/puppet_classes/cassandra_3A_3Ajava.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - - Puppet Class: cassandra::java - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::java

    -
    - -
    -
    Inherits:
    -
    cassandra::params
    -
    - - -
    -
    Defined in:
    -
    - manifests/java.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A class to install Java and JNA packages.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - aptkey - - - (hash) - - - (defaults to: undef) - - - — -
      -

      If supplied, this should be a hash of apt::key resources that -will be passed to the create_resources function. This is ignored on -non-Debian systems.

      -
      - -
    • - -
    • - - aptsource - - - (hash) - - - (defaults to: undef) - - - — -
      -

      If supplied, this should be a hash of apt::source resources -that will be passed to the create_resources function. This is ignored on -non-Red Hat`

      -
      - -
    • - -
    • - - jna_ensure - - - (string) - - - (defaults to: present) - - - — -
      -

      Is passed to the package reference for the JNA package. Valid values are -present or a version number.

      -
      - -
    • - -
    • - - jna_package_name - - - (string) - - - (defaults to: $::cassandra::params::jna_package_name) - - - — -
      -

      The name of the JNA package.

      -
      - -
    • - -
    • - - package_ensure - - - (string) - - - (defaults to: present) - - - — -
      -

      Is passed to the package reference for the JRE/JDK package. Valid values -are present or a version number.

      -
      - -
    • - -
    • - - package_name - - - (string) - - - (defaults to: $::cassandra::params::java_package) - - - — -
      -

      The name of the Java package to be installed.

      -
      - -
    • - -
    • - - yumrepo - - - (hash) - - - (defaults to: undef) - - - — -
      -

      If supplied, this should be a hash of yumrepo resources that will -be passed to the create_resources function. This is ignored on non-Red Hat -systems.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -
    -
    # File 'manifests/java.pp', line 17
    -
    -class cassandra::java (
    -  $aptkey           = undef,
    -  $aptsource        = undef,
    -  $jna_ensure       = present,
    -  $jna_package_name = $::cassandra::params::jna_package_name,
    -  $package_ensure   = present,
    -  $package_name     = $::cassandra::params::java_package,
    -  $yumrepo          = undef,
    -  ) inherits cassandra::params {
    -  if $::osfamily == 'RedHat' and $yumrepo != undef {
    -    $yumrepo_defaults = {
    -      'before' => Package[$package_name],
    -    }
    -
    -    create_resources(yumrepo, $yumrepo, $yumrepo_defaults)
    -  }
    -
    -  if $::osfamily == 'Debian' {
    -    if $aptkey != undef {
    -      $aptkey_defaults = {
    -        'before' => Package[$package_name],
    -      }
    -
    -      create_resources(apt::key, $aptkey, $aptkey_defaults)
    -    }
    -
    -    if $aptsource != undef {
    -      exec { 'cassandra::java::apt_update':
    -        refreshonly => true,
    -        command     => '/bin/true',
    -        require     => Exec['apt_update'],
    -        before      => Package[$package_name],
    -      }
    -
    -      $aptsource_defaults = {
    -        'notify' => Exec['cassandra::java::apt_update'],
    -      }
    -
    -      create_resources(apt::source, $aptsource, $aptsource_defaults)
    -    }
    -  }
    -
    -  package { $package_name:
    -    ensure => $package_ensure,
    -  }
    -
    -  package { $jna_package_name:
    -    ensure => $jna_ensure,
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Aoptutils.html b/doc/puppet_classes/cassandra_3A_3Aoptutils.html deleted file mode 100644 index de18f2a..0000000 --- a/doc/puppet_classes/cassandra_3A_3Aoptutils.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - Puppet Class: cassandra::optutils - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::optutils

    -
    - -
    -
    Inherits:
    -
    cassandra::params
    -
    - - -
    -
    Defined in:
    -
    - manifests/optutils.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A class to install the optional Cassandra tools package.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - package_ensure - - - (string) - - - (defaults to: 'present') - - - — -
      -

      Can be present, latest or a specific version -number.

      -
      - -
    • - -
    • - - package_name - - - (string) - - - (defaults to: $::cassandra::params::optutils_package_name) - - - — -
      -

      The name of the optional utilities package to be installed.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -
    -
    # File 'manifests/optutils.pp', line 6
    -
    -class cassandra::optutils (
    -  $package_ensure = 'present',
    -  $package_name   = $::cassandra::params::optutils_package_name,
    -  ) inherits cassandra::params {
    -  package { $package_name:
    -    ensure  => $package_ensure,
    -    require => Class['cassandra'],
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Aparams.html b/doc/puppet_classes/cassandra_3A_3Aparams.html deleted file mode 100644 index e58c506..0000000 --- a/doc/puppet_classes/cassandra_3A_3Aparams.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - Puppet Class: cassandra::params - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::params

    -
    - - -
    -
    Inherited by:
    -
    - - cassandra
    - - cassandra::java
    - - cassandra::schema
    - - cassandra::optutils
    - - cassandra::datastax_agent
    - -
    -
    - -
    -
    Defined in:
    -
    - manifests/params.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    This class is meant to be called from cassandra. It sets variables -according to platform

    - -

    Variables

    -
    • -

      $::cassandra::params::cassandra_pkg defaults to -'cassandra' on Debian and 'cassandra22' on Red Hat.

      -
    • -

      $::cassandra::params::config_path defaults to -'/etc/cassandra' on Debian and -'/etc/cassandra/default.conf' on Red Hat.

      -
    • -

      $::cassandra::params::java_package defaults to -'openjdk-7-jre-headless' on Debian and -'java-1.8.0-openjdk-headless' on Red Hat.

      -
    • -

      $::cassandra::params::jna_package_name defaults to -'libjna-java' on Debian and 'jna' on Red Hat.

      -
    • -

      $::cassandra::params::optutils_package_name defaults to -'cassandra-tools' on Debian and 'cassandra22-tools' on Red -Hat.

      -
    • -

      $::cassandra::params::systemctl defaults to -'/bin/systemctl' on Debian and '/usr/bin/systemctl' on Red -Hat.

      -
    - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -
    -
    # File 'manifests/params.pp', line 18
    -
    -class cassandra::params {
    -  case $::osfamily {
    -    'Debian': {
    -      $cassandra_pkg = 'cassandra'
    -      $config_path = '/etc/cassandra'
    -      $java_package = 'openjdk-7-jre-headless'
    -      $jna_package_name = 'libjna-java'
    -      $optutils_package_name = 'cassandra-tools'
    -      $systemctl = '/bin/systemctl'
    -    }
    -    'RedHat': {
    -      $cassandra_pkg = 'cassandra22'
    -      $config_path = '/etc/cassandra/default.conf'
    -      $java_package = 'java-1.8.0-openjdk-headless'
    -      $jna_package_name = 'jna'
    -      $optutils_package_name = 'cassandra22-tools'
    -      $systemctl = '/usr/bin/systemctl'
    -    }
    -    default: {
    -      $config_path_parents = []
    -    }
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_classes/cassandra_3A_3Aschema.html b/doc/puppet_classes/cassandra_3A_3Aschema.html deleted file mode 100644 index 867cde8..0000000 --- a/doc/puppet_classes/cassandra_3A_3Aschema.html +++ /dev/null @@ -1,572 +0,0 @@ - - - - - - - Puppet Class: cassandra::schema - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Puppet Class: cassandra::schema

    -
    - -
    -
    Inherits:
    -
    cassandra::params
    -
    - - -
    -
    Defined in:
    -
    - manifests/schema.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A class to maintain the database schema. Please note that cqlsh expects -Python 2.7 to be installed. This may be a problem of older distributions -(CentOS 6 for example).

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - connection_tries - - - (integer) - - - (defaults to: 6) - - - — -
      -

      How many times do try to connect to Cassandra. See also -connection_try_sleep.

      -
      - -
    • - -
    • - - connection_try_sleep - - - (integer) - - - (defaults to: 30) - - - — -
      -

      How much time to allow between the number of tries specified in -connection_tries.

      -
      - -
    • - -
    • - - cql_types - - - (hash) - - - (defaults to: {}) - - - — -
      -

      Creates new cassandra::schema::cql_type resources.

      -
      - -
    • - -
    • - - cqlsh_additional_options - - - (string) - - - (defaults to: '') - - - — -
      -

      Any additional options to be passed to the cqlsh command.

      -
      - -
    • - -
    • - - cqlsh_client_config - - - (string) - - - (defaults to: undef) - - - — -
      -

      Set this to a file name (e.g. '/root/.puppetcqlshrc') that will -then be used to contain the the credentials for connecting to Cassandra. -This is a more secure option than having the credentials appearing on the -command line. This option is only available in Cassandra >= 2.1.

      -
      - -
    • - -
    • - - cqlsh_client_tmpl - - - (string) - - - (defaults to: 'cassandra/cqlshrc.erb') - - - — -
      -

      The location of the template for configuring the credentials for the cqlsh -client. This is ignored unless cqlsh_client_config is set.

      -
      - -
    • - -
    • - - cqlsh_command - - - (string) - - - (defaults to: '/usr/bin/cqlsh') - - - — -
      -

      The full path to the cqlsh command.

      -
      - -
    • - -
    • - - cqlsh_host - - - (string) - - - (defaults to: 'localhost') - - - — -
      -

      The host for the cqlsh command to connect to. See also -cqlsh_port.

      -
      - -
    • - -
    • - - cqlsh_password - - - (string) - - - (defaults to: undef) - - - — -
      -

      If credentials are require for connecting, specify the password here. See -also cqlsh_user, cqlsh_client_config.

      -
      - -
    • - -
    • - - cqlsh_port - - - (integer) - - - (defaults to: 9042) - - - — -
      -

      The host for the cqlsh command to connect to. See also -cqlsh_host.

      -
      - -
    • - -
    • - - cqlsh_user - - - (string) - - - (defaults to: 'cassandra') - - - — -
      -

      If credentials are required for connecting, specify the password here. See -also cqlsh_password, cqlsh_client_config

      -
      - -
    • - -
    • - - indexes - - - (hash) - - - (defaults to: {}) - - - — -
      -

      Creates new cassandra::schema::index resources.

      -
      - -
    • - -
    • - - keyspaces - - - (hash) - - - (defaults to: {}) - - - — -
      -

      Creates new cassandra::schema::keyspace resources.

      -
      - -
    • - -
    • - - tables - - - (hash) - - - (defaults to: {}) - - - — -
      -

      Creates new cassandra::schema::table resources.

      -
      - -
    • - -
    • - - users - - - (hash) - - - (defaults to: {}) - - - — -
      -

      Creates new cassandra::schema::user resources.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -
    -
    # File 'manifests/schema.pp', line 33
    -
    -class cassandra::schema (
    -  $connection_tries         = 6,
    -  $connection_try_sleep     = 30,
    -  $cql_types                = {},
    -  $cqlsh_additional_options = '',
    -  $cqlsh_client_config      = undef,
    -  $cqlsh_client_tmpl        = 'cassandra/cqlshrc.erb',
    -  $cqlsh_command            = '/usr/bin/cqlsh',
    -  $cqlsh_host               = 'localhost',
    -  $cqlsh_password           = undef,
    -  $cqlsh_port               = 9042,
    -  $cqlsh_user               = 'cassandra',
    -  $indexes                  = {},
    -  $keyspaces                = {},
    -  $tables                   = {},
    -  $users                    = {},
    -  ) inherits cassandra::params {
    -  require '::cassandra'
    -
    -  if $cqlsh_client_config != undef {
    -    file { $cqlsh_client_config :
    -      ensure  => file,
    -      group   => $::gid,
    -      mode    => '0600',
    -      owner   => $::id,
    -      content => template( $cqlsh_client_tmpl ),
    -      before  => Exec['::cassandra::schema connection test'],
    -    }
    -
    -    $cmdline_login = "--cqlshrc=${cqlsh_client_config}"
    -  } else {
    -    if $cqlsh_password != undef {
    -      warning('You may want to consider using the cqlsh_client_config attribute')
    -      $cmdline_login = "-u ${cqlsh_user} -p ${cqlsh_password}"
    -    } else {
    -      $cmdline_login = ''
    -    }
    -  }
    -
    -  $cqlsh_opts = "${cqlsh_command} ${cmdline_login} ${cqlsh_additional_options}"
    -  $cqlsh_conn = "${cqlsh_host} ${cqlsh_port}"
    -
    -  # See if we can make a connection to Cassandra.  Try $connection_tries
    -  # number of times with $connection_try_sleep in seconds between each try.
    -  $connection_test = "${cqlsh_opts} -e 'DESC KEYSPACES' ${cqlsh_conn}"
    -  exec { '::cassandra::schema connection test':
    -    command   => $connection_test,
    -    returns   => 0,
    -    tries     => $connection_tries,
    -    try_sleep => $connection_try_sleep,
    -    unless    => $connection_test,
    -  }
    -
    -  # manage keyspaces if present
    -  if $keyspaces {
    -    create_resources('cassandra::schema::keyspace', $keyspaces)
    -  }
    -
    -  # manage cql_types if present
    -  if $keyspaces {
    -    create_resources('cassandra::schema::cql_type', $cql_types)
    -  }
    -
    -  # manage tables if present
    -  if $tables {
    -    create_resources('cassandra::schema::table', $tables)
    -  }
    -
    -  # manage indexes if present
    -  if $indexes {
    -    create_resources('cassandra::schema::index', $indexes)
    -  }
    -
    -  # manage users if present
    -  if $users {
    -    create_resources('cassandra::schema::user', $users)
    -  }
    -
    -  # Resource Ordering
    -  Cassandra::Schema::Keyspace <| |> -> Cassandra::Schema::Cql_type <| |>
    -  Cassandra::Schema::Keyspace <| |> -> Cassandra::Schema::Table <| |>
    -  Cassandra::Schema::Cql_type <| |> -> Cassandra::Schema::Table <| |>
    -  Cassandra::Schema::Table <| |> -> Cassandra::Schema::Index <| |>
    -  Cassandra::Schema::Index <| |> -> Cassandra::Schema::User <| |>
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_type_list.html b/doc/puppet_defined_type_list.html deleted file mode 100644 index 737d682..0000000 --- a/doc/puppet_defined_type_list.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - Defined Type List - - - -
    -
    -

    Defined Type List

    - - - -
    - - -
    - - diff --git a/doc/puppet_defined_types/cassandra_3A_3Afile.html b/doc/puppet_defined_types/cassandra_3A_3Afile.html deleted file mode 100644 index 9819416..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Afile.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - Defined Type: cassandra::file - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::file

    -
    -
    -
    Defined in:
    -
    - manifests/file.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A defined type for altering files relative to the configuration directory.

    - -
    -
    -
    - -
    -

    Examples:

    - - -
    if $::memorysize_mb < 24576.0 {
    -  $max_heap_size_in_mb = floor($::memorysize_mb / 2)
    -} elsif $::memorysize_mb < 8192.0 {
    -  $max_heap_size_in_mb = floor($::memorysize_mb / 4)
    -} else {
    -  $max_heap_size_in_mb = 8192
    -}
    -
    -$heap_new_size = $::processorcount * 100
    -
    -cassandra::file { "Set Java/Cassandra max heap size to ${max_heap_size_in_mb}.":
    -  file       => 'cassandra-env.sh',
    -  file_lines => {
    -    'MAX_HEAP_SIZE' => {
    -      line  => "MAX_HEAP_SIZE='${max_heap_size_in_mb}M'",
    -      match => '^#?MAX_HEAP_SIZE=.*',
    -    },
    -  }
    -}
    -
    -cassandra::file { "Set Java/Cassandra heap new size to ${heap_new_size}.":
    -  file       => 'cassandra-env.sh',
    -  file_lines => {
    -    'HEAP_NEWSIZE'  => {
    -      line  => "HEAP_NEWSIZE='${heap_new_size}M'",
    -      match => '^#?HEAP_NEWSIZE=.*',
    -    }
    -  }
    -}
    -$tmpdir = '/var/lib/cassandra/tmp'
    -
    -file { $tmpdir:
    -  ensure => directory,
    -  owner  => 'cassandra',
    -  group  => 'cassandra',
    -}
    -
    -cassandra::file { 'Set java.io.tmpdir':
    -  file       => 'jvm.options',
    -  file_lines => {
    -    'java.io.tmpdir' => {
    -      line => "-Djava.io.tmpdir=${tmpdir}",
    -    },
    -  },
    -  require    => File[$tmpdir],
    -}
    - -
    -

    Parameters:

    -
      - -
    • - - file - - - (string) - - - (defaults to: $title) - - - — -
      -

      The name of the file relative to the config_path.

      -
      - -
    • - -
    • - - config_path - - - (string) - - - (defaults to: $::cassandra::config_path) - - - — -
      -

      The path to the configuration directory.

      -
      - -
    • - -
    • - - file_lines - - - (string) - - - (defaults to: undef) - - - — -
      -

      If set, then the create_resources -will be used to create an array of file_line -resources.

      -
      - -
    • - -
    • - - service_refresh - - - (boolean) - - - (defaults to: true) - - - — -
      -

      Is the Cassandra service is to be notified if the environment file is -changed.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -
    -
    # File 'manifests/file.pp', line 57
    -
    -define cassandra::file(
    -  $file             = $title,
    -  $config_path      = $::cassandra::config_path,
    -  $file_lines       = undef,
    -  $service_refresh  = true,
    -  ) {
    -  include cassandra
    -  include cassandra::params
    -  include stdlib
    -
    -  $path = "${config_path}/${file}"
    -
    -  if $file_lines != undef {
    -    if $service_refresh {
    -      $default_file_line = {
    -        path    => $path,
    -        require => Package['cassandra'],
    -        notify  => Service['cassandra'],
    -      }
    -    } else {
    -      $default_file_line = {
    -        path    => $path,
    -        require => Package['cassandra'],
    -      }
    -    }
    -
    -    create_resources(file_line, $file_lines, $default_file_line)
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Adeprecation_warning.html b/doc/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Adeprecation_warning.html deleted file mode 100644 index d08dacc..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Adeprecation_warning.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - Defined Type: cassandra::private::deprecation_warning - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::private::deprecation_warning

    -
    -
    -
    Defined in:
    -
    - manifests/private/deprecation_warning.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A defined type to handle deprecation messages to the user. This is not -intended to be used by a user but is documented here for completeness.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - item_number - - - (integer) - - - - — -
      -

      A unique reference for the message.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -
    -
    # File 'manifests/private/deprecation_warning.pp', line 5
    -
    -define cassandra::private::deprecation_warning($item_number,) {
    -  $item_name = $title
    -  $warning_message_1 = sprintf('%s has been deprecated and will be removed',
    -    $item_name)
    -  $warning_message_2 = 'in a future release.'
    -  $warning_message = "${warning_message_1} ${warning_message_2}"
    -  warning($warning_message)
    -  $dep_url = sprintf('https://github.com/locp/cassandra/wiki/DEP-%03d',
    -    $item_number)
    -  warning(sprintf('See %s for details.', $dep_url))
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Afirewall_ports_3A_3Arule.html b/doc/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Afirewall_ports_3A_3Arule.html deleted file mode 100644 index e377604..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aprivate_3A_3Afirewall_ports_3A_3Arule.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - Defined Type: cassandra::private::firewall_ports::rule - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::private::firewall_ports::rule

    -
    -
    -
    Defined in:
    -
    - manifests/private/firewall_ports/rule.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    A defined type to be used as a macro for setting host based firewall rules. -This is not intended to be used by a user (who should use the API provided -by cassandra::firewall_ports instead) but is documented here for -completeness.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - ports - - - (integer) - - - - — -
      -

      The number(s) of the port(s) to be opened.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -
    -
    # File 'manifests/private/firewall_ports/rule.pp', line 6
    -
    -define cassandra::private::firewall_ports::rule(
    -    $ports,
    -  ) {
    -  $array_var1 = split($title, '_')
    -  $rule_number = $array_var1[0]
    -  $rule_description = $array_var1[1]
    -  $source = $array_var1[2]
    -
    -  if size($ports) > 0 {
    -    firewall { "${rule_number} - Cassandra (${rule_description}) - ${source}":
    -      action => 'accept',
    -      dport  => $ports,
    -      proto  => 'tcp',
    -      source => $source,
    -    }
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Acql_type.html b/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Acql_type.html deleted file mode 100644 index 619e7a6..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Acql_type.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - Defined Type: cassandra::schema::cql_type - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::schema::cql_type

    -
    -
    -
    Defined in:
    -
    - manifests/schema/cql_type.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    Create or drop user defined data types within the schema.

    - -
    -
    -
    - -
    -

    Examples:

    - - -
    cassandra::schema::cql_type { 'fullname':
    -  keyspace => 'mykeyspace',
    -  fields   => {
    -    'fname' => 'text',
    -    'lname' => 'text',
    -  },
    -}
    - -
    -

    Parameters:

    -
      - -
    • - - keyspace - - - (string) - - - - — -
      -

      The name of the keyspace that the data type is to be associated with.

      -
      - -
    • - -
    • - - ensure - - - (present|absent) - - - (defaults to: present) - - - — -
      -

      ensure the data type is created, or is dropped.

      -
      - -
    • - -
    • - - fields - - - (hash) - - - (defaults to: {}) - - - — -
      -

      A hash of the fields that will be components for the data type.

      -
      - -
    • - -
    • - - cql_type_name - - - (string) - - - (defaults to: $title) - - - — -
      -

      The name of the CQL type to be created.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -
    -
    # File 'manifests/schema/cql_type.pp', line 14
    -
    -define cassandra::schema::cql_type (
    -  $keyspace,
    -  $ensure = present,
    -  $fields = {},
    -  $cql_type_name = $title,
    -  ){
    -  include 'cassandra::schema'
    -  $read_script = "DESC TYPE ${keyspace}.${cql_type_name}"
    -  $read_command = "${::cassandra::schema::cqlsh_opts} -e \"${read_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -  if $ensure == present {
    -    $create_script1 = "CREATE TYPE IF NOT EXISTS ${keyspace}.${cql_type_name}"
    -    $create_script2 = join(join_keys_to_values($fields, ' '), ', ')
    -    $create_script = "${create_script1} (${create_script2})"
    -    $create_command = "${::cassandra::schema::cqlsh_opts} -e \"${create_script}\" ${::cassandra::schema::cqlsh_conn}"
    -    exec { $create_command:
    -      unless  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } elsif $ensure == absent {
    -    $delete_script = "DROP type ${keyspace}.${cql_type_name}"
    -    $delete_command = "${::cassandra::schema::cqlsh_opts} -e \"${delete_script}\" ${::cassandra::schema::cqlsh_conn}"
    -    exec { $delete_command:
    -      onlyif  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } else {
    -    fail("Unknown action (${ensure}) for ensure attribute.")
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Aindex.html b/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Aindex.html deleted file mode 100644 index 742b25e..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Aindex.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - Defined Type: cassandra::schema::index - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::schema::index

    -
    -
    -
    Defined in:
    -
    - manifests/schema/index.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    Create or drop indexes within the schema.

    - -
    -
    -
    -

    Parameters:

    -
      - -
    • - - ensure - - - (present|absent) - - - (defaults to: present) - - - — -
      -

      Create or dro[ the index.

      -
      - -
    • - -
    • - - class_name - - - (string) - - - (defaults to: undef) - - - — -
      -

      The name of the class to be associated with an index when creating a custom -index.

      -
      - -
    • - -
    • - - index - - - (string) - - - (defaults to: $title) - - - — -
      -

      The name of the index. Defaults to the name of the resource.

      -
      - -
    • - -
    • - - keys - - - (string) - - - (defaults to: undef) - - - — -
      -

      The columns that the index is being created on.

      -
      - -
    • - -
    • - - keyspace - - - (string) - - - - — -
      -

      The name the keyspace that the index is to be associated with.

      -
      - -
    • - -
    • - - options - - - (string) - - - (defaults to: undef) - - - — -
      -

      Any options to be added to the index.

      -
      - -
    • - -
    • - - table - - - (string) - - - - — -
      -

      The name of the table that the index is to be associated with.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -
    -
    # File 'manifests/schema/index.pp', line 12
    -
    -define cassandra::schema::index(
    -  $keyspace,
    -  $table,
    -  $ensure     = present,
    -  $class_name = undef,
    -  $index      = $title,
    -  $keys       = undef,
    -  $options    = undef,
    -  ) {
    -  include 'cassandra::schema'
    -
    -  # Fully qualified index name.
    -  $fqin = "${keyspace}.${index}"
    -  # Fully qualified table name.
    -  $fqtn = "${keyspace}.${table}"
    -
    -  $read_script = "DESC INDEX ${fqin}"
    -  $read_command = "${::cassandra::schema::cqlsh_opts} -e \"${read_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -  if $ensure == present {
    -    if $class_name != undef {
    -      $create_part1 = "CREATE CUSTOM INDEX IF NOT EXISTS ${index} ON ${keyspace}.${table}"
    -    } else {
    -      $create_part1 = "CREATE INDEX IF NOT EXISTS ${index} ON ${keyspace}.${table}"
    -    }
    -
    -    if $class_name != undef {
    -      $create_part2 = "${create_part1} (${keys}) USING '${class_name}'"
    -    } else {
    -      $create_part2 = "${create_part1} (${keys})"
    -    }
    -
    -    if $options != undef {
    -      $create_script = "${create_part2} WITH OPTIONS = ${options}"
    -    } else {
    -      $create_script = $create_part2
    -    }
    -
    -    $create_command = "${::cassandra::schema::cqlsh_opts} -e \"${create_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -    exec { $create_command:
    -      unless  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } elsif $ensure == absent {
    -    $delete_script = "DROP INDEX ${fqin}"
    -    $delete_command = "${::cassandra::schema::cqlsh_opts} -e \"${delete_script}\" ${::cassandra::schema::cqlsh_conn}"
    -    exec { $delete_command:
    -      onlyif  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } else {
    -    fail("Unknown action (${ensure}) for ensure attribute.")
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Akeyspace.html b/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Akeyspace.html deleted file mode 100644 index 06e6f87..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Akeyspace.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - Defined Type: cassandra::schema::keyspace - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::schema::keyspace

    -
    -
    -
    Defined in:
    -
    - manifests/schema/keyspace.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    Create or drop keyspaces within the schema.

    - -
    -
    -
    - -
    -

    Examples:

    - - -
    $network_topology_strategy = {
    -  keyspace_class => 'NetworkTopologyStrategy',
    -    dc1            => 3,
    -    dc2            => 2
    -}
    - - -
    cassandra::schema::keyspace { 'mykeyspace':
    -  replication_map => {
    -    keyspace_class     => 'SimpleStrategy',
    -    replication_factor => 1,
    -  },
    -  durable_writes  => false,
    -}
    - -
    -

    Parameters:

    -
      - -
    • - - ensure - - - (present|absent) - - - (defaults to: present) - - - — -
      -

      Create or drop the keyspace.

      -
      - -
    • - -
    • - - durable_writes - - - (boolean) - - - (defaults to: true) - - - — -
      -

      When set to false, data written to the keyspace bypasses the commit log. Be -careful using this option because you risk losing data. Set this attribute -to false on a keyspace using the SimpleStrategy.

      -
      - -
    • - -
    • - - keyspace_name - - - (string) - - - (defaults to: $title) - - - — -
      -

      The name of the keyspace to be created.

      -
      - -
    • - -
    • - - replication_map - - - (hash) - - - (defaults to: {}) - - - — -
      -

      Needed if the keyspace is to be present. Optional if it is to be absent.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -
    -
    # File 'manifests/schema/keyspace.pp', line 24
    -
    -define cassandra::schema::keyspace(
    -  $ensure          = present,
    -  $durable_writes  = true,
    -  $keyspace_name   = $title,
    -  $replication_map = {},
    -  ) {
    -  include 'cassandra::schema'
    -
    -  $read_script = "DESC KEYSPACE ${keyspace_name}"
    -  $read_command = "${::cassandra::schema::cqlsh_opts} -e \"${read_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -  if $ensure == present {
    -    $keyspace_class = $replication_map[keyspace_class]
    -
    -    case $keyspace_class {
    -      'SimpleStrategy': {
    -        $replication_factor = $replication_map[replication_factor]
    -        $map_str = "{ 'class' : 'SimpleStrategy', 'replication_factor' : ${replication_factor} }"
    -      }
    -      'NetworkTopologyStrategy': {
    -        $map_str1 = "{ 'class' : 'NetworkTopologyStrategy'"
    -        $new_map = prefix(delete($replication_map, 'keyspace_class'), "'")
    -        $map_str2 = join(join_keys_to_values($new_map, "': "), ', ')
    -        $map_str = "${map_str1}, ${map_str2} }"
    -      }
    -      default: {
    -        $msg_part1 = "Invalid or no class (${keyspace_class}) specified for"
    -        $msg_part2 = "keyspace ${keyspace_name}."
    -        fail("${msg_part1} ${msg_part2}")
    -      }
    -    }
    -
    -    $create_script1 = "CREATE KEYSPACE IF NOT EXISTS ${keyspace_name}"
    -    $create_script2 = "WITH REPLICATION = ${map_str}"
    -    $create_script3 = "AND DURABLE_WRITES = ${durable_writes}"
    -    $create_script = "${create_script1} ${create_script2} ${create_script3}"
    -    $create_command = "${::cassandra::schema::cqlsh_opts} -e \"${create_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -    exec { $create_command:
    -      unless  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } elsif $ensure == absent {
    -    $delete_script = "DROP KEYSPACE ${keyspace_name}"
    -    $delete_command = "${::cassandra::schema::cqlsh_opts} -e \"${delete_script}\" ${::cassandra::schema::cqlsh_conn}"
    -    exec { $delete_command:
    -      onlyif  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } else {
    -    fail("Unknown action (${ensure}) for ensure attribute.")
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Atable.html b/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Atable.html deleted file mode 100644 index 831dfe1..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Atable.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - Defined Type: cassandra::schema::table - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::schema::table

    -
    -
    -
    Defined in:
    -
    - manifests/schema/table.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    Create or drop tables within the schema.

    - -
    -
    -
    - -
    -

    Examples:

    - - -
    cassandra::schema::table { 'users':
    -  keyspace => 'mykeyspace',
    -  columns  => {
    -    'userid'      => 'int',
    -    'fname'       => 'text',
    -    'lname'       => 'text',
    -    'PRIMARY KEY' => '(userid)',
    -  },
    -}
    - -
    -

    Parameters:

    -
      - -
    • - - keyspace - - - (string) - - - - — -
      -

      The name of the keyspace.

      -
      - -
    • - -
    • - - columns - - - (hash) - - - (defaults to: {}) - - - — -
      -

      A hash of the columns to be placed in the table. Optional if the table is -to be absent.

      -
      - -
    • - -
    • - - ensure - - - (present|absent) - - - (defaults to: present) - - - — -
      -

      Ensure a keyspace is created or dropped.

      -
      - -
    • - -
    • - - options - - - (array) - - - (defaults to: []) - - - — -
      -

      Options to be added to the table creation.

      -
      - -
    • - -
    • - - table - - - (string) - - - (defaults to: $title) - - - — -
      -

      The name of the table. Defaults to the name of the resource.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -
    -
    # File 'manifests/schema/table.pp', line 19
    -
    -define cassandra::schema::table (
    -  $keyspace,
    -  $ensure  = present,
    -  $columns = {},
    -  $options = [],
    -  $table   = $title,
    -  ){
    -  include 'cassandra::schema'
    -  $read_script = "DESC TABLE ${keyspace}.${table}"
    -  $read_command = "${::cassandra::schema::cqlsh_opts} -e \"${read_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -  if $ensure == present {
    -    $create_script1 = "CREATE TABLE IF NOT EXISTS ${keyspace}.${table}"
    -    $cols_def = join(join_keys_to_values($columns, ' '), ', ')
    -    $cols_def_rm_collection_type = delete($cols_def, 'COLLECTION-TYPE ')
    -
    -    if count($options) > 0 {
    -      $options_def = join($options, ' AND ')
    -      $create_script = "${create_script1} (${cols_def_rm_collection_type}) WITH ${options_def}"
    -    } else {
    -      $create_script = "${create_script1} (${cols_def_rm_collection_type})"
    -    }
    -
    -    $create_command = "${::cassandra::schema::cqlsh_opts} -e \"${create_script}\" ${::cassandra::schema::cqlsh_conn}"
    -    exec { $create_command:
    -      unless  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } elsif $ensure == absent {
    -    $delete_script = "DROP TABLE IF EXISTS ${keyspace}.${table}"
    -    $delete_command = "${::cassandra::schema::cqlsh_opts} -e \"${delete_script}\" ${::cassandra::schema::cqlsh_conn}"
    -    exec { $delete_command:
    -      onlyif  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } else {
    -    fail("Unknown action (${ensure}) for ensure attribute.")
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Auser.html b/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Auser.html deleted file mode 100644 index 53e1940..0000000 --- a/doc/puppet_defined_types/cassandra_3A_3Aschema_3A_3Auser.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - Defined Type: cassandra::schema::user - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Defined Type: cassandra::schema::user

    -
    -
    -
    Defined in:
    -
    - manifests/schema/user.pp -
    -
    -
    -

    Overview

    -
    -
    - -

    Create or drop users. To use this class, a suitable -authenticator (e.g. PasswordAuthenticator) must be set in the -Cassandra class.

    - -
    -
    -
    - -
    -

    Examples:

    - - -
    cassandra::schema::user { 'akers':
    -  password  => 'Niner2',
    -  superuser => true,
    -}
    -
    -cassandra::schema::user { 'lucan':
    -  ensure => absent,
    -}
    - -
    -

    Parameters:

    -
      - -
    • - - ensure - - - (present | absent) - - - (defaults to: present) - - - — -
      -

      Valid values can be present to ensure a user is created, -or absent to remove the user if it exists.

      -
      - -
    • - -
    • - - password - - - (string) - - - (defaults to: undef) - - - — -
      -

      A password for the user.

      -
      - -
    • - -
    • - - superuser - - - (boolean) - - - (defaults to: false) - - - — -
      -

      If the user is to be a super-user on the system.

      -
      - -
    • - -
    • - - user_name - - - (string) - - - (defaults to: $title) - - - — -
      -

      The name of the user.

      -
      - -
    • - -
    - - -
    - - - - - -
    -
    -
    -
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -
    -
    # File 'manifests/schema/user.pp', line 18
    -
    -define cassandra::schema::user (
    -  $ensure    = present,
    -  $password  = undef,
    -  $superuser = false,
    -  $user_name = $title,
    -  ){
    -  include 'cassandra::schema'
    -  $read_script = 'LIST USERS'
    -  $read_command = "${::cassandra::schema::cqlsh_opts} -e \"${read_script}\" ${::cassandra::schema::cqlsh_conn} | grep '\s*${user_name} |'"
    -
    -  if $ensure == present {
    -    $create_script1 = "CREATE USER IF NOT EXISTS ${user_name}"
    -
    -    if $password != undef {
    -      $create_script2 = "${create_script1} WITH PASSWORD '${password}'"
    -    } else {
    -      $create_script2 = $create_script1
    -    }
    -
    -    if $superuser {
    -      $create_script = "${create_script2} SUPERUSER"
    -    } else {
    -      $create_script = "${create_script2} NOSUPERUSER"
    -    }
    -
    -    $create_command = "${::cassandra::schema::cqlsh_opts} -e \"${create_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -    exec { "Create user (${user_name})":
    -      command => $create_command,
    -      unless  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } elsif $ensure == absent {
    -    $delete_script = "DROP USER ${user_name}"
    -    $delete_command = "${::cassandra::schema::cqlsh_opts} -e \"${delete_script}\" ${::cassandra::schema::cqlsh_conn}"
    -
    -    exec { "Delete user (${user_name})":
    -      command => $delete_command,
    -      onlyif  => $read_command,
    -      require => Exec['::cassandra::schema connection test'],
    -    }
    -  } else {
    -    fail("Unknown action (${ensure}) for ensure attribute.")
    -  }
    -}
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/doc/top-level-namespace.html b/doc/top-level-namespace.html deleted file mode 100644 index 8a73669..0000000 --- a/doc/top-level-namespace.html +++ /dev/null @@ -1,578 +0,0 @@ - - - - - - - Top Level Namespace - - — Documentation by YARD 0.9.5 - - - - - - - - - - - - - - - - - - - -
    - - - - -

    Top Level Namespace - - - -

    -
    - - - - - - - - - - - -
    - - - - - - - - - -

    - Instance Method Summary - collapse -

    - - - - - - -
    -

    Instance Method Details

    - - -
    -

    - - #cassandramajorversioninteger - - - - - -

    -
    - -

    Extract the major version from the cassandrarelease fact.

    - - -
    -
    -
    - -

    Returns:

    -
      - -
    • - - - (integer) - - - - — -
      -

      The major version of the Cassandra instance.

      -
      - -
    • - -
    - -

    See Also:

    - -

    Caveats:

    -
      - -
    • - - - - - -
      -

      Requires that the cassandrarelease has been successfully retrieved.

      -
      - -
    • - -
    - -
    - - - - -
    -
    -
    -
    -21
    -22
    -23
    -24
    -25
    -26
    -
    -
    # File 'lib/facter/cassandra.rb', line 21
    -
    -Facter.add('cassandramajorversion') do
    -  setcode do
    -    release = Facter.value(:cassandrarelease)
    -    release.split('.')[0].to_i if release
    -  end
    -end
    -
    -
    - -
    -

    - - #cassandraminorversioninteger - - - - - -

    -
    - -

    Extract the minor version from the cassandrarelease fact.

    - - -
    -
    -
    - -

    Returns:

    -
      - -
    • - - - (integer) - - - - — -
      -

      The minor version of the Cassandra instance.

      -
      - -
    • - -
    - -

    See Also:

    - -

    Caveats:

    -
      - -
    • - - - - - -
      -

      Requires that the cassandrarelease has been successfully retrieved.

      -
      - -
    • - -
    - -
    - - - - -
    -
    -
    -
    -33
    -34
    -35
    -36
    -37
    -38
    -
    -
    # File 'lib/facter/cassandra.rb', line 33
    -
    -Facter.add('cassandraminorversion') do
    -  setcode do
    -    release = Facter.value(:cassandrarelease)
    -    release.split('.')[1].to_i if release
    -  end
    -end
    -
    -
    - -
    -

    - - #cassandrapatchversioninteger - - - - - -

    -
    - -

    Extract the patch version from the cassandrarelease fact.

    - - -
    -
    -
    - -

    Returns:

    -
      - -
    • - - - (integer) - - - - — -
      -

      The patch version of the Cassandra instance.

      -
      - -
    • - -
    - -

    See Also:

    - -

    Caveats:

    -
      - -
    • - - - - - -
      -

      Requires that the cassandrarelease has been successfully retrieved.

      -
      - -
    • - -
    - -
    - - - - -
    -
    -
    -
    -45
    -46
    -47
    -48
    -49
    -50
    -
    -
    # File 'lib/facter/cassandra.rb', line 45
    -
    -Facter.add('cassandrapatchversion') do
    -  setcode do
    -    release = Facter.value(:cassandrarelease)
    -    release.split('.')[2].to_i if release
    -  end
    -end
    -
    -
    - -
    -

    - - #cassandrareleasestring - - - - - -

    -
    - -

    Extract the release string from the running Cassandra instance.

    - -

    undefined.

    - - -
    -
    -
    - -

    Returns:

    -
      - -
    • - - - (string) - - - - — -
      -

      The version string (e.g. 3.0.1).

      -
      - -
    • - -
    -

    Caveats:

    -
      - -
    • - - - - - -
      -

      The Cassandra service needs to be running, otherwise the fact will be

      -
      - -
    • - -
    -

    Resolution:

    -
      - -
    • - - - - - -
      -

      Runs the command “nodetool version”.

      -
      - -
    • - -
    - -
    - - - - -
    -
    -
    -
    -9
    -10
    -11
    -12
    -13
    -14
    -
    -
    # File 'lib/facter/cassandra.rb', line 9
    -
    -Facter.add('cassandrarelease') do
    -  setcode do
    -    version = Facter::Util::Resolution.exec('nodetool version')
    -    version.match(/\d+\.\d+\.\d+/).to_s if version && version != ''
    -  end
    -end
    -
    -
    - -
    - -
    - - - -
    - - \ No newline at end of file diff --git a/lib/puppet/init.pp b/lib/puppet/init.pp new file mode 100644 index 0000000..3cd72b7 --- /dev/null +++ b/lib/puppet/init.pp @@ -0,0 +1,55 @@ +############################################################################# +# We removed default VPC's from out AWS configuration. Unless a VPC is +# specified to Beaker AWS it will fail if there is no default. This manifest +# is simply a creation setup for what is required for beaker. When this has +# been created, ensure that the subnet is specified in the node file. +############################################################################# +$account_name = 'Beaker-1025093278' +$region = 'eu-west-1' + +ec2_vpc_dhcp_options { $account_name: + ensure => present, + region => $region, + domain_name => $domain_name, + domain_name_servers => ['8.8.8.8', '8.8.4.4'], +} + +ec2_vpc { $account_name: + ensure => present, + cidr_block => '10.0.0.0/16', + dhcp_options => $account_name, + region => $region, +} + +ec2_vpc_internet_gateway { "${account_name}-igw": + ensure => $ensure, + region => $region, + vpc => $account_name, +} + +ec2_vpc_routetable { "${account_name}-rtb": + ensure => $ensure, + region => $region, + routes => [ + { + 'destination_cidr_block' => '10.0.0.0/16', + 'gateway' => 'local', + }, + { + 'destination_cidr_block' => '0.0.0.0/0', + 'gateway' => "${account_name}-igw", + } + ], + vpc => $account_name, +} + + +ec2_vpc_subnet { $account_name: + ensure => present, + availability_zone => "${region}a", + cidr_block => '10.0.0.0/20', + region => $region, + route_table => "${account_name}-rtb", + vpc => $account_name, + map_public_ip_on_launch => true, +} diff --git a/manifests/private/deprecation_warning.pp b/manifests/private/deprecation_warning.pp deleted file mode 100644 index a8a56cf..0000000 --- a/manifests/private/deprecation_warning.pp +++ /dev/null @@ -1,15 +0,0 @@ -# A defined type to handle deprecation messages to the user. -# This is not intended to be used by a user but is documented here for -# completeness. -# @param item_number [integer] A unique reference for the message. -define cassandra::private::deprecation_warning($item_number,) { - $item_name = $title - $warning_message_1 = sprintf('%s has been deprecated and will be removed', - $item_name) - $warning_message_2 = 'in a future release.' - $warning_message = "${warning_message_1} ${warning_message_2}" - warning($warning_message) - $dep_url = sprintf('https://github.com/locp/cassandra/wiki/DEP-%03d', - $item_number) - warning(sprintf('See %s for details.', $dep_url)) -} diff --git a/metadata.json b/metadata.json index ee16de6..7568075 100644 --- a/metadata.json +++ b/metadata.json @@ -1,91 +1,91 @@ { "name": "locp-cassandra", - "version": "2.1.1", + "version": "2.1.2", "author": "locp", "summary": "Installs Cassandra, DataStax Agent & OpsCenter on RHEL/Ubuntu/Debian.", "license": "Apache-2.0", "source": "https://github.com/locp/cassandra", "project_page": "https://github.com/locp/cassandra", "issues_url": "https://github.com/locp/cassandra/issues", "tags": [ "cassandra", "cluster", "database", "datastax", "datastax-agent", "nosql" ], "requirements": [ { "name": "pe", "version_requirement": ">= 3.7.0 < 2015.4.0" }, { "name": "puppet", "version_requirement": ">= 3.0.0 < 5.0.0" } ], "dependencies": [ { "name": "puppetlabs-apt", "version_requirement": ">= 2.0.0 < 3.0.0" }, { "name": "puppetlabs-firewall", "version_requirement": ">= 1.0.0 < 2.0.0" }, { "name": "puppetlabs-inifile", "version_requirement": ">= 1.5.0 < 2.0.0" }, { "name": "puppetlabs-stdlib", "version_requirement": ">= 3.0.0 < 5.0.0" } ], "operatingsystem_support": [ { "operatingsystem": "CentOS", "operatingsystemrelease": [ "6", "7" ] }, { "operatingsystem": "OracleLinux", "operatingsystemrelease": [ "6", "7" ] }, { "operatingsystem": "RedHat", "operatingsystemrelease": [ "6", "7" ] }, { "operatingsystem": "Debian", "operatingsystemrelease": [ "7", "8" ] }, { "operatingsystem": "Scientific", "operatingsystemrelease": [ "6", "7" ] }, { "operatingsystem": "Ubuntu", "operatingsystemrelease": [ "12.04", "14.04", "16.04" ] } ] } diff --git a/rake/rake_tasks.rb b/rake/rake_tasks.rb new file mode 100644 index 0000000..219e7c5 --- /dev/null +++ b/rake/rake_tasks.rb @@ -0,0 +1,50 @@ +############################################################################# +# Some module specific rake tasks. +############################################################################# +require_relative 'tasks/acceptance' +require_relative 'tasks/deploy' + +task default: ['test'] + +# Validate that we are running on a valide CircleCI branch. Exit false +# if we do not seem to be on a CircleCI build at all or if the branch +# name does not match a provided pattern. +def validate_branch(valid_branch_pattern) + branch_name = ENV['CIRCLE_BRANCH'] + + unless branch_name + puts 'CIRCLE_BRANCH is not set.' + return false + end + + unless branch_name =~ valid_branch_pattern + puts "Branch #{branch_name} is not suitable for this operation." + return false + end + + true +end + +desc '[CI Only] Tag, build and push the module to PuppetForge.' +task :deploy do + abort('Only deploy from master.') unless validate_branch(/^master-/) + + # Find out what the local version of the module is. + file = File.read('metadata.json') + data_hash = JSON.parse(file) + local_version = data_hash['version'] + abort('Unable to find local module version.') unless local_version + puts "Module version (local): #{local_version}" + + Rake::Task['deploy:tag'].invoke(local_version) + Rake::Task['deploy:forge'].invoke(local_version) +end + +desc 'Run metadata_lint, rubocop, lint, validate and spec.' +task test: [ + :metadata_lint, + :rubocop, + :lint, + :validate, + :spec +] diff --git a/rake/tasks/acceptance.rb b/rake/tasks/acceptance.rb new file mode 100644 index 0000000..57f7af2 --- /dev/null +++ b/rake/tasks/acceptance.rb @@ -0,0 +1,56 @@ +require 'tempfile' + +require_relative 'acceptance/aws_deploy' +require_relative 'acceptance/tests' + +# Check to see if acceptance is enabled. +def acceptance_enabled + acceptance = ENV['ACCEPTANCE'] + + unless acceptance == 'true' + puts 'Either ACCEPTANCE is not set or is "false".' + return false + end + + true +end + +# Check to see if AWS acceptance is enabled. +def ec2_acceptance_enabled + ec2_acceptance = ENV['EC2_ACCEPTANCE'] + + unless ec2_acceptance == 'true' + puts 'Either EC2_ACCEPTANCE is not set or is "false".' + return false + end + + true +end + +def puppet_apply + system 'puppet apply lib/puppet/init.pp --test' + return_status = $CHILD_STATUS.exitstatus + exit(return_status) unless return_status.zero? || return_status == 2 +end + +def test_node(hypervisor, node) + if hypervisor == 'docker' + system("BEAKER_destroy=no BEAKER_set=#{node} bundle exec rake beaker") + else + return 0 unless ec2_acceptance_enabled + system("BEAKER_set=#{node} bundle exec rake beaker") + end + + $CHILD_STATUS.exitstatus +end + +def test_nodes(nodes) + return_code = 0 + + nodes.each do |node| + a = node.split('_') + return_code += test_node(a[0], node) + end + + return_code +end diff --git a/rake/tasks/acceptance/aws_deploy.rb b/rake/tasks/acceptance/aws_deploy.rb new file mode 100644 index 0000000..1ffa68c --- /dev/null +++ b/rake/tasks/acceptance/aws_deploy.rb @@ -0,0 +1,14 @@ +namespace :acceptance do + desc 'Deploy a docker node in AWS.' + task :aws_deploy do + exit(0) unless ec2_acceptance_enabled + node_index = ENV['CIRCLE_NODE_INDEX'] + + unless node_index == '0' + puts 'Not on the primary CIRCLE_NODE' + exit(0) + end + + puppet_apply + end +end diff --git a/rake/tasks/acceptance/aws_destroy.rb b/rake/tasks/acceptance/aws_destroy.rb new file mode 100644 index 0000000..24d1e76 --- /dev/null +++ b/rake/tasks/acceptance/aws_destroy.rb @@ -0,0 +1,5 @@ +namespace :acceptance do + desc 'Destroy a docker node in AWS.' + task :aws_destroy do + end +end diff --git a/rake/tasks/acceptance/tests.rb b/rake/tasks/acceptance/tests.rb new file mode 100644 index 0000000..563d251 --- /dev/null +++ b/rake/tasks/acceptance/tests.rb @@ -0,0 +1,24 @@ +namespace :acceptance do + desc 'Run acceptance tests.' + task :tests do + exit(0) unless acceptance_enabled + exit(0) unless validate_branch(/^release-/) || validate_branch(/^hotfix-/) + stdout = `bundle exec rake beaker:sets | xargs` + sets = stdout.split(' ') + node_total = ENV['CIRCLE_NODE_TOTAL'].to_i + node_index = ENV['CIRCLE_NODE_INDEX'].to_i + nodes = [] + l = sets.length - 1 + + (0..l).each do |i| + nodes << sets[i] if (i % node_total) == node_index + end + + unless nodes.length + puts 'No nodes configured for this node.' + exit(0) + end + + exit(test_nodes(nodes)) + end +end diff --git a/rake/tasks/deploy.rb b/rake/tasks/deploy.rb new file mode 100644 index 0000000..ac1c7e0 --- /dev/null +++ b/rake/tasks/deploy.rb @@ -0,0 +1,2 @@ +require_relative 'deploy/forge' +require_relative 'deploy/tag' diff --git a/rake/tasks/deploy/forge.rb b/rake/tasks/deploy/forge.rb new file mode 100644 index 0000000..e436fd3 --- /dev/null +++ b/rake/tasks/deploy/forge.rb @@ -0,0 +1,33 @@ +require 'httparty' +require 'json' +require 'yaml' + +namespace :deploy do + desc 'Deploy module to Puppet Forge if required.' + task :forge, [:version] do |_t, args| + local_version = args[:version] + + # Find out what the forge version of the module is. + response = HTTParty.get('https://forgeapi.puppetlabs.com/v3/modules/locp-cassandra') + data_hash = JSON.parse(response.body) + forge_version = data_hash['current_release']['version'] + abort('Unable to find out the forge version.') unless forge_version + puts "Module version (forge): #{forge_version}" + exit 0 unless local_version != forge_version + + # Build the module. + puts "Build and deploy version #{local_version}." + Rake::Task['module:clean'].invoke + Rake::Task['build'].invoke + + # Now see if we can push this baby to the forge. + PUPPET_FORGE_CREDENTIALS_FILE = ENV['HOME'] + '/' + '.puppetforge.yml' + username = ENV['CIRCLE_PROJECT_USERNAME'] + password = ENV['PUPPET_FORGE_PASSWORD'] + abort("Not enough data to populate #{PUPPET_FORGE_CREDENTIALS_FILE}") unless username && password + puts "Populating #{PUPPET_FORGE_CREDENTIALS_FILE}" + credentials = { 'username' => username, 'password' => password } + File.open(PUPPET_FORGE_CREDENTIALS_FILE, 'w') { |f| f.write credentials.to_yaml } + Rake::Task['module:push'].invoke + end +end diff --git a/rake/tasks/deploy/tag.rb b/rake/tasks/deploy/tag.rb new file mode 100644 index 0000000..7c48fcc --- /dev/null +++ b/rake/tasks/deploy/tag.rb @@ -0,0 +1,22 @@ +require 'git' + +namespace :deploy do + desc 'Deploy tag for the module' + task :tag, [:version] do |_t, args| + tagname = args[:version] + # Find out if a tag is available for this version. + log = Logger.new(STDOUT) + log.level = Logger::WARN + git = Git.open('.', log: log) + + begin + git.tag(tagname) + rescue Git::GitTagNameDoesNotExist + puts "Creating tag: #{tagname}" + git.add_tag(tagname, 'master', message: 'tagged by RubyAutoDeployTest', f: true) + git.push('origin', "refs/tags/#{tagname}", f: true) + else + puts "Tag: #{tagname} already exists." + end + end +end diff --git a/scripts/beaker_docker.sh b/scripts/beaker_docker.sh deleted file mode 100755 index 471bd82..0000000 --- a/scripts/beaker_docker.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -############################################################################# -# A basic utility script for connecting and controlling docker instances -# that have been created by beaker. -############################################################################# - -# Define constants -PROG=$( basename $0 ) - -usage_message () { - exit_status="$1" - echo "usage: $PROG connect" - echo "usage: $PROG destroy" - exit $exit_status -} - -if [ $# -lt 1 ]; then - usage_message 2 -fi - -case "$1" in - connect) port=$( docker ps -n=-1 | grep -v '^CONTAINER' | \ - awk '{ i = NF - 1; print $i }' | sed 's/.*:\(.*\)-.*/\1/' ) - ssh root@localhost -p $port - ;; - destroy) docker rm -f $( docker ps -n=-1 -q ) - ;; - *) usage_message 2 -esac diff --git a/scripts/circle.bash b/scripts/circle.bash deleted file mode 100755 index 405073b..0000000 --- a/scripts/circle.bash +++ /dev/null @@ -1,138 +0,0 @@ -#!/bin/bash -############################################################################# -# A script for splitting the test suite across nodes on CircleCI. -############################################################################# - -PUPPET_FORGE_CREDENTIALS_FILE="$HOME/.puppetforge.yml" - -acceptance_tests () { - status=0 - BEAKER_set='' - - echo "$CIRCLE_BRANCH" | grep -Eq -e '^release/' -e '^legacy/minor' -e '^legacy/candidate' - - if [ $? != 0 ]; then - echo "Not a release branch." - return 0 - fi - - i=0 - nodes=$( bundle exec rake beaker_nodes | grep '^circle' ) - nodes=$( echo $nodes ) - - if [ -z "${nodes}" ]; then - echo "ERROR: No nodes found." - exit 1 - fi - - for node in $nodes; do - if [ $(($i % $CIRCLE_NODE_TOTAL)) -eq $CIRCLE_NODE_INDEX ]; then - BEAKER_destroy=no BEAKER_set=$node bundle exec rake beaker || status=$? - docker ps -a | grep -v 'CONTAINER ID' | xargs docker rm -f - fi - - ((i=i+1)) - done - - return $status -} - -deploy () { - local_version=$( ./scripts/module_version.py --local ) - - if [ -z "$local_version" ]; then - echo "Unable to find local module version." - exit 1 - fi - - echo "Module version (local): $local_version" - git tag --list | grep --quiet $local_version - - if [ $? != 0 ]; then - echo "Creating tag $local_version." - bundle exec rake module:tag || exit $? - fi - - git ls-remote --tags 2> /dev/null | grep -q "refs/tags/${local_version}" - - if [ $? != 0 ]; then - echo "Pushing remote tag $local_version." - git push --tags || exit $? - fi - - forge_version=$( ./scripts/module_version.py --forge ) - - if [ -z "$forge_version" ]; then - echo "Unable to find forge module version." - exit 1 - fi - - echo "Module version (forge): $forge_version" - - if [ $local_version != $forge_version ]; then - echo "Build and deploy version $local_version." - bundle exec rake module:clean || exit $? - bundle exec rake build || exit $? - - if [[ -z "$CIRCLE_PROJECT_USERNAME" || -z "$PUPPET_FORGE_PASSWORD" ]]; then - echo "Not enough data to populate ${PUPPET_FORGE_CREDENTIALS_FILE}" - exit 1 - else - echo "Populating $PUPPET_FORGE_CREDENTIALS_FILE" - echo '---' > $PUPPET_FORGE_CREDENTIALS_FILE - echo 'url: https://forgeapi.puppetlabs.com' >> $PUPPET_FORGE_CREDENTIALS_FILE - echo "username: ${CIRCLE_PROJECT_USERNAME}" >> $PUPPET_FORGE_CREDENTIALS_FILE - echo "password: ${PUPPET_FORGE_PASSWORD}" >> $PUPPET_FORGE_CREDENTIALS_FILE - fi - - bundle exec rake module:push - fi -} - -merge () { - if [ ! -z "$RUN_NIGHTLY_BUILD" ]; then - echo "Skipping merge on nightly build." - exit 0 - fi - - if [ "$CIRCLE_NODE_INDEX" != 0 ]; then - echo "Not on the primary Circle node. Skipping merge." - exit 0 - fi - - target="$1" - git config --global user.email "circleci@locp.co.uk" - git config --global user.name "CircleCI" - git checkout $target 2> /dev/null - - if [ $? != 0 ]; then - echo "Attempting to create branch $target." - git checkout -b "$target" || exit $? - echo "Branch $target created successfully." - else - echo "Branch $target checked out successfully." - fi - - echo "Fetching from origin with purge." - git fetch -p origin || exit $? - git branch -r | grep origin/$target - - if [ $? == 0 ]; then - echo "Pulling from origin." - git pull origin $target || exit $? - else - echo "$target is not currently on the remote origin." - fi - - echo "Merging $CIRCLE_BRANCH into $target." - message="Merge branch $CIRCLE_BRANCH into $target" - git merge -m "$message" $CIRCLE_BRANCH || exit $? - echo "Pushing merged branch back to the origin." - git push --set-upstream origin $target - return $? -} - -subcommand=$1 -shift -$subcommand $* -exit $? diff --git a/scripts/module_version.py b/scripts/module_version.py deleted file mode 100755 index a04a201..0000000 --- a/scripts/module_version.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python -import json -import sys -import urllib - -if sys.argv[1] == '--local': - with open('metadata.json') as data_file: - data = json.load(data_file) - - print data['version'] - -if sys.argv[1] == '--forge': - url = 'https://forgeapi.puppetlabs.com/v3/modules/locp-cassandra' - response = urllib.urlopen(url) - data = json.loads(response.read()) - print data['current_release']['version'] diff --git a/spec/acceptance/bootstrap_spec.rb b/spec/acceptance/bootstrap_spec.rb new file mode 100644 index 0000000..0ba8308 --- /dev/null +++ b/spec/acceptance/bootstrap_spec.rb @@ -0,0 +1,67 @@ +require 'spec_helper_acceptance' + +describe 'Bootstrap' do + whoami_pp = <<-EOS + notify { "operatingsystem: ${::operatingsystem}": } -> + notify { "operatingsystemmajrelease: ${::operatingsystemmajrelease}": } + EOS + + describe '########### Identify the node.' do + it 'should work with no errors' do + apply_manifest(whoami_pp, catch_failures: true) + end + end + + bootstrap_pp = <<-EOS + case downcase($::operatingsystem) { + 'centos': { + if $::operatingsystemmajrelease == 6 { + package {'yum-utils': } -> + package {'centos-release-scl': } -> + exec { '/usr/bin/yum-config-manager --enable rhel-server-rhscl-7-rpms': } -> + package {'ruby200': } -> + exec { '/bin/cp /opt/rh/ruby200/enable /etc/profile.d/ruby.sh': } -> + exec { '/bin/rm /usr/bin/ruby /usr/bin/gem': } -> + exec { '/usr/sbin/alternatives --install /usr/bin/ruby ruby /opt/rh/ruby200/root/usr/bin/ruby 1000': } -> + exec { '/usr/sbin/alternatives --install /usr/bin/gem gem /opt/rh/ruby200/root/usr/bin/gem 1000': } + } + } + 'ubuntu': { + if $::operatingsystemmajrelease == 12.04 { + package {'python-software-properties':} -> + exec {'/usr/bin/apt-add-repository ppa:brightbox/ruby-ng':} -> + exec {'/usr/bin/apt-get update': } -> + package {'ruby2.0': } -> + exec { '/bin/rm /usr/bin/ruby': } -> + exec { '/usr/sbin/update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby2.0 1000': } + } + elsif $::operatingsystemmajrelease == 16.04 { + package { 'locales-all': } -> + package { 'net-tools': } -> + package { 'sudo': } -> + package { 'ufw': } -> + package { 'wget': } -> + package { 'ntp': } -> + package { 'python-pip': } -> + package { 'python-minimal': } -> + exec { '/bin/rm -f /usr/sbin/policy-rc.d': } -> + exec { '/usr/bin/wget http://launchpadlibrarian.net/109052632/python-support_1.0.15_all.deb': + cwd => '/var/tmp', + creates => '/var/tmp/python-support_1.0.15_all.deb', + } ~> + exec { '/usr/bin/dpkg -i /var/tmp/python-support_1.0.15_all.deb': } -> + package { 'cassandra-driver': + provider => 'pip', + } + } + } + } + EOS + + describe '########### Node specific manifest.' do + it 'should work with no errors' do + apply_manifest(bootstrap_pp, catch_failures: true) + shell('[ -d /opt/rh/ruby200 ] && /usr/bin/gem install puppet -v 3.8.7 --no-rdoc --no-ri; true') + end + end +end diff --git a/spec/acceptance/cassandra2_spec.rb b/spec/acceptance/cassandra2_spec.rb new file mode 100644 index 0000000..0005b72 --- /dev/null +++ b/spec/acceptance/cassandra2_spec.rb @@ -0,0 +1,387 @@ +require 'spec_helper_acceptance' + +describe 'cassandra2', unless: CASSANDRA2_UNSUPPORTED_PLATFORMS.include?(fact('lsbdistrelease')) do + cassandra_install_pp = <<-EOS + include cassandra::datastax_repo + include cassandra::java + + $run_schema_tests = hiera('cassandra::run_schema_tests', true) + $version = '2.2.8' + + if $::osfamily == 'RedHat' { + $package_ensure = "${version}-1" + $cassandra_optutils_package = 'cassandra22-tools' + $cassandra_package = 'cassandra22' + } else { + $package_ensure = $version + $cassandra_optutils_package = 'cassandra-tools' + $cassandra_package = 'cassandra' + + exec { '/bin/chown root:root /etc/apt/sources.list.d/datastax.list': + unless => '/usr/bin/test -O /etc/apt/sources.list.d/datastax.list', + require => Class['cassandra::datastax_agent'] + } + } + + $settings = { + 'authenticator' => 'PasswordAuthenticator', + 'cluster_name' => 'MyCassandraCluster', + 'commitlog_directory' => '/var/lib/cassandra/commitlog', + 'commitlog_sync' => 'periodic', + 'commitlog_sync_period_in_ms' => 10000, + 'data_file_directories' => ['/var/lib/cassandra/data'], + 'endpoint_snitch' => 'GossipingPropertyFileSnitch', + 'listen_address' => $::ipaddress, + 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', + 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', + 'seed_provider' => [ + { + 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', + 'parameters' => [ + { + 'seeds' => $::ipaddress, + }, + ], + }, + ], + 'start_native_transport' => true, + } + + if versioncmp($::rubyversion, '1.9.0') < 0 { + $service_refresh = false + } else { + $service_refresh = true + } + + class { 'cassandra': + package_ensure => $package_ensure, + package_name => $cassandra_package, + service_refresh => $service_refresh, + settings => $settings, + require => Class['cassandra::datastax_repo', 'cassandra::java'] + } + + class { 'cassandra::optutils': + package_ensure => $package_ensure, + package_name => $cassandra_optutils_package, + require => Class['cassandra'] + } + + class { 'cassandra::datastax_agent': + require => Class['cassandra'] + } + + # This really sucks but Docker, CentOS 6 and iptables don't play nicely + # together. Therefore we can't test the firewall on this platform :-( + if $::operatingsystem != CentOS and $::operatingsystemmajrelease != 6 { + include '::cassandra::firewall_ports' + } + EOS + + describe '########### Cassandra installation.' do + it 'should work with no errors' do + apply_manifest(cassandra_install_pp, catch_failures: true) + end + + it 'check code is idempotent' do + expect(apply_manifest(cassandra_install_pp, + catch_failures: true).exit_code).to be_zero + end + end + + schema_testing_create_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + $cql_types = { + 'fullname' => { + 'keyspace' => 'mykeyspace', + 'fields' => { + 'fname' => 'text', + 'lname' => 'text', + }, + }, + } + + $keyspaces = { + 'mykeyspace' => { + ensure => present, + replication_map => { + keyspace_class => 'SimpleStrategy', + replication_factor => 1, + }, + durable_writes => false, + }, + } + + class { 'cassandra::schema': + cql_types => $cql_types, + cqlsh_host => $::ipaddress, + cqlsh_password => 'cassandra', + cqlsh_user => 'cassandra', + indexes => { + 'users_lname_idx' => { + keyspace => 'mykeyspace', + table => 'users', + keys => 'lname', + }, + }, + keyspaces => $keyspaces, + tables => { + 'users' => { + 'keyspace' => 'mykeyspace', + 'columns' => { + 'userid' => 'int', + 'fname' => 'text', + 'lname' => 'text', + 'PRIMARY KEY' => '(userid)', + }, + }, + }, + users => { + 'spillman' => { + password => 'Niner27', + }, + 'akers' => { + password => 'Niner2', + superuser => true, + }, + 'boone' => { + password => 'Niner75', + }, + }, + } + } + EOS + + describe '########### Schema create.' do + it 'should work with no errors' do + apply_manifest(schema_testing_create_pp, catch_failures: true) + end + + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_create_pp, catch_failures: true).exit_code).to be_zero + end + end + + schema_testing_drop_type_pp = <<-EOS + #{cassandra_install_pp} + + $cql_types = { + 'fullname' => { + 'keyspace' => 'mykeyspace', + 'ensure' => 'absent' + } + } + + if $run_schema_tests { + class { 'cassandra::schema': + cql_types => $cql_types, + cqlsh_host => $::ipaddress, + cqlsh_user => 'akers', + cqlsh_password => 'Niner2', + } + } + EOS + + describe '########### Schema drop type.' do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_type_pp, catch_failures: true) + end + + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_type_pp, catch_failures: true).exit_code).to be_zero + end + end + + schema_testing_drop_user_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_password => 'Niner2', + cqlsh_host => $::ipaddress, + cqlsh_user => 'akers', + cqlsh_client_config => '/root/.puppetcqlshrc', + users => { + 'boone' => { + ensure => absent, + }, + }, + } + } + EOS + + describe '########### Drop the boone user.' do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_user_pp, catch_failures: true) + end + + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_user_pp, catch_failures: true).exit_code).to be_zero + end + end + + schema_testing_drop_index_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_host => $::ipaddress, + cqlsh_user => 'akers', + cqlsh_password => 'Niner2', + indexes => { + 'users_lname_idx' => { + ensure => absent, + keyspace => 'mykeyspace', + table => 'users', + }, + }, + } + } + EOS + + describe '########### Schema drop index.' do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_index_pp, catch_failures: true) + end + + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_index_pp, catch_failures: true).exit_code).to be_zero + end + end + + schema_testing_drop_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_host => $ipaddress, + cqlsh_password => 'Niner2', + cqlsh_user => 'akers', + tables => { + 'users' => { + ensure => absent, + keyspace => 'mykeyspace', + }, + }, + } + } + EOS + + describe '########### Schema drop (table).' do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_pp, catch_failures: true) + end + + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_pp, catch_failures: true).exit_code).to be_zero + end + end + + schema_testing_drop_pp = <<-EOS + #{cassandra_install_pp} + + $keyspaces = { + 'mykeyspace' => { + ensure => absent, + } + } + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_host => $::ipaddress, + cqlsh_password => 'Niner2', + cqlsh_user => 'akers', + keyspaces => $keyspaces, + } + } + EOS + + describe '########### Schema drop (Keyspaces).' do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_pp, catch_failures: true) + end + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_pp, catch_failures: true).exit_code).to be_zero + end + end + + describe service('cassandra') do + it do + is_expected.to be_running + is_expected.to be_enabled + end + end + + describe service('datastax-agent') do + it do + is_expected.to be_running + is_expected.to be_enabled + end + end + + facts_testing_pp = <<-EOS + #{cassandra_install_pp} + + if $::cassandrarelease != $version { + fail("Test1: ${version} != ${::cassandrarelease}") + } + + $assembled_version = "${::cassandramajorversion}.${::cassandraminorversion}.${::cassandrapatchversion}" + + if $version != $assembled_version { + fail("Test2: ${version} != ${::assembled_version}") + } + EOS + + describe '########### Facts Tests.' do + it 'should work with no errors' do + apply_manifest(facts_testing_pp, catch_failures: true) + end + end + + describe '########### Gather service information (when in debug mode).' do + it 'Show the cassandra system log.' do + shell("grep -v -e '^INFO' -e '^\s*INFO' /var/log/cassandra/system.log") + end + end + + cassandra_uninstall_pp = <<-EOS + Exec { + path => [ + '/usr/local/bin', + '/opt/local/bin', + '/usr/bin', + '/usr/sbin', + '/bin', + '/sbin'], + logoutput => true, + } + + if $::osfamily == 'RedHat' { + $cassandra_optutils_package = 'cassandra22-tools' + $cassandra_package = 'cassandra22' + } else { + $cassandra_optutils_package = 'cassandra-tools' + $cassandra_package = 'cassandra' + } + + service { 'cassandra': + ensure => stopped, + } -> + package { $cassandra_optutils_package: + ensure => absent + } -> + package { $cassandra_package: + ensure => absent + } -> + exec { 'rm -rf /var/lib/cassandra/*/* /var/log/cassandra/*': } + EOS + + describe '########### Uninstall Cassandra 2.' do + it 'should work with no errors' do + apply_manifest(cassandra_uninstall_pp, catch_failures: true) + end + end +end diff --git a/spec/acceptance/cassandra3_spec.rb b/spec/acceptance/cassandra3_spec.rb new file mode 100644 index 0000000..4cde27c --- /dev/null +++ b/spec/acceptance/cassandra3_spec.rb @@ -0,0 +1,412 @@ +require 'spec_helper_acceptance' + +describe 'cassandra3' do + version = '3.0.9' + lsbdistid = fact('lsbdistid') + lsbmajdistrelease = fact('lsbmajdistrelease') + osdisplay = "#{lsbdistid}#{lsbmajdistrelease}" + + legacy_yml_dump = if (osdisplay == 'CentOS6') || (osdisplay == 'Ubuntu1204') + true + else + false + end + + cassandra_install_pp = <<-EOS + include cassandra::datastax_repo + include cassandra::java + + $run_schema_tests = hiera('cassandra::run_schema_tests', true) + $version = '#{version}' + + if $::osfamily == 'RedHat' { + $package_ensure = "${version}-1" + $cassandra_optutils_package = 'cassandra30-tools' + $cassandra_package = 'cassandra30' + } else { + $cassandra_optutils_package = 'cassandra-tools' + $cassandra_package = 'cassandra' + $package_ensure = $version + + if $::lsbdistid == 'Ubuntu' { + if $::operatingsystemmajrelease >= 16 { + # Workarounds for amonst other things CASSANDRA-11850 + Exec { + environment => [ 'CQLSH_NO_BUNDLED=TRUE' ] + } + } + } + + exec { '/bin/chown root:root /etc/apt/sources.list.d/datastax.list': + unless => '/usr/bin/test -O /etc/apt/sources.list.d/datastax.list', + require => Class['cassandra::datastax_agent'] + } + } + + $settings = { + 'authenticator' => 'PasswordAuthenticator', + 'cluster_name' => 'MyCassandraCluster', + 'commitlog_directory' => '/var/lib/cassandra/commitlog', + 'commitlog_sync' => 'periodic', + 'commitlog_sync_period_in_ms' => 10000, + 'data_file_directories' => ['/var/lib/cassandra/data'], + 'endpoint_snitch' => 'GossipingPropertyFileSnitch', + 'hints_directory' => '/var/lib/cassandra/hints', + 'listen_address' => $::ipaddress, + 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', + 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', + 'seed_provider' => [ + { + 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', + 'parameters' => [ + { + 'seeds' => $::ipaddress, + }, + ], + }, + ], + 'start_native_transport' => true, + } + + if versioncmp($::rubyversion, '1.9.0') < 0 { + $service_refresh = false + } else { + $service_refresh = true + } + + class { 'cassandra': + package_ensure => $package_ensure, + package_name => $cassandra_package, + service_refresh => $service_refresh, + settings => $settings, + require => Class['cassandra::datastax_repo', 'cassandra::java'] + } + + class { 'cassandra::optutils': + package_ensure => $package_ensure, + package_name => $cassandra_optutils_package, + require => Class['cassandra'] + } + + class { 'cassandra::datastax_agent': + require => Class['cassandra'] + } + + # This really sucks but Docker, CentOS 6 and iptables don't play nicely + # together. Therefore we can't test the firewall on this platform :-( + if $::operatingsystem != CentOS and $::operatingsystemmajrelease != 6 { + include '::cassandra::firewall_ports' + } + EOS + + describe "########### Cassandra #{version} installation on #{osdisplay}" do + it 'should work with no errors' do + apply_manifest(cassandra_install_pp, catch_failures: true) + end + + if legacy_yml_dump + it 'should work with no errors (subsequent run)' do + apply_manifest(cassandra_install_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(cassandra_install_pp, + catch_failures: true).exit_code).to be_zero + end + end + end + + schema_testing_create_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + $cql_types = { + 'fullname' => { + 'keyspace' => 'mykeyspace', + 'fields' => { + 'fname' => 'text', + 'lname' => 'text', + }, + }, + } + + $keyspaces = { + 'mykeyspace' => { + ensure => present, + replication_map => { + keyspace_class => 'SimpleStrategy', + replication_factor => 1, + }, + durable_writes => false, + }, + } + + class { 'cassandra::schema': + cql_types => $cql_types, + cqlsh_host => $::ipaddress, + cqlsh_password => 'cassandra', + cqlsh_user => 'cassandra', + indexes => { + 'users_lname_idx' => { + keyspace => 'mykeyspace', + table => 'users', + keys => 'lname', + }, + }, + keyspaces => $keyspaces, + tables => { + 'users' => { + 'keyspace' => 'mykeyspace', + 'columns' => { + 'userid' => 'int', + 'fname' => 'text', + 'lname' => 'text', + 'PRIMARY KEY' => '(userid)', + }, + }, + }, + users => { + 'spillman' => { + password => 'Niner27', + }, + 'akers' => { + password => 'Niner2', + superuser => true, + }, + 'boone' => { + password => 'Niner75', + }, + }, + } + } + EOS + + describe "########### Schema create #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(schema_testing_create_pp, catch_failures: true) + end + + if legacy_yml_dump + it 'should work with no errors (subsequent run)' do + apply_manifest(schema_testing_create_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_create_pp, catch_failures: true).exit_code).to be_zero + end + end + end + + schema_testing_drop_type_pp = <<-EOS + #{cassandra_install_pp} + + $cql_types = { + 'fullname' => { + 'keyspace' => 'mykeyspace', + 'ensure' => 'absent' + } + } + + if $run_schema_tests { + class { 'cassandra::schema': + cql_types => $cql_types, + cqlsh_host => $::ipaddress, + cqlsh_user => 'akers', + cqlsh_password => 'Niner2', + } + } + EOS + + describe "########### Schema drop type #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_type_pp, catch_failures: true) + end + + if legacy_yml_dump + it 'should work with no errors (subsequent run)' do + apply_manifest(schema_testing_drop_type_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_type_pp, catch_failures: true).exit_code).to be_zero + end + end + end + + schema_testing_drop_user_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_password => 'Niner2', + cqlsh_host => $::ipaddress, + cqlsh_user => 'akers', + cqlsh_client_config => '/root/.puppetcqlshrc', + users => { + 'boone' => { + ensure => absent, + }, + }, + } + } + EOS + + describe "########### Drop the boone user #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_user_pp, catch_failures: true) + end + + if legacy_yml_dump + it 'should work with no errors (subsequent run)' do + apply_manifest(schema_testing_drop_user_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_user_pp, catch_failures: true).exit_code).to be_zero + end + end + end + + schema_testing_drop_index_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_host => $::ipaddress, + cqlsh_user => 'akers', + cqlsh_password => 'Niner2', + indexes => { + 'users_lname_idx' => { + ensure => absent, + keyspace => 'mykeyspace', + table => 'users', + }, + }, + } + } + EOS + + describe "########### Schema drop index #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_index_pp, catch_failures: true) + end + + if legacy_yml_dump + it 'should run with no errors (subsequent run)' do + apply_manifest(schema_testing_drop_index_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_index_pp, catch_failures: true).exit_code).to be_zero + end + end + end + + schema_testing_drop_pp = <<-EOS + #{cassandra_install_pp} + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_host => $ipaddress, + cqlsh_password => 'Niner2', + cqlsh_user => 'akers', + tables => { + 'users' => { + ensure => absent, + keyspace => 'mykeyspace', + }, + }, + } + } + EOS + + describe "########### Schema drop (table) #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_pp, catch_failures: true) + end + + if legacy_yml_dump + it 'should work with no errors (subsequent run)' do + apply_manifest(schema_testing_drop_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_pp, catch_failures: true).exit_code).to be_zero + end + end + end + + schema_testing_drop_pp = <<-EOS + #{cassandra_install_pp} + + $keyspaces = { + 'mykeyspace' => { + ensure => absent, + } + } + + if $run_schema_tests { + class { 'cassandra::schema': + cqlsh_host => $::ipaddress, + cqlsh_password => 'Niner2', + cqlsh_user => 'akers', + keyspaces => $keyspaces, + } + } + EOS + + describe "########### Schema drop (Keyspaces) #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(schema_testing_drop_pp, catch_failures: true) + end + if legacy_yml_dump + it 'should work with no errors (subsequent run)' do + apply_manifest(schema_testing_drop_pp, catch_failures: true) + end + else + it 'check code is idempotent' do + expect(apply_manifest(schema_testing_drop_pp, catch_failures: true).exit_code).to be_zero + end + end + end + + describe service('cassandra') do + it do + is_expected.to be_running + is_expected.to be_enabled + end + end + + describe service('datastax-agent') do + it do + is_expected.to be_running + is_expected.to be_enabled + end + end + + facts_testing_pp = <<-EOS + #{cassandra_install_pp} + + if $::cassandrarelease != $version { + fail("Test1: ${version} != ${::cassandrarelease}") + } + + $assembled_version = "${::cassandramajorversion}.${::cassandraminorversion}.${::cassandrapatchversion}" + + if $version != $assembled_version { + fail("Test2: ${version} != ${::assembled_version}") + } + EOS + + describe "########### Facts Tests #{version} on #{osdisplay}." do + it 'should work with no errors' do + apply_manifest(facts_testing_pp, catch_failures: true) + end + end + + describe '########### Gather service information (when in debug mode).' do + it 'Show the cassandra system log.' do + shell("grep -v -e '^INFO' -e '^\s*INFO' /var/log/cassandra/system.log") + end + end +end diff --git a/spec/acceptance/cassandra_spec.rb b/spec/acceptance/cassandra_spec.rb deleted file mode 100644 index acf4a23..0000000 --- a/spec/acceptance/cassandra_spec.rb +++ /dev/null @@ -1,596 +0,0 @@ -require 'spec_helper_acceptance' - -describe 'cassandra::java' do - install_java_pp = <<-EOS - if $::osfamily == 'RedHat' { - include 'cassandra::java' - } else { - if $::lsbdistid == 'Ubuntu' { - class { 'cassandra::java': - aptkey => { - 'openjdk-r' => { - id => 'DA1A4A13543B466853BAF164EB9B1D8886F44E2A', - server => 'keyserver.ubuntu.com', - }, - }, - aptsource => { - 'openjdk-r' => { - location => 'http://ppa.launchpad.net/openjdk-r/ppa/ubuntu', - comment => 'OpenJDK builds (all archs)', - release => $::lsbdistcodename, - repos => 'main', - }, - }, - package_name => 'openjdk-8-jdk', - } - } else { - class { 'cassandra::java': - aptkey => { - 'ZuluJDK' => { - id => '27BC0C8CB3D81623F59BDADCB1998361219BD9C9', - server => 'keyserver.ubuntu.com', - }, - }, - aptsource => { - 'ZuluJDK' => { - location => 'http://repos.azulsystems.com/debian', - comment => 'Zulu OpenJDK 8 for Debian', - release => 'stable', - repos => 'main', - }, - }, - package_name => 'zulu-8', - } - } - } - EOS - - describe '########### Java installation.' do - it 'should work with no errors' do - apply_manifest(install_java_pp, catch_failures: true) - end - it 'check code is idempotent' do - expect(apply_manifest(install_java_pp, - catch_failures: true).exit_code).to be_zero - end - end -end - -describe 'cassandra::datastax_repo' do - install_datastax_repo_pp = <<-EOS - class { 'cassandra::datastax_repo': } - EOS - - describe '########### DataStax Repository installation.' do - it 'should work with no errors' do - apply_manifest(install_datastax_repo_pp, catch_failures: true) - end - it 'check code is idempotent' do - expect(apply_manifest(install_datastax_repo_pp, - catch_failures: true).exit_code).to be_zero - end - end -end - -describe 'cassandra' do - nodeset = ENV['BEAKER_set'] - opsys = nodeset.split('_')[1] - - # Ubuntu 16 only works with Cassandra 3.X - cassandra_version = if opsys == 'ubuntu16' - ['3.0.3'] - else - ['2.2.7', '3.0.3'] - end - - legacy_yml_dump = case opsys - when 'centos6' then true - when 'ubuntu12' then true - else false - end - - cassandra_version.each do |version| - cassandra_install_pp = <<-EOS - if $::osfamily == 'RedHat' { - $version = '#{version}-1' - - if $version == '2.2.7-1' { - $cassandra_optutils_package = 'cassandra22-tools' - $cassandra_package = 'cassandra22' - } else { - $cassandra_optutils_package = 'cassandra30-tools' - $cassandra_package = 'cassandra30' - } - } else { - $cassandra_optutils_package = 'cassandra-tools' - $cassandra_package = 'cassandra' - $version = '#{version}' - - if $::lsbdistid == 'Ubuntu' { - if $::operatingsystemmajrelease >= 16 { - # Workarounds for amonst other things CASSANDRA-11850 - Exec { - environment => [ 'CQLSH_NO_BUNDLED=TRUE' ] - } - - exec { '/usr/bin/wget http://launchpadlibrarian.net/109052632/python-support_1.0.15_all.deb': - cwd => '/var/tmp', - creates => '/var/tmp/python-support_1.0.15_all.deb', - } ~> - exec { '/usr/bin/dpkg -i /var/tmp/python-support_1.0.15_all.deb': - refreshonly => true, - } -> - package { 'cassandra-driver': - provider => 'pip', - before => Class['cassandra'] - } - } - } - - exec { '/bin/chown root:root /etc/apt/sources.list.d/datastax.list': - unless => '/usr/bin/test -O /etc/apt/sources.list.d/datastax.list', - require => Class['cassandra::datastax_agent'] - } - } - - $initial_settings = { - 'authenticator' => 'PasswordAuthenticator', - 'cluster_name' => 'MyCassandraCluster', - 'commitlog_directory' => '/var/lib/cassandra/commitlog', - 'commitlog_sync' => 'periodic', - 'commitlog_sync_period_in_ms' => 10000, - 'data_file_directories' => ['/var/lib/cassandra/data'], - 'endpoint_snitch' => 'GossipingPropertyFileSnitch', - 'listen_address' => $::ipaddress, - 'partitioner' => 'org.apache.cassandra.dht.Murmur3Partitioner', - 'saved_caches_directory' => '/var/lib/cassandra/saved_caches', - 'seed_provider' => [ - { - 'class_name' => 'org.apache.cassandra.locator.SimpleSeedProvider', - 'parameters' => [ - { - 'seeds' => $::ipaddress, - }, - ], - }, - ], - 'start_native_transport' => true, - } - - if $version =~ /^2/ { - $settings = $initial_settings - } else { - $settings = merge($initial_settings, { 'hints_directory' => '/var/lib/cassandra/hints' }) - } - - - if versioncmp($::rubyversion, '1.9.0') < 0 { - $service_refresh = false - } else { - $service_refresh = true - } - - class { 'cassandra': - cassandra_9822 => true, - dc => 'LON', - package_ensure => $version, - package_name => $cassandra_package, - rack => 'R101', - service_ensure => running, - service_refresh => $service_refresh, - settings => $settings, - } - - class { 'cassandra::optutils': - package_ensure => $version, - package_name => $cassandra_optutils_package, - require => Class['cassandra'] - } - - class { 'cassandra::datastax_agent': - require => Class['cassandra'] - } - - # This really sucks but Docker, CentOS 6 and iptables don't play nicely - # together. Therefore we can't test the firewall on this platform :-( - if $::operatingsystem != CentOS and $::operatingsystemmajrelease != 6 { - include '::cassandra::firewall_ports' - } - EOS - - describe "########### Cassandra #{version} installation (#{opsys})." do - it 'should work with no errors' do - apply_manifest(cassandra_install_pp, catch_failures: true) - end - - it 'Give Cassandra a minute to fully come alive.' do - sleep 60 - end - - if legacy_yml_dump - it 'should work with no errors (subsequent run)' do - apply_manifest(cassandra_install_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(cassandra_install_pp, - catch_failures: true).exit_code).to be_zero - end - end - end - - describe service('cassandra') do - it do - is_expected.to be_running - is_expected.to be_enabled - end - end - - describe service('datastax-agent') do - it do - is_expected.to be_running - is_expected.to be_enabled - end - end - - schema_testing_create_pp = <<-EOS - #{cassandra_install_pp} - - $cql_types = { - 'fullname' => { - 'keyspace' => 'mykeyspace', - 'fields' => { - 'fname' => 'text', - 'lname' => 'text', - }, - }, - } - - $keyspaces = { - 'mykeyspace' => { - ensure => present, - replication_map => { - keyspace_class => 'SimpleStrategy', - replication_factor => 1, - }, - durable_writes => false, - }, - } - - if $::operatingsystem != CentOS { - $os_ok = true - } else { - if $::operatingsystemmajrelease != 6 { - $os_ok = true - } else { - $os_ok = false - } - } - - if $os_ok { - class { 'cassandra::schema': - cql_types => $cql_types, - cqlsh_host => $::ipaddress, - cqlsh_password => 'cassandra', - cqlsh_user => 'cassandra', - indexes => { - 'users_lname_idx' => { - keyspace => 'mykeyspace', - table => 'users', - keys => 'lname', - }, - }, - keyspaces => $keyspaces, - tables => { - 'users' => { - 'keyspace' => 'mykeyspace', - 'columns' => { - 'userid' => 'int', - 'fname' => 'text', - 'lname' => 'text', - 'PRIMARY KEY' => '(userid)', - }, - }, - }, - users => { - 'spillman' => { - password => 'Niner27', - }, - 'akers' => { - password => 'Niner2', - superuser => true, - }, - 'boone' => { - password => 'Niner75', - }, - }, - } - } - EOS - - describe '########### Schema create.' do - it 'should work with no errors' do - apply_manifest(schema_testing_create_pp, catch_failures: true) - end - - if legacy_yml_dump - it 'should work with no errors (subsequent run)' do - apply_manifest(schema_testing_create_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(schema_testing_create_pp, catch_failures: true).exit_code).to be_zero - end - end - end - - schema_testing_drop_type_pp = <<-EOS - #{cassandra_install_pp} - - $cql_types = { - 'fullname' => { - 'keyspace' => 'mykeyspace', - 'ensure' => 'absent' - } - } - - if $::operatingsystem != CentOS { - $os_ok = true - } else { - if $::operatingsystemmajrelease != 6 { - $os_ok = true - } else { - $os_ok = false - } - } - - if $os_ok { - class { 'cassandra::schema': - cql_types => $cql_types, - cqlsh_host => $::ipaddress, - cqlsh_user => 'akers', - cqlsh_password => 'Niner2', - } - } - EOS - - describe '########### Schema drop type.' do - it 'should work with no errors' do - apply_manifest(schema_testing_drop_type_pp, catch_failures: true) - end - - if legacy_yml_dump - it 'should work with no errors (subsequent run)' do - apply_manifest(schema_testing_drop_type_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(schema_testing_drop_type_pp, catch_failures: true).exit_code).to be_zero - end - end - end - - schema_testing_drop_user_pp = <<-EOS - #{cassandra_install_pp} - - if $::operatingsystem != CentOS { - $os_ok = true - } else { - if $::operatingsystemmajrelease != 6 { - $os_ok = true - } else { - $os_ok = false - } - } - - if $os_ok { - class { 'cassandra::schema': - cqlsh_password => 'Niner2', - cqlsh_host => $::ipaddress, - cqlsh_user => 'akers', - cqlsh_client_config => '/root/.puppetcqlshrc', - users => { - 'boone' => { - ensure => absent, - }, - }, - } - } - EOS - - describe '########### Drop the boone user.' do - it 'should work with no errors' do - apply_manifest(schema_testing_drop_user_pp, catch_failures: true) - end - - if legacy_yml_dump - it 'should work with no errors (subsequent run)' do - apply_manifest(schema_testing_drop_user_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(schema_testing_drop_user_pp, catch_failures: true).exit_code).to be_zero - end - end - end - - schema_testing_drop_index_pp = <<-EOS - #{cassandra_install_pp} - - if $::operatingsystem != CentOS { - $os_ok = true - } else { - if $::operatingsystemmajrelease != 6 { - $os_ok = true - } else { - $os_ok = false - } - } - - if $os_ok { - class { 'cassandra::schema': - cqlsh_host => $::ipaddress, - cqlsh_user => 'akers', - cqlsh_password => 'Niner2', - indexes => { - 'users_lname_idx' => { - ensure => absent, - keyspace => 'mykeyspace', - table => 'users', - }, - }, - } - } - EOS - - describe '########### Schema drop index.' do - it 'should work with no errors' do - apply_manifest(schema_testing_drop_index_pp, catch_failures: true) - end - - if legacy_yml_dump - it 'should run with no errors (subsequent run)' do - apply_manifest(schema_testing_drop_index_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(schema_testing_drop_index_pp, catch_failures: true).exit_code).to be_zero - end - end - end - - schema_testing_drop_pp = <<-EOS - #{cassandra_install_pp} - - if $::operatingsystem != CentOS { - $os_ok = true - } else { - if $::operatingsystemmajrelease != 6 { - $os_ok = true - } else { - $os_ok = false - } - } - - if $os_ok { - class { 'cassandra::schema': - cqlsh_host => $ipaddress, - cqlsh_password => 'Niner2', - cqlsh_user => 'akers', - tables => { - 'users' => { - ensure => absent, - keyspace => 'mykeyspace', - }, - }, - } - } - EOS - - describe '########### Schema drop (table).' do - it 'should work with no errors' do - apply_manifest(schema_testing_drop_pp, catch_failures: true) - end - - if legacy_yml_dump - it 'should work with no errors (subsequent run)' do - apply_manifest(schema_testing_drop_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(schema_testing_drop_pp, catch_failures: true).exit_code).to be_zero - end - end - end - - schema_testing_drop_pp = <<-EOS - #{cassandra_install_pp} - - $keyspaces = { - 'mykeyspace' => { - ensure => absent, - } - } - - if $::operatingsystem != CentOS { - $os_ok = true - } else { - if $::operatingsystemmajrelease != 6 { - $os_ok = true - } else { - $os_ok = false - } - } - - if $os_ok { - class { 'cassandra::schema': - cqlsh_host => $::ipaddress, - cqlsh_password => 'Niner2', - cqlsh_user => 'akers', - keyspaces => $keyspaces, - } - } - EOS - - describe '########### Schema drop (Keyspaces).' do - it 'should work with no errors' do - apply_manifest(schema_testing_drop_pp, catch_failures: true) - end - if legacy_yml_dump - it 'should work with no errors (subsequent run)' do - apply_manifest(schema_testing_drop_pp, catch_failures: true) - end - else - it 'check code is idempotent' do - expect(apply_manifest(schema_testing_drop_pp, catch_failures: true).exit_code).to be_zero - end - end - end - - describe '########### Gather service information (when in debug mode).' do - it 'Show the cassandra system log.' do - shell("grep -v -e '^INFO' -e '^\s*INFO' /var/log/cassandra/system.log") - end - end - - next unless version != cassandra_version.last - - cassandra_uninstall_pp = <<-EOS - Exec { - path => [ - '/usr/local/bin', - '/opt/local/bin', - '/usr/bin', - '/usr/sbin', - '/bin', - '/sbin'], - logoutput => true, - } - - if $::osfamily == 'RedHat' { - $cassandra_optutils_package = 'cassandra22-tools' - $cassandra_package = 'cassandra22' - } else { - $cassandra_optutils_package = 'cassandra-tools' - $cassandra_package = 'cassandra' - } - - service { 'cassandra': - ensure => stopped, - } -> - package { $cassandra_optutils_package: - ensure => absent - } -> - package { $cassandra_package: - ensure => absent - } -> - exec { 'rm -rf /var/lib/cassandra/*/* /var/log/cassandra/*': } - EOS - - describe '########### Uninstall Cassandra 2.2.' do - it 'should work with no errors' do - apply_manifest(cassandra_uninstall_pp, catch_failures: true) - end - end - end -end diff --git a/spec/acceptance/hieradata/common.yaml b/spec/acceptance/hieradata/common.yaml new file mode 100644 index 0000000..5e8dccd --- /dev/null +++ b/spec/acceptance/hieradata/common.yaml @@ -0,0 +1,12 @@ +--- +############################################################################# +# common.yaml +# =========== +# +# A file for hiera data that is relevant to all test nodes. +############################################################################# + +cassandra::cassandra_9822: true +cassandra::dc: 'LON' +cassandra::rack: 'R101' +cassandra::service_ensure: running diff --git a/spec/acceptance/hieradata/operatingsystem/CentOS-6.yaml b/spec/acceptance/hieradata/operatingsystem/CentOS-6.yaml new file mode 100644 index 0000000..22b2013 --- /dev/null +++ b/spec/acceptance/hieradata/operatingsystem/CentOS-6.yaml @@ -0,0 +1,2 @@ +--- +cassandra::run_schema_tests: false diff --git a/spec/acceptance/hieradata/operatingsystem/Debian.yaml b/spec/acceptance/hieradata/operatingsystem/Debian.yaml new file mode 100644 index 0000000..49706f4 --- /dev/null +++ b/spec/acceptance/hieradata/operatingsystem/Debian.yaml @@ -0,0 +1,14 @@ +--- +cassandra::java::aptkey: + ZuluJDK: + id: '27BC0C8CB3D81623F59BDADCB1998361219BD9C9' + server: 'keyserver.ubuntu.com' + +cassandra::java::aptsource: + ZuluJDK: + location: 'http://repos.azulsystems.com/debian' + comment: 'Zulu OpenJDK 8 for Debian' + release: 'stable' + repos: 'main' + +cassandra::java::package_name: 'zulu-8' diff --git a/spec/acceptance/hieradata/operatingsystem/Ubuntu-12.04.yaml b/spec/acceptance/hieradata/operatingsystem/Ubuntu-12.04.yaml new file mode 100644 index 0000000..7cf65e7 --- /dev/null +++ b/spec/acceptance/hieradata/operatingsystem/Ubuntu-12.04.yaml @@ -0,0 +1,6 @@ +--- +cassandra::java::aptsource: + OpenJDK: + comment: 'OpenJDK builds (all archs)' + location: 'http://ppa.launchpad.net/openjdk-r/ppa/ubuntu' + release: 'precise' diff --git a/spec/acceptance/hieradata/operatingsystem/Ubuntu-14.04.yaml b/spec/acceptance/hieradata/operatingsystem/Ubuntu-14.04.yaml new file mode 100644 index 0000000..ea8e288 --- /dev/null +++ b/spec/acceptance/hieradata/operatingsystem/Ubuntu-14.04.yaml @@ -0,0 +1,6 @@ +--- +cassandra::java::aptsource: + OpenJDK: + comment: 'OpenJDK builds (all archs)' + location: 'http://ppa.launchpad.net/openjdk-r/ppa/ubuntu' + release: 'trusty' diff --git a/spec/acceptance/hieradata/operatingsystem/Ubuntu-16.04.yaml b/spec/acceptance/hieradata/operatingsystem/Ubuntu-16.04.yaml new file mode 100644 index 0000000..fe91128 --- /dev/null +++ b/spec/acceptance/hieradata/operatingsystem/Ubuntu-16.04.yaml @@ -0,0 +1,6 @@ +--- +cassandra::java::aptsource: + OpenJDK: + comment: 'OpenJDK builds (all archs)' + location: 'http://ppa.launchpad.net/openjdk-r/ppa/ubuntu' + release: 'xenial' diff --git a/spec/acceptance/hieradata/operatingsystem/Ubuntu.yaml b/spec/acceptance/hieradata/operatingsystem/Ubuntu.yaml new file mode 100644 index 0000000..912be1c --- /dev/null +++ b/spec/acceptance/hieradata/operatingsystem/Ubuntu.yaml @@ -0,0 +1,7 @@ +--- +cassandra::java::aptkey: + OpenJDK: + id: 'DA1A4A13543B466853BAF164EB9B1D8886F44E2A' + server: 'keyserver.ubuntu.com' + +cassandra::java::package_name: 'openjdk-8-jdk' diff --git a/spec/acceptance/nodesets/circle_debian7.yml b/spec/acceptance/nodesets/circle_debian7.yml deleted file mode 100644 index 8fb6a30..0000000 --- a/spec/acceptance/nodesets/circle_debian7.yml +++ /dev/null @@ -1,22 +0,0 @@ -HOSTS: -# debian8: -# roles: -# - master -# - debian8 -# platform: debian-8-amd64 -# image: debian:8 -# hypervisor: docker -# docker_image_commands: -# - 'apt-get install -y sudo ufw wget' -# docker_cmd: '["/sbin/init"]' - debian7: - roles: - - debian7 - platform: debian-7-amd64 - image: debian:7 - hypervisor: docker - docker_image_commands: - - 'apt-get install -y sudo ufw wget' -CONFIG: - type: foss - log_level: notice diff --git a/spec/acceptance/nodesets/aws_centos6.yml b/spec/acceptance/nodesets/docker/centos6.yml similarity index 100% rename from spec/acceptance/nodesets/aws_centos6.yml rename to spec/acceptance/nodesets/docker/centos6.yml diff --git a/spec/acceptance/nodesets/aws_centos7.yml b/spec/acceptance/nodesets/docker/centos7.yml similarity index 100% rename from spec/acceptance/nodesets/aws_centos7.yml rename to spec/acceptance/nodesets/docker/centos7.yml diff --git a/spec/acceptance/nodesets/aws_debian8.yml b/spec/acceptance/nodesets/docker/debian8.yml similarity index 100% rename from spec/acceptance/nodesets/aws_debian8.yml rename to spec/acceptance/nodesets/docker/debian8.yml diff --git a/spec/acceptance/nodesets/aws_ubuntu12.yml b/spec/acceptance/nodesets/docker/ubuntu1204.yml similarity index 100% rename from spec/acceptance/nodesets/aws_ubuntu12.yml rename to spec/acceptance/nodesets/docker/ubuntu1204.yml diff --git a/spec/acceptance/nodesets/aws_ubuntu14.yml b/spec/acceptance/nodesets/docker/ubuntu1404.yml similarity index 100% rename from spec/acceptance/nodesets/aws_ubuntu14.yml rename to spec/acceptance/nodesets/docker/ubuntu1404.yml diff --git a/spec/acceptance/nodesets/aws_ubuntu16.yml b/spec/acceptance/nodesets/docker/ubuntu1604.yml similarity index 100% rename from spec/acceptance/nodesets/aws_ubuntu16.yml rename to spec/acceptance/nodesets/docker/ubuntu1604.yml diff --git a/spec/acceptance/nodesets/docker_debian7.yml b/spec/acceptance/nodesets/docker_debian7.yml new file mode 100644 index 0000000..7cb7345 --- /dev/null +++ b/spec/acceptance/nodesets/docker_debian7.yml @@ -0,0 +1,13 @@ +--- +CONFIG: + log_level: notice + type: foss +HOSTS: + debian7: + docker_image_commands: + - "apt-get install -y sudo ufw wget" + hypervisor: docker + image: "debian:7" + platform: debian-7-amd64 + roles: + - debian7 diff --git a/spec/acceptance/nodesets/ec2_centos6.yml b/spec/acceptance/nodesets/ec2_centos6.yml new file mode 100644 index 0000000..62a3693 --- /dev/null +++ b/spec/acceptance/nodesets/ec2_centos6.yml @@ -0,0 +1,16 @@ +--- +CONFIG: + log_level: debug + type: foss +HOSTS: + centos6: + amisize: t2.medium + hypervisor: ec2 + platform: el-6-x86_64 + roles: + - master + snapshot: foss + subnet_id: subnet-ee97d498 + user: centos + vmname: centos6-x86-64-euwest1 + vpc_id: vpc-b6097ad2 diff --git a/spec/acceptance/nodesets/ec2_centos7.yml b/spec/acceptance/nodesets/ec2_centos7.yml new file mode 100644 index 0000000..faa8df2 --- /dev/null +++ b/spec/acceptance/nodesets/ec2_centos7.yml @@ -0,0 +1,16 @@ +--- +CONFIG: + log_level: debug + type: foss +HOSTS: + centos7: + amisize: t2.medium + hypervisor: ec2 + platform: el-7-x86_64 + roles: + - master + snapshot: foss + subnet_id: subnet-ee97d498 + user: centos + vmname: centos7-x86-64-euwest1 + vpc_id: vpc-b6097ad2 diff --git a/spec/acceptance/nodesets/ec2_debian8.yml b/spec/acceptance/nodesets/ec2_debian8.yml new file mode 100644 index 0000000..66503c8 --- /dev/null +++ b/spec/acceptance/nodesets/ec2_debian8.yml @@ -0,0 +1,16 @@ +--- +CONFIG: + log_level: debug + type: foss +HOSTS: + debian8: + amisize: t2.medium + hypervisor: ec2 + platform: debian-8-amd64 + roles: + - master + snapshot: foss + subnet_id: subnet-ee97d498 + user: admin + vmname: debian8-amd-euwest1 + vpc_id: vpc-b6097ad2 diff --git a/spec/acceptance/nodesets/ec2_ubuntu1204.yml b/spec/acceptance/nodesets/ec2_ubuntu1204.yml new file mode 100644 index 0000000..80f7fd8 --- /dev/null +++ b/spec/acceptance/nodesets/ec2_ubuntu1204.yml @@ -0,0 +1,16 @@ +--- +CONFIG: + log_level: debug + type: foss +HOSTS: + ubuntu1204: + amisize: m3.large + hypervisor: ec2 + platform: ubuntu-1204-amd64 + roles: + - master + snapshot: foss + subnet_id: subnet-ee97d498 + user: ubuntu + vmname: ubuntu1204-amd-euwest1 + vpc_id: vpc-b6097ad2 diff --git a/spec/acceptance/nodesets/ec2_ubuntu1404.yml b/spec/acceptance/nodesets/ec2_ubuntu1404.yml new file mode 100644 index 0000000..7d40158 --- /dev/null +++ b/spec/acceptance/nodesets/ec2_ubuntu1404.yml @@ -0,0 +1,16 @@ +--- +CONFIG: + log_level: debug + type: foss +HOSTS: + ubuntu1404: + amisize: m3.large + hypervisor: ec2 + platform: ubuntu-1404-amd64 + roles: + - master + snapshot: foss + subnet_id: subnet-ee97d498 + user: ubuntu + vmname: ubuntu1404-amd-euwest1 + vpc_id: vpc-b6097ad2 diff --git a/spec/acceptance/nodesets/ec2_ubuntu1604.yml b/spec/acceptance/nodesets/ec2_ubuntu1604.yml new file mode 100644 index 0000000..40f3cb2 --- /dev/null +++ b/spec/acceptance/nodesets/ec2_ubuntu1604.yml @@ -0,0 +1,16 @@ +--- +CONFIG: + log_level: debug + type: foss +HOSTS: + ubuntu1604: + amisize: t2.medium + hypervisor: ec2 + platform: ubuntu-1604-amd64 + roles: + - master + snapshot: foss + subnet_id: subnet-ee97d498 + user: ubuntu + vmname: ubuntu1604-amd-euwest1 + vpc_id: vpc-b6097ad2 diff --git a/spec/defines/private/deprecation_warning_spec.rb b/spec/defines/private/deprecation_warning_spec.rb deleted file mode 100644 index 8f4e784..0000000 --- a/spec/defines/private/deprecation_warning_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'spec_helper' - -describe '::cassandra::private::deprecation_warning' do - let(:pre_condition) do - [ - 'class stdlib () {}', - 'define ini_setting($ensure = nil, - $path, - $section, - $key_val_separator = nil, - $setting, - $value = nil) {}', - 'define file_line($line, $path, $match) {}' - ] - end - - context 'Test ::cassandra::private::deprecation_warning' do - let :facts do - { - osfamily: 'Debian' - } - end - - let(:title) { 'Deprecated feature' } - - let :params do - { - item_number: 42 - } - end - - it do - should compile - should contain_cassandra__private__deprecation_warning('Deprecated feature').with( - item_number: 42 - ) - end - end -end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index d5a3e74..d80d827 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -1,32 +1,42 @@ require 'beaker-rspec' require 'pry' +CASSANDRA2_UNSUPPORTED_PLATFORMS = ['16.04'].freeze + hosts.each do |host| - if host.name =~ /ubuntu.*1604/ + case host.name + when 'ubuntu1604' host.install_package('puppet') else install_puppet_on(host) end end RSpec.configure do |c| module_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - c.formatter = :documentation # Configure all nodes in nodeset c.before :suite do - # Install module + # Install modules puppet_module_install(source: module_root, module_name: 'cassandra') hosts.each do |host| on host, puppet('module', 'install', 'puppetlabs-apt'), acceptable_exit_codes: [0, 1] on host, puppet('module', 'install', 'puppetlabs-firewall'), acceptable_exit_codes: [0, 1] on host, puppet('module', 'install', 'puppetlabs-inifile'), acceptable_exit_codes: [0, 1] on host, puppet('module', 'install', 'puppetlabs-stdlib'), acceptable_exit_codes: [0, 1] + # Install hiera + write_hiera_config_on(host, + [ + 'operatingsystem/%{operatingsystem}-%{operatingsystemmajrelease}', + 'operatingsystem/%{operatingsystem}', + 'common' + ]) + copy_hiera_data_to(host, './spec/acceptance/hieradata/') end end end