181 lines
4.3 KiB
Puppet
181 lines
4.3 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.
|
|
#
|
|
# This is an example of site.pp to deploy OpenStack using puppet-openstack-cloud.
|
|
#
|
|
# It follow our reference archiecture where we have:
|
|
# - 2 load-balancers
|
|
# - 3 controllers
|
|
# - 2 network nodes
|
|
# - 3 swift storage nodes
|
|
# - 3 ceph storage nodes
|
|
# - 2 compute nodes
|
|
#
|
|
|
|
node common {
|
|
|
|
## Params
|
|
class {'os_params':}
|
|
class {'cloud':}
|
|
|
|
Exec {
|
|
path => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin'
|
|
}
|
|
|
|
}
|
|
|
|
# Controller nodes (x3)
|
|
# Our reference architecture suggest having at least 3 controllers
|
|
node controller1, controller2, controller3 inherits common {
|
|
|
|
## Database services
|
|
## We install here MySQL Galera for all OpenStack databases
|
|
## except for MongoDB where we use replicaset
|
|
class {'cloud::database::sql':}
|
|
class {'cloud::database::nosql':}
|
|
|
|
## Dashboard:
|
|
class {'cloud::dashboard':}
|
|
|
|
## Compute:
|
|
class {'cloud::compute::controller':}
|
|
|
|
## Volume:
|
|
class {'cloud::volume::controller':}
|
|
class {'cloud::volume::storage':}
|
|
|
|
## SPOF services
|
|
## Some OpenStack are single point of failure (SPOF), this class aims
|
|
## to manage them with Pacekamer/Corosync.
|
|
class {'cloud::spof':}
|
|
|
|
## Cache
|
|
class {'cloud::cache': }
|
|
|
|
## Image:
|
|
class {'cloud::image':}
|
|
|
|
## Telemetry
|
|
class {'cloud::telemetry::server':}
|
|
|
|
## Identity
|
|
class {'cloud::identity':}
|
|
|
|
## Object Storage
|
|
class {'cloud::object::controller': }
|
|
|
|
# Ring build must be activated only on one mgmt
|
|
# please see https://github.com/enovance/puppet-openstack-cloud/issues/29
|
|
if $::hostname == $os_params::mgmt_names[0] {
|
|
class {'cloud::object::ringbuilder':
|
|
rsyncd_ipaddress => $internal_netif_ip,
|
|
}
|
|
Class['cloud::object::ringbuilder'] -> Class['cloud::object::controller']
|
|
}
|
|
|
|
## Messaging
|
|
class {'cloud::messaging': }
|
|
|
|
## Networking
|
|
class {'cloud::network::controller': }
|
|
|
|
## Orchestration
|
|
class {'cloud::orchestration::api': }
|
|
|
|
## Ceph monitor
|
|
class { 'cloud::storage::rbd::monitor':
|
|
id => "${::uniqueid}_${::hostname}",
|
|
mon_addr => $os_params::internal_netif_ip
|
|
}
|
|
|
|
# Ceph admin key
|
|
if $::hostname == $os_params::mgmt_names[0] {
|
|
if !empty($::ceph_admin_key) {
|
|
@@ceph::key { 'admin':
|
|
secret => $::ceph_admin_key,
|
|
keyring_path => '/etc/ceph/keyring',
|
|
}
|
|
}
|
|
|
|
# Ceph pools (cinder/glance)
|
|
class { 'cloud::storage::rbd::pools':
|
|
setup_pools => true,
|
|
ceph_fsid => $::os_params::ceph_fsid,
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
# Load balancer node (x2)
|
|
node loadbalancer1 inherits common {
|
|
class {'cloud::loadbalancer':
|
|
keepalived_state => 'MASTER'
|
|
}
|
|
}
|
|
node loadbalancer2 inherits common {
|
|
class {'cloud::loadbalancer':
|
|
keepalived_state => 'BACKUP'
|
|
}
|
|
}
|
|
|
|
# Network nodes (x2)
|
|
# L2 integration providing several services: DHCP, L3 Agent, Metadata service, LBaaS, and VPNaaS
|
|
# We need at least two nodes for DHCP High availability
|
|
node network1, network2 inherits common {
|
|
|
|
## Networking
|
|
class {'cloud::network::dhcp': }
|
|
class {'cloud::network::metadata': }
|
|
class {'cloud::network::lbaas': }
|
|
class {'cloud::network::l3': }
|
|
class {'cloud::network::vpn':}
|
|
|
|
}
|
|
|
|
# Swift Storage nodes (x3)
|
|
node swiftstore1, swiftstore2, swiftstore3 inherits common{
|
|
|
|
## Telemetry
|
|
class {'cloud::telemetry':}
|
|
|
|
## Object Storage
|
|
class { 'cloud::object::storage':
|
|
swift_zone => $os_params::os_swift_zone[$::hostname],
|
|
}
|
|
|
|
}
|
|
|
|
# Compute nodes (x2)
|
|
node compute1, compute2 inherits common {
|
|
|
|
## Compute
|
|
class { 'cloud::compute::hypervisor':
|
|
has_ceph => $os_params::compute_has_ceph;
|
|
}
|
|
|
|
}
|
|
|
|
# Ceph Storage nodes (x3) (Ceph, mon + osd)
|
|
node cephstore1, cephstore2, cephstore3 inherits common {
|
|
|
|
## Ceph OSD
|
|
class { 'cloud::storage::rbd::osd':
|
|
public_address => $os_params::public_netif_ip,
|
|
cluster_address => $os_params::storage_netif_ip,
|
|
devices => $os_params::ceph_osd_devices,
|
|
}
|
|
|
|
}
|