
According to the OpenStack documentation conventions it should be OpenStack and not openstack or OpenStack. https://wiki.openstack.org/wiki/Documentation/Conventions#OpenStack.2C_not_Openstack_or_openstack Change-Id: I867b1a622cdfdb34e65a02336a8332ca78ff60f8
212 lines
6.4 KiB
Puppet
212 lines
6.4 KiB
Puppet
#
|
|
# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
|
|
#
|
|
# 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: cloud::dashboard
|
|
#
|
|
# Installs the OpenStack Dashboard (Horizon)
|
|
#
|
|
# === Parameters:
|
|
#
|
|
# [*ks_keystone_internal_host*]
|
|
# (optional) Internal address for endpoint.
|
|
# Defaults to '127.0.0.1'
|
|
#
|
|
# [*secret_key*]
|
|
# (optional) Secret key. This is used by Django to provide cryptographic
|
|
# signing, and should be set to a unique, unpredictable value.
|
|
# Defaults to 'secrete'
|
|
#
|
|
# [*horizon_port*]
|
|
# (optional) Port used to connect to OpenStack Dashboard
|
|
# Defaults to '80'
|
|
#
|
|
# [*horizon_ssl_port*]
|
|
# (optional) Port used to connect to OpenStack Dashboard using SSL
|
|
# Defaults to '443'
|
|
#
|
|
# [*api_eth*]
|
|
# (optional) Which interface we bind the Horizon server.
|
|
# Defaults to '127.0.0.1'
|
|
#
|
|
# [*servername*]
|
|
# (optional) DNS name used to connect to OpenStack Dashboard.
|
|
# Default value fqdn.
|
|
#
|
|
# [*listen_ssl*]
|
|
# (optional) Enable SSL on OpenStack Dashboard vhost
|
|
# It requires SSL files (keys and certificates)
|
|
# Defaults false
|
|
#
|
|
# [*keystone_proto*]
|
|
# (optional) Protocol (http or https) of keystone endpoint.
|
|
# Defaults to 'http'
|
|
#
|
|
# [*keystone_host*]
|
|
# (optional) IP / Host of keystone endpoint.
|
|
# Defaults '127.0.0.1'
|
|
#
|
|
# [*keystone_port*]
|
|
# (optional) TCP port of keystone endpoint.
|
|
# Defaults to '5000'
|
|
#
|
|
# [*debug*]
|
|
# (optional) Enable debug or not.
|
|
# Defaults to true
|
|
#
|
|
# [*horizon_cert*]
|
|
# (required with listen_ssl) Certificate to use for SSL support.
|
|
#
|
|
# [*horizon_key*]
|
|
# (required with listen_ssl) Private key to use for SSL support.
|
|
#
|
|
# [*horizon_ca*]
|
|
# (required with listen_ssl) CA certificate to use for SSL support.
|
|
#
|
|
# [*ssl_forward*]
|
|
# (optional) Forward HTTPS proto in the headers
|
|
# Useful when activating SSL binding on HAproxy and not in Horizon.
|
|
# Defaults to false
|
|
#
|
|
# [*os_endpoint_type*]
|
|
# (optional) endpoint type to use for the endpoints in the Keystone
|
|
# service catalog. Defaults to 'undef'.
|
|
#
|
|
# [*allowed_hosts*]
|
|
# (optional) List of hosts which will be set as value of ALLOWED_HOSTS
|
|
# parameter in settings_local.py. This is used by Django for
|
|
# security reasons. Can be set to * in environments where security is
|
|
# deemed unimportant.
|
|
# Defaults to ::fqdn.
|
|
#
|
|
# [*vhost_extra_params*]
|
|
# (optionnal) extra parameter to pass to the apache::vhost class
|
|
# Defaults to {}
|
|
#
|
|
# [*neutron_extra_options*]
|
|
# (optional) Enable optional services provided by neutron
|
|
# Useful when using cisco n1kv plugin, vpnaas or fwaas.
|
|
# Default to {}
|
|
#
|
|
# [*firewall_settings*]
|
|
# (optional) Allow to add custom parameters to firewall rules
|
|
# Should be an hash.
|
|
# Default to {}
|
|
#
|
|
class cloud::dashboard(
|
|
$ks_keystone_internal_host = '127.0.0.1',
|
|
$secret_key = 'secrete',
|
|
$horizon_port = 80,
|
|
$horizon_ssl_port = 443,
|
|
$servername = $::fqdn,
|
|
$api_eth = '127.0.0.1',
|
|
$keystone_host = '127.0.0.1',
|
|
$keystone_proto = 'http',
|
|
$keystone_port = 5000,
|
|
$debug = true,
|
|
$listen_ssl = false,
|
|
$horizon_cert = undef,
|
|
$horizon_key = undef,
|
|
$horizon_ca = undef,
|
|
$ssl_forward = false,
|
|
$os_endpoint_type = undef,
|
|
$allowed_hosts = $::fqdn,
|
|
$vhost_extra_params = {},
|
|
$neutron_extra_options = {},
|
|
$firewall_settings = {},
|
|
) {
|
|
|
|
# We build the param needed for horizon class
|
|
$keystone_url = "${keystone_proto}://${keystone_host}:${keystone_port}/v2.0"
|
|
|
|
# Apache2 specific configuration
|
|
if $ssl_forward {
|
|
$setenvif = ['X-Forwarded-Proto https HTTPS=1']
|
|
} else {
|
|
$setenvif = []
|
|
}
|
|
$extra_params = {
|
|
'add_listen' => true,
|
|
'setenvif' => $setenvif
|
|
}
|
|
$vhost_extra_params_real = merge ($extra_params, $vhost_extra_params)
|
|
|
|
$neutron_options = {
|
|
'enable_lb' => true
|
|
}
|
|
$neutron_options_real = merge ($neutron_options, $neutron_extra_options)
|
|
|
|
class { 'horizon':
|
|
secret_key => $secret_key,
|
|
servername => $servername,
|
|
bind_address => $api_eth,
|
|
keystone_url => $keystone_url,
|
|
cache_server_ip => false,
|
|
django_debug => $debug,
|
|
neutron_options => $neutron_options_real,
|
|
listen_ssl => $listen_ssl,
|
|
horizon_cert => $horizon_cert,
|
|
horizon_key => $horizon_key,
|
|
horizon_ca => $horizon_ca,
|
|
vhost_extra_params => $vhost_extra_params_real,
|
|
openstack_endpoint_type => $os_endpoint_type,
|
|
allowed_hosts => $allowed_hosts,
|
|
}
|
|
|
|
if ($::osfamily == 'Debian') {
|
|
# TODO(Goneri): HACK to ensure Horizon can cache its files
|
|
$horizon_var_dir = ['/var/lib/openstack-dashboard/static/js','/var/lib/openstack-dashboard/static/css']
|
|
file {$horizon_var_dir:
|
|
ensure => directory,
|
|
owner => 'horizon',
|
|
group => 'horizon',
|
|
}
|
|
}
|
|
|
|
if $::cloud::manage_firewall {
|
|
cloud::firewall::rule{ '100 allow horizon access':
|
|
port => $horizon_port,
|
|
extras => $firewall_settings,
|
|
}
|
|
}
|
|
|
|
@@haproxy::balancermember{"${::fqdn}-horizon":
|
|
listening_service => 'horizon_cluster',
|
|
server_names => $::hostname,
|
|
ipaddresses => $api_eth,
|
|
ports => $horizon_port,
|
|
options => "check inter 2000 rise 2 fall 5 cookie ${::hostname}"
|
|
}
|
|
|
|
if $listen_ssl {
|
|
|
|
if $::cloud::manage_firewall {
|
|
cloud::firewall::rule{ '100 allow horizon ssl access':
|
|
port => $horizon_ssl_port,
|
|
extras => $firewall_settings,
|
|
}
|
|
}
|
|
|
|
@@haproxy::balancermember{"${::fqdn}-horizon-ssl":
|
|
listening_service => 'horizon_ssl_cluster',
|
|
server_names => $::hostname,
|
|
ipaddresses => $api_eth,
|
|
ports => $horizon_ssl_port,
|
|
options => "check inter 2000 rise 2 fall 5 cookie ${::hostname}"
|
|
}
|
|
|
|
}
|
|
|
|
}
|