aboutsummaryrefslogtreecommitdiffstats
path: root/manifests/profile/base
diff options
context:
space:
mode:
Diffstat (limited to 'manifests/profile/base')
-rw-r--r--manifests/profile/base/database/mysql.pp85
-rw-r--r--manifests/profile/base/haproxy.pp52
-rw-r--r--manifests/profile/base/heat.pp10
-rw-r--r--manifests/profile/base/monitoring/fluentd.pp40
-rw-r--r--manifests/profile/base/nova.pp28
-rw-r--r--manifests/profile/base/nova/api.pp6
-rw-r--r--manifests/profile/base/nova/compute.pp3
-rw-r--r--manifests/profile/base/pacemaker.pp12
-rw-r--r--manifests/profile/base/swift/add_devices.pp59
-rw-r--r--manifests/profile/base/swift/ringbuilder.pp77
10 files changed, 352 insertions, 20 deletions
diff --git a/manifests/profile/base/database/mysql.pp b/manifests/profile/base/database/mysql.pp
new file mode 100644
index 0000000..27df6e4
--- /dev/null
+++ b/manifests/profile/base/database/mysql.pp
@@ -0,0 +1,85 @@
+# Copyright 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# == Class: tripleo::profile::base::database::mysql
+#
+# MySQL profile for tripleo
+#
+# === Parameters
+#
+# [*step*]
+# (Optional) The current step in deployment. See tripleo-heat-templates
+# for more details.
+# Defaults to hiera('step')
+#
+# [*mysql_server_options*]
+# (Optional) Extras options to deploy MySQL. Useful when deploying Galera cluster.
+# Should be an hash.
+# Defaults to {}
+#
+# [*manage_resources*]
+# (Optional) Whether or not manage root user, root my.cnf, and service.
+# Defaults to true
+#
+# [*remove_default_accounts*]
+# (Optional) Whether or not remove default MySQL accounts.
+# Defaults to true
+#
+class tripleo::profile::base::database::mysql (
+ $step = hiera('step'),
+ $mysql_server_options = {},
+ $manage_resources = true,
+ $remove_default_accounts = true,
+) {
+
+ validate_hash($mysql_server_options)
+
+ # non-ha scenario
+ if $manage_resources {
+ $mysql_step = 2
+ } else {
+ # ha scenario
+ $mysql_step = 1
+ }
+ if $step >= $mysql_step {
+ if str2bool(hiera('enable_galera', true)) {
+ $mysql_config_file = '/etc/my.cnf.d/galera.cnf'
+ } else {
+ $mysql_config_file = '/etc/my.cnf.d/server.cnf'
+ }
+ # TODO Galara
+ # FIXME: due to https://bugzilla.redhat.com/show_bug.cgi?id=1298671 we
+ # set bind-address to a hostname instead of an ip address; to move Mysql
+ # from internal_api on another network we'll have to customize both
+ # MysqlNetwork and ControllerHostnameResolveNetwork in ServiceNetMap
+ $mysql_server_default = {
+ 'mysqld' => {
+ 'bind-address' => $::hostname,
+ 'max_connections' => hiera('mysql_max_connections'),
+ 'open_files_limit' => '-1',
+ }
+ }
+ $mysql_server_options_real = deep_merge($mysql_server_default, $mysql_server_options)
+ class { '::mysql::server':
+ config_file => $mysql_config_file,
+ override_options => $mysql_server_options_real,
+ create_root_user => $manage_resources,
+ create_root_my_cnf => $manage_resources,
+ service_manage => $manage_resources,
+ service_enabled => $manage_resources,
+ remove_default_accounts => $remove_default_accounts,
+ }
+ }
+
+}
diff --git a/manifests/profile/base/haproxy.pp b/manifests/profile/base/haproxy.pp
index 31a5415..7951941 100644
--- a/manifests/profile/base/haproxy.pp
+++ b/manifests/profile/base/haproxy.pp
@@ -27,13 +27,61 @@
# (Optional) Whether or not loadbalancer is enabled.
# Defaults to hiera('enable_load_balancer', true).
#
+# [*generate_service_certificates*]
+# (Optional) Whether or not certmonger will generate certificates for
+# HAProxy. This could be as many as specified by the $certificates_specs
+# variable.
+# Note that this doesn't configure the certificates in haproxy, it merely
+# creates the certificates.
+# Defaults to hiera('generate_service_certificate', false).
+#
+# [*certmonger_ca*]
+# (Optional) The CA that certmonger will use to generate the certificates.
+# Defaults to hiera('certmonger_ca', 'local').
+#
+# [*certificates_specs*]
+# (Optional) The specifications to give to certmonger for the certificate(s)
+# it will create.
+# Example with hiera:
+# tripleo::profile::base::haproxy::certificates_specs:
+# undercloud-haproxy-public-cert:
+# service_pem: <haproxy ready pem file>
+# service_certificate: <service certificate path>
+# service_key: <service key path>
+# hostname: <undercloud fqdn>
+# postsave_cmd: <command to update certificate on resubmit>
+# principal: "haproxy/<undercloud fqdn>"
+# Defaults to {}.
+#
class tripleo::profile::base::haproxy (
- $enable_load_balancer = hiera('enable_load_balancer', true),
- $step = hiera('step'),
+ $enable_load_balancer = hiera('enable_load_balancer', true),
+ $step = hiera('step'),
+ $generate_service_certificates = hiera('generate_service_certificates', false),
+ $certmonger_ca = hiera('certmonger_ca', 'local'),
+ $certificates_specs = {},
) {
if $step >= 1 {
if $enable_load_balancer {
+ if str2bool($generate_service_certificates) {
+ include ::certmonger
+ # This is only needed for certmonger's local CA. For any other CA this
+ # operation (trusting the CA) should be done by the deployer.
+ if $certmonger_ca == 'local' {
+ class { '::tripleo::certmonger::ca::local':
+ notify => Class['::tripleo::haproxy']
+ }
+ }
+
+ Certmonger_certificate {
+ ca => $certmonger_ca,
+ ensure => 'present',
+ wait => true,
+ require => Class['::certmonger'],
+ }
+ create_resources('::tripleo::certmonger::haproxy', $certificates_specs)
+ }
+
include ::tripleo::haproxy
}
}
diff --git a/manifests/profile/base/heat.pp b/manifests/profile/base/heat.pp
index 0fc30d8..1311f20 100644
--- a/manifests/profile/base/heat.pp
+++ b/manifests/profile/base/heat.pp
@@ -42,6 +42,16 @@ class tripleo::profile::base::heat (
$manage_db_purge = hiera('heat_enable_db_purge', true),
) {
+ # Domain resources will be created at step5 on the pacemaker_master so we
+ # configure heat.conf at step3 and 4 but actually create the domain later.
+ if $step == 3 or $step == 4 {
+ class { '::heat::keystone::domain':
+ manage_domain => false,
+ manage_user => false,
+ manage_role => false,
+ }
+ }
+
if $step >= 4 {
class { '::heat' :
notification_driver => $notification_driver,
diff --git a/manifests/profile/base/monitoring/fluentd.pp b/manifests/profile/base/monitoring/fluentd.pp
new file mode 100644
index 0000000..1ea7d39
--- /dev/null
+++ b/manifests/profile/base/monitoring/fluentd.pp
@@ -0,0 +1,40 @@
+# Copyright 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# == Class: tripleo::profile::base::monitoring::fluentd
+#
+# FluentD configuration for TripleO
+#
+# === Parameters
+#
+# [*step*]
+# (Optional) String. The current step of the deployment
+# Defaults to hiera('step')
+#
+class tripleo::profile::base::monitoring::fluentd (
+ $step = hiera('step', undef)
+) {
+
+ if $step == undef or $step >= 3 {
+ include ::fluentd
+
+ ::fluentd::plugin { 'rubygem-fluent-plugin-add':
+ plugin_provider => 'yum',
+ }
+
+ ::fluentd::plugin { 'rubygem-fluent-plugin-elasticsearch':
+ plugin_provider => 'yum',
+ }
+ }
+}
diff --git a/manifests/profile/base/nova.pp b/manifests/profile/base/nova.pp
index 52a4c73..877184d 100644
--- a/manifests/profile/base/nova.pp
+++ b/manifests/profile/base/nova.pp
@@ -18,6 +18,10 @@
#
# === Parameters
#
+# [*bootstrap_node*]
+# (Optional) The hostname of the node responsible for bootstrapping tasks
+# Defaults to hiera('bootstrap_nodeid')
+#
# [*step*]
# (Optional) The current step of the deployment
# Defaults to hiera('step')
@@ -35,26 +39,32 @@
# Defaults to false
#
class tripleo::profile::base::nova (
+ $bootstrap_node = hiera('bootstrap_nodeid', undef),
$step = hiera('step'),
$manage_migration = false,
$libvirt_enabled = false,
$nova_compute_enabled = false,
) {
+ if $::hostname == downcase($bootstrap_node) {
+ $sync_db = true
+ } else {
+ $sync_db = false
+ }
if hiera('nova::use_ipv6', false) {
- $memcached_servers = suffix(hiera('memcache_node_ips_v6'), ':11211')
+ $memcache_servers = suffix(hiera('memcache_node_ips_v6'), ':11211')
} else {
- $memcached_servers = suffix(hiera('memcache_node_ips'), ':11211')
+ $memcache_servers = suffix(hiera('memcache_node_ips'), ':11211')
}
- if $step >= 3 {
+
+ if hiera('step') >= 4 or (hiera('step') >= 3 and $sync_db) {
include ::nova
- # TODO(emilien): once we merge https://review.openstack.org/#/c/325983/
- # let's override the value this way.
- warning('Overriding memcached_servers from puppet-tripleo until 325983 lands.')
- Nova {
- memcached_servers => $memcached_servers,
- }
include ::nova::config
+ class { '::nova::cache':
+ enabled => true,
+ backend => 'oslo_cache.memcache_pool',
+ memcache_servers => $memcache_servers,
+ }
}
if $step >= 4 {
diff --git a/manifests/profile/base/nova/api.pp b/manifests/profile/base/nova/api.pp
index 9c7d295..285e0b7 100644
--- a/manifests/profile/base/nova/api.pp
+++ b/manifests/profile/base/nova/api.pp
@@ -49,5 +49,11 @@ class tripleo::profile::base::nova::api (
}
include ::nova::network::neutron
}
+
+ if $step >= 5 {
+ if hiera('nova_enable_db_purge', true) {
+ include ::nova::cron::archive_deleted_rows
+ }
+ }
}
diff --git a/manifests/profile/base/nova/compute.pp b/manifests/profile/base/nova/compute.pp
index c734906..076996a 100644
--- a/manifests/profile/base/nova/compute.pp
+++ b/manifests/profile/base/nova/compute.pp
@@ -38,6 +38,9 @@ class tripleo::profile::base::nova::compute (
# deploy basic bits for nova-compute
include ::nova::compute
+ # If Service['nova-conductor'] is in catalog, make sure we start it
+ # before nova-compute.
+ Service<| title == 'nova-conductor' |> -> Service['nova-compute']
# deploy bits to connect nova compute to neutron
include ::nova::network::neutron
diff --git a/manifests/profile/base/pacemaker.pp b/manifests/profile/base/pacemaker.pp
index fc58891..de3de3c 100644
--- a/manifests/profile/base/pacemaker.pp
+++ b/manifests/profile/base/pacemaker.pp
@@ -38,9 +38,9 @@ class tripleo::profile::base::pacemaker (
$pacemaker_master = false
}
- $enable_fencing = str2bool(hiera('enable_fencing', false)) and hiera('step') >= 5
+ $enable_fencing = str2bool(hiera('enable_fencing', false)) and $step >= 5
- if hiera('step') >= 1 {
+ if $step >= 1 {
$pacemaker_cluster_members = downcase(regsubst(hiera('controller_node_names'), ',', ' ', 'G'))
$corosync_ipv6 = str2bool(hiera('corosync_ipv6', false))
if $corosync_ipv6 {
@@ -78,15 +78,9 @@ class tripleo::profile::base::pacemaker (
}
}
- if hiera('step') >= 2 {
+ if $step >= 2 {
if $pacemaker_master {
include ::pacemaker::resource_defaults
-
- # Create an openstack-core dummy resource. See RHBZ 1290121
- pacemaker::resource::ocf { 'openstack-core':
- ocf_agent_name => 'heartbeat:Dummy',
- clone_params => true,
- }
}
}
diff --git a/manifests/profile/base/swift/add_devices.pp b/manifests/profile/base/swift/add_devices.pp
new file mode 100644
index 0000000..f61f418
--- /dev/null
+++ b/manifests/profile/base/swift/add_devices.pp
@@ -0,0 +1,59 @@
+# Copyright 2015 Red Hat, Inc.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+# == Function: tripleo::profile::base::swift::add_devices
+#
+# Swift add_devices helper function
+#
+# === Parameters
+#
+# [*swift_zones*]
+# (Optional) The number of swift zones.
+
+define tripleo::profile::base::swift::add_devices(
+ $swift_zones = '1'
+){
+
+ # NOTE(dprince): Swift zones is not yet properly wired into the Heat
+ # templates. See: https://review.openstack.org/#/c/97758/3
+ # For now our regex supports the r1z1-192.0.2.6:%PORT%/d1 syntax or the
+ # newer r1z%<controller or SwiftStorage><N>%-192.0.2.6:%PORT%/d1 syntax.
+ $server_num_or_device = regsubst($name,'^r1z%+[A-Za-z]*([0-9]+)%+-(.*)$','\1')
+ if (is_integer($server_num_or_device)) {
+ $server_num = $server_num_or_device
+ } else {
+ $server_num = '1'
+ }
+ # Function to place server in its zone. Zone is calculated by
+ # server number in heat template modulo the number of zones + 1.
+ $zone = (($server_num%$swift_zones) + 1)
+
+ # add the rings
+ $base = regsubst($name,'^r1.*-(.*)$','\1')
+ $object = regsubst($base, '%PORT%', '6000')
+ ring_object_device { $object:
+ zone => '1',
+ weight => 100,
+ }
+ $container = regsubst($base, '%PORT%', '6001')
+ ring_container_device { $container:
+ zone => '1',
+ weight => 100,
+ }
+ $account = regsubst($base, '%PORT%', '6002')
+ ring_account_device { $account:
+ zone => '1',
+ weight => 100,
+ }
+}
diff --git a/manifests/profile/base/swift/ringbuilder.pp b/manifests/profile/base/swift/ringbuilder.pp
new file mode 100644
index 0000000..d94c6be
--- /dev/null
+++ b/manifests/profile/base/swift/ringbuilder.pp
@@ -0,0 +1,77 @@
+# Copyright 2015 Red Hat, Inc.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+# == Class: tripleo::profile::base::swift::ringbuilder
+#
+# Swift ringbuilder profile for tripleo
+#
+# === Parameters
+#
+# [*step*]
+# (Optional) The current step in deployment. See tripleo-heat-templates
+# for more details.
+# Defaults to hiera('step')
+# [*swift_zones*]
+# (Optional) The swift zones
+# Defaults to 1
+# [*devices*]
+# (Optional) The swift devices
+# Defaults to ''
+# [*build_ring*] = true,
+# (Optional) Whether to build the ring
+# Defaults to true
+# [*replicas*]
+# replicas
+
+class tripleo::profile::base::swift::ringbuilder (
+ $step = hiera('step'),
+ $swift_zones = '1',
+ $devices = '',
+ $build_ring = true,
+ $replicas,
+) {
+
+ if $step >= 2 {
+ # pre-install swift here so we can build rings
+ include ::swift
+ }
+
+ if $step >= 3 {
+ validate_bool($build_ring)
+
+ if $build_ring {
+
+ $device_array = strip(split(rstrip($devices), ','))
+
+ # create local rings
+ swift::ringbuilder::create{ ['object', 'account', 'container']:
+ replicas => min(count($device_array), $replicas),
+ } ->
+
+ # add all other devices
+ tripleo::profile::base::swift::add_devices {$device_array:
+ swift_zones => $swift_zones,
+ } ->
+
+ # rebalance
+ swift::ringbuilder::rebalance{ ['object', 'account', 'container']:
+ seed => 999,
+ }
+
+ Ring_object_device<| |> ~> Exec['rebalance_object']
+ Ring_object_device<| |> ~> Exec['rebalance_account']
+ Ring_object_device<| |> ~> Exec['rebalance_container']
+ }
+ }
+}