Documentation by YARD 0.9.5
+Alphabetic Index
+ +Puppet Class Listing A-Z
+ + +
+
+
+
|
+
Defined Type Listing A-Z
+ + +
+
+
+
|
+
File Listing
+-
+
+
+
- README + + +
diff --git a/.gitignore b/.gitignore index c023fa3..4be519e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,16 @@ .bundle/ .idea/ .project .travis/secrets.tar .vagrant/ .yardoc/ *.iml *.swn *.swo *.swp Gemfile.lock coverage/ -doc/ pkg/ spec/fixtures/ vendor/ log/ diff --git a/doc/_index.html b/doc/_index.html new file mode 100644 index 0000000..96a166e --- /dev/null +++ b/doc/_index.html @@ -0,0 +1,208 @@ + + +
+ + +
+
+
+
|
+
+
+
+
|
+
t |
+ + + +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'],
+ ],
+ }
+ }
+ }
+}
+ |
+
A class for installing the DataStax Agent and to point it at an OpsCenter +instance.
+ +
+ + + +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)
+ }
+}
+ |
+
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.
+ +
+ + + +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")
+ }
+ }
+}
+ |
+
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.
+ +
+ + + +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,
+ }
+ }
+}
+ |
+
A class to install Java and JNA packages.
+ +
+ + + +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,
+ }
+}
+ |
+
A class to install the optional Cassandra tools package.
+ +
+ + + +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'],
+ }
+}
+ |
+
This class is meant to be called from cassandra. It sets variables +according to platform
+ +$::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 = []
+ }
+ }
+}
+ |
+
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).
+ +
+ + + +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 <| |>
+}
+ |
+
A defined type for altering files relative to the configuration directory.
+ +
+ + + +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)
+ }
+}
+ |
+
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.
+ +
+ + + +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)) +}+ |
+
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.
+ +
+ + + +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,
+ }
+ }
+}
+ |
+
Create or drop user defined data types within the schema.
+ +
+ + + +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.")
+ }
+}
+ |
+
Create or drop indexes within the schema.
+ +
+ + + +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.")
+ }
+}
+ |
+
Create or drop keyspaces within the schema.
+ +
+ + + +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.")
+ }
+}
+ |
+
Create or drop tables within the schema.
+ +
+ + + +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.")
+ }
+}
+ |
+
Create or drop users. To use this class, a suitable
+authenticator
(e.g. PasswordAuthenticator) must be set in the
+Cassandra class.
+ + + +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.")
+ }
+}
+ |
+
Extract the major version from the cassandrarelease fact.
+Extract the minor version from the cassandrarelease fact.
+Extract the patch version from the cassandrarelease fact.
+Extract the release string from the running Cassandra instance.
+Extract the major version from the cassandrarelease fact.
+ + +
+ + + +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+ |
+
Extract the minor version from the cassandrarelease fact.
+ + +
+ + + +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+ |
+
Extract the patch version from the cassandrarelease fact.
+ + +
+ + + +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+ |
+
Extract the release string from the running Cassandra instance.
+ +undefined.
+ + +
+ + + +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+ |
+