Prepare Swift for using network-roles, instead of fixed networks

Modify some global constants as well.

blueprint: templates-for-networking
Change-Id: Ia2428b49a7192a2d7d56ffdc61a75de9ebc816c9
This commit is contained in:
Sergey Vasilenko 2015-07-07 16:39:01 +03:00
parent 8f1bc80b6c
commit 1d59cedfd6
20 changed files with 187 additions and 239 deletions

View File

@ -75,9 +75,10 @@ class openstack::ha::haproxy (
}
if $swift_proxies {
$swift_proxies_address_map = get_node_to_ipaddr_map_by_network_role($swift_proxies, 'swift/api')
class { 'openstack::ha::swift':
server_names => hiera_array('swift_server_names', filter_hash($swift_proxies, 'name')),
ipaddresses => hiera_array('swift_ipaddresses', filter_hash($swift_proxies, 'storage_address')),
server_names => hiera_array('swift_server_names', keys($swift_proxies_address_map)),
ipaddresses => hiera_array('swift_ipaddresses', values($swift_proxies_address_map)),
}
}

View File

@ -3,7 +3,8 @@ class openstack::swift::proxy (
$swift_user_password = 'swift_pass',
$swift_hash_suffix = 'swift_secret',
$swift_max_header_size = '32768',
$swift_local_net_ip = $::ipaddress_eth0,
$swift_proxy_local_ipaddr = $::ipaddress_eth0,
$swift_replication_local_ipaddr = $::ipaddress_eth0,
$ring_part_power = 18,
$ring_replicas = 3,
$ring_min_part_hours = 1,
@ -39,6 +40,7 @@ class openstack::swift::proxy (
$primary_proxy = false,
$swift_devices = undef,
$master_swift_proxy_ip = undef,
$master_swift_replication_ip = undef,
$collect_exported = false,
$rings = ['account', 'object', 'container'],
$debug = false,
@ -83,7 +85,7 @@ class openstack::swift::proxy (
}
class { '::swift::proxy':
proxy_local_net_ip => $swift_local_net_ip,
proxy_local_net_ip => $swift_proxy_local_ipaddr,
pipeline => $new_proxy_pipeline,
port => $proxy_port,
workers => $proxy_workers,
@ -156,7 +158,7 @@ class openstack::swift::proxy (
# sets up an rsync db that can be used to sync the ring DB
class { 'swift::ringserver':
local_net_ip => $swift_local_net_ip,
local_net_ip => $swift_replication_local_ipaddr,
}
# resource ordering
@ -166,22 +168,22 @@ class openstack::swift::proxy (
Ring_devices<||> ~>
Swift::Ringbuilder::Rebalance <||>
} else {
validate_string($master_swift_proxy_ip)
validate_string($master_swift_replication_ip)
if member($rings, 'account') and ! defined(Swift::Ringsync['account']) {
swift::ringsync { 'account': ring_server => $master_swift_proxy_ip }
swift::ringsync { 'account': ring_server => $master_swift_replication_ip }
}
if member($rings, 'object') and ! defined(Swift::Ringsync['object']) {
swift::ringsync { 'object': ring_server => $master_swift_proxy_ip }
swift::ringsync { 'object': ring_server => $master_swift_replication_ip }
}
if member($rings, 'container') and ! defined(Swift::Ringsync['container']) {
swift::ringsync { 'container': ring_server => $master_swift_proxy_ip }
swift::ringsync { 'container': ring_server => $master_swift_replication_ip }
}
rsync::get { "/etc/swift/backups/":
source => "rsync://${master_swift_proxy_ip}/swift_server/backups/",
source => "rsync://${master_swift_replication_ip}/swift_server/backups/",
recursive => true,
}

View File

@ -4,7 +4,7 @@
#
# === Parameters
#
# [*master_swift_proxy_ip*]
# [*master_swift_replication_ip*]
# (required) IP of swift proxy master
#
# [*primary_proxy*]
@ -21,7 +21,7 @@
#
class openstack::swift::rebalance_cronjob(
$master_swift_proxy_ip,
$master_swift_replication_ip,
$primary_proxy = false,
$rings = ['account', 'object', 'container'],
$ring_rebalance_period = 23,

View File

@ -14,6 +14,7 @@ class openstack::swift::storage_node (
$package_ensure = 'present',
$loopback_size = '1048756',
$master_swift_proxy_ip,
$master_swift_replication_ip,
$rings = [
'account',
'object',
@ -104,19 +105,19 @@ class openstack::swift::storage_node (
log_name => 'swift-account-server',
}
validate_string($master_swift_proxy_ip)
validate_string($master_swift_replication_ip)
if $sync_rings {
if member($rings, 'account') and !defined(Swift::Ringsync['account']) {
swift::ringsync { 'account': ring_server => $master_swift_proxy_ip }
swift::ringsync { 'account': ring_server => $master_swift_replication_ip }
}
if member($rings, 'object') and !defined(Swift::Ringsync['object']) {
swift::ringsync { 'object': ring_server => $master_swift_proxy_ip }
swift::ringsync { 'object': ring_server => $master_swift_replication_ip }
}
if member($rings, 'container') and !defined(Swift::Ringsync['container']) {
swift::ringsync { 'container': ring_server => $master_swift_proxy_ip }
swift::ringsync { 'container': ring_server => $master_swift_replication_ip }
}
Swift::Ringsync <| |> ~> Class["swift::storage::all"]
}

View File

@ -1,6 +1,6 @@
#!/bin/bash
<% @rings.each do |ring| -%>
rsync -q -a rsync://<%= @master_swift_proxy_ip %>/swift_server/<%= ring %>.ring.gz /etc/swift/<%= ring %>.ring.gz
rsync -q -a rsync://<%= @master_swift_replication_ip %>/swift_server/<%= ring %>.ring.gz /etc/swift/<%= ring %>.ring.gz
<% end -%>

View File

@ -1,8 +1,8 @@
module Puppet::Parser::Functions
newfunction(:calc_ring_part_power, :type => :rvalue) do |args|
resize_value = args[1]
nodes = args[0].is_a?(Array) ? args[0] : [ args[0] ]
dev_number = nodes.inject(0) do |num,node|
nodes = args[0].values()
dev_number = nodes.inject(0) do |num,node|
if node['mountpoints']
add = node['mountpoints'].split('\n')[0].split.length
num += add
@ -10,7 +10,7 @@ module Puppet::Parser::Functions
num += 2
end
num
end
ring_power = (Math.log(dev_number * 100)/Math.log(2)).to_int+args[1].to_i
end
ring_power = (Math.log(dev_number * 100)/Math.log(2)).to_int+args[1].to_i
end
end

View File

@ -11,8 +11,9 @@ EOS
raise(Puppet::ParseError, "#{errmsg}: 1st argument should be a valid network_metadata hash") if !n_metadata.has_key?('nodes')
raise(Puppet::ParseError, "#{errmsg}: 2nd argument should be an list of node roles") if !roles.is_a?(Array)
nodes = n_metadata['nodes']
nodes.reject do |node_name|
(roles & nodes[node_name]['node_roles']).empty?
# Using unrequired node_property bellow -- is a workaround for ruby 1.8
nodes.reject do |node_name, node_property|
(roles & node_property['node_roles']).empty?
end
end
end

View File

@ -7,17 +7,13 @@ Puppet::Type.newtype(:ring_devices) do
desc 'list of all swift storages'
validate do |value|
if value.is_a? Hash
fail(Puppet::Error, "#{value} should be a Hash and include ip address") unless value['storage_address']
else
value.each do |element|
fail(Puppet::Error, "#{element} should be a Hash and include ip address") unless element.is_a?(Hash) && element['storage_address']
end
if ! value.is_a? Hash
fail(Puppet::Error, "#{value} should be a Hash of nodes with network roles to IP address mapping")
end
end
munge do |value|
value.is_a?(Hash) ? [value] : value
value.values.each {|h| h['storage_address']=h['network_roles']['swift/replication'].gsub(/\/\d+$/,''); h.delete('network_roles')}
end
end

View File

@ -1,80 +0,0 @@
define setup_main_interfaces (
$interface = $name,
$network_settings
) {
# Detect main interfaces, except bondXXX/brXXX/vlanXXX, XXX - pos int numbers with 0
if $interface =~ /^(?!bond|br|vlan)\w+\d+$/ {
if ! defined(L23network::L3::Ifconfig[$interface]) {
$ipaddr = $network_settings[$interface]['ipaddr']
$gateway = $network_settings[$interface]['gateway']
$default_gateway = $network_settings[$interface]['default_gateway']
# TODO implement bond slaves options support
#$bond_master = $network_settings[$interface]['bond_master']
notify{"${interface} => ${ipaddr}, ${gateway}":} ->
l23network::l3::ifconfig{$interface:
ipaddr => $ipaddr,
gateway => $gateway,
default_gateway => $default_gateway,
#bond_master => $bond_master,
check_by_ping => 'none'
}
}
}
}
define setup_bond_interfaces (
$interface = $name,
$network_settings
) {
# Detect main bond interfaces, allow bondXXX (alphanum only, XXX - pos int numbers with 0)
if $interface =~ /^bond\d+$/ {
if ! defined(L23network::L3::Ifconfig[$interface]) {
# TODO implement bond options support
#$bond_mode = $network_settings[$interface]['bond_mode']
#$bond_miimon = $network_settings[$interface]['bond_miimon']
#$bond_lacp_rate = $network_settings[$interface]['bond_lacp_rate']
notify{"Stub for bond interface ${interface}":} #->
#l23network::l3::ifconfig{$interface:
#ipaddr => $ipaddr,
#gateway => $gateway,
#bond_mode => $bond_mode,
#bond_miimon => $bond_miimon,
#bond_lacp_rate => $bond_lacp_rate,
#check_by_ping => 'none'
#}
}
}
}
define setup_sub_interfaces (
$interface = $name,
$network_settings
) {
# Detect sub interfaces, allow vlanXXX, anythingXXX.YYY (alphanum only, XXX&YYY - pos int numbers with 0)
if $interface =~ /(^(\w+\d+)(\.)(\d+)$)|(^vlan\d+$)/ {
if ! defined(L23network::L3::Ifconfig[$interface]) {
$ipaddr = $network_settings[$interface]['ipaddr']
$gateway = $network_settings[$interface]['gateway']
$default_gateway = $network_settings[$interface]['default_gateway']
# TODO implement bond slaves options support
#$bond_master = $network_settings[$interface]['bond_master']
notify{"${interface} => ${ipaddr}, ${gateway}":} ->
l23network::l3::ifconfig{$interface:
ipaddr => $ipaddr,
gateway => $gateway,
default_gateway => $default_gateway,
#bond_master => $bond_master,
check_by_ping => 'none'
}
}
}
}
class osnailyfacter::network_setup (
$interfaces = keys($::fuel_settings['network_data']),
$network_settings = $::fuel_settings['network_data'],
) {
setup_bond_interfaces{$interfaces: network_settings=>$network_settings} ->
setup_main_interfaces{$interfaces: network_settings=>$network_settings} ->
setup_sub_interfaces{$interfaces: network_settings=>$network_settings}
}

View File

@ -31,7 +31,7 @@ $swift_hash = hiera('swift', {})
$cinder_hash = hiera('cinder', {})
$ceilometer_hash = hiera('ceilometer',{})
$access_hash = hiera('access', {})
$network_scheme = hiera('network_scheme', {})
$network_scheme = hiera_hash('network_scheme')
$controllers = hiera('controllers')
$neutron_mellanox = hiera('neutron_mellanox', false)
$syslog_hash = hiera('syslog', {})
@ -68,8 +68,8 @@ $primary_mon = $controllers[0]['name']
if ($use_neutron) {
prepare_network_config($network_scheme)
$ceph_cluster_network = get_network_role_property('storage', 'cidr')
$ceph_public_network = get_network_role_property('management', 'cidr')
$ceph_cluster_network = get_network_role_property('ceph/replication', 'network')
$ceph_public_network = get_network_role_property('ceph/public', 'network')
} else {
$ceph_cluster_network = hiera('storage_network_range')
$ceph_public_network = hiera('management_network_range')

View File

@ -42,9 +42,9 @@ if $use_ceph {
$primary_mon = $controllers[0]['name']
if ($use_neutron) {
prepare_network_config(hiera('network_scheme', {}))
$ceph_cluster_network = get_network_role_property('storage', 'cidr')
$ceph_public_network = get_network_role_property('management', 'cidr')
prepare_network_config(hiera_hash('network_scheme'))
$ceph_cluster_network = get_network_role_property('ceph/replication', 'network')
$ceph_public_network = get_network_role_property('ceph/public', 'network')
} else {
$ceph_cluster_network = hiera('storage_network_range')
$ceph_public_network = hiera('management_network_range')

View File

@ -34,9 +34,9 @@ if $use_ceph {
$primary_mon = $controllers[0]['name']
if ($use_neutron) {
prepare_network_config(hiera('network_scheme', {}))
$ceph_cluster_network = get_network_role_property('storage', 'cidr')
$ceph_public_network = get_network_role_property('management', 'cidr')
prepare_network_config(hiera_hash('network_scheme'))
$ceph_cluster_network = get_network_role_property('ceph/replication', 'network')
$ceph_public_network = get_network_role_property('ceph/public', 'network')
} else {
$ceph_cluster_network = hiera('storage_network_range')
$ceph_public_network = hiera('management_network_range')

View File

@ -22,9 +22,9 @@ if $use_ceph and $storage_hash['objects_ceph'] {
$primary_mon = $controllers[0]['name']
if ($use_neutron) {
prepare_network_config(hiera('network_scheme', {}))
$ceph_cluster_network = get_network_role_property('storage', 'cidr')
$ceph_public_network = get_network_role_property('management', 'cidr')
prepare_network_config(hiera_hash('network_scheme'))
$ceph_cluster_network = get_network_role_property('ceph/replication', 'network')
$ceph_public_network = get_network_role_property('ceph/public', 'network')
} else {
$ceph_cluster_network = hiera('storage_network_range')
$ceph_public_network = hiera('management_network_range')

View File

@ -17,6 +17,8 @@ firewall {'004 remote puppet ':
require => Class['openstack::firewall'],
}
prepare_network_config(hiera_hash('network_scheme'))
class { 'openstack::firewall' :
nova_vnc_ip_range => hiera('management_network_range'),
nova_vnc_ip_range => get_network_role_property('mgmt/vip', 'network'),
}

View File

@ -1,15 +1,25 @@
notice('MODULAR: globals.pp')
#FIXME(bogdando) make all evaluations/hardcode to come from a hiera
# For example, assume it is already calculated and use just:
# $roles=hiera('roles')
# instead of:
# $roles = node_roles($nodes_hash, hiera('uid'))
$fuel_settings = parseyaml($astute_settings_yaml)
$network_scheme = hiera_hash('network_scheme', {})
if empty($network_scheme) {
fail("Network_scheme not given in the astute.yaml")
}
$network_metadata = hiera_hash('network_metadata', {})
if empty($network_metadata) {
fail("Network_metadata not given in the astute.yaml")
}
$nodes_hash = hiera('nodes', {})
$node_name = regsubst(hiera('fqdn', $::hostname), '\..*$', '')
$node = $network_metadata['nodes'][$node_name]
if empty($node) {
fail("Node hostname is not defined in the astute.yaml")
}
prepare_network_config($network_scheme)
$nodes_hash = hiera('nodes', {}) #todo(sv): remove using NODES list!
$deployment_mode = hiera('deployment_mode', 'ha_compact')
$roles = hiera('roles', node_roles($nodes_hash, hiera('uid')))
$roles = $node['node_roles']
$storage_hash = hiera('storage', {})
$syslog_hash = hiera('syslog', {})
$base_syslog_hash = hiera('base_syslog', {})
@ -33,13 +43,10 @@ $cinder_nodes_array = hiera('cinder_nodes', [])
$dns_nameservers = hiera('dns_nameservers', [])
$use_ceilometer = $ceilometer_hash['enabled']
$use_neutron = hiera('quantum', false)
$network_scheme = hiera('network_scheme', {})
$verbose = true
$debug = hiera('debug', false)
$use_monit = false
$master_ip = hiera('master_ip')
$management_network_range = hiera('management_network_range')
$use_syslog = hiera('use_syslog', true)
$syslog_log_facility_glance = hiera('syslog_log_facility_glance', 'LOG_LOCAL2')
$syslog_log_facility_cinder = hiera('syslog_log_facility_cinder', 'LOG_LOCAL3')
@ -87,13 +94,8 @@ $cinder_rate_limits = hiera('cinder_rate_limits',
}
)
$node = hiera('node', filter_nodes($nodes_hash, 'name', $::hostname))
if empty($node) {
fail("Node hostname is not defined in the hash structure")
}
$default_gateway = hiera('default_gateway', $node[0]['default_gateway'])
$default_gateway = get_default_gateways()
prepare_network_config($network_scheme)
$internal_int = get_network_role_property('management', 'interface')
$public_int = get_network_role_property('ex', 'interface')
$internal_address = get_network_role_property('management', 'ipaddr')
@ -102,6 +104,9 @@ $public_address = get_network_role_property('ex', 'ipaddr')
$public_netmask = get_network_role_property('ex', 'netmask')
$storage_address = get_network_role_property('storage', 'ipaddr')
$storage_netmask = get_network_role_property('storage', 'netmask')
$public_vip = $network_metadata['vips']['public_vip']
$management_vip = $network_metadata['vips']['management_vip']
$database_vip = pick($network_metadata['vips']['database'], $management_vip)
if $use_neutron {
$novanetwork_params = {}
@ -111,6 +116,7 @@ if $use_neutron {
$neutron_user_password = $neutron_config['keystone']['admin_password']
$neutron_metadata_proxy_secret = $neutron_config['metadata']['metadata_proxy_shared_secret']
$base_mac = $neutron_config['L2']['base_mac']
$management_network_range = get_network_role_property('mgmt/vip', 'network')
} else {
$neutron_config = {}
$novanetwork_params = hiera('novanetwork_parameters')
@ -126,49 +132,35 @@ if $use_neutron {
'vlan_start' => $vlan_start,
}
}
$network_manager = "nova.network.manager.${novanetwork_params['network_manager']}"
$network_manager = "nova.network.manager.${novanetwork_params['network_manager']}"
$management_network_range = hiera('management_network_range')
}
if $deployment_mode == 'ha_compact' {
$primary_controller = $node_role ? { 'primary-controller' => true, default =>false }
$primary_controller_nodes = filter_nodes($nodes_hash,'role','primary-controller')
$controllers = concat($primary_controller_nodes,
filter_nodes($nodes_hash,'role','controller')
)
$controller_internal_addresses = nodes_to_hash($controllers,'name','internal_address')
$controller_public_addresses = nodes_to_hash($controllers,'name','public_address')
$controller_storage_addresses = nodes_to_hash($controllers,'name','storage_address')
$controller_hostnames = keys($controller_internal_addresses)
$controller_nodes = ipsort(values($controller_internal_addresses))
$controller_node_public = hiera('public_vip')
$controller_node_address = hiera('management_vip')
$mountpoints = filter_hash($mp_hash,'point')
} else {
# simple multinode
$controller = filter_nodes($nodes_hash, 'role', 'controller')
$controller_node_address = $controller[0]['internal_address']
$controller_node_public = $controller[0]['public_address']
}
$primary_controller = $node_role ? { 'primary-controller' => true, default =>false }
$primary_controller_nodes = filter_nodes($nodes_hash,'role','primary-controller')
$controllers = concat($primary_controller_nodes,
filter_nodes($nodes_hash,'role','controller')
)
$controller_internal_addresses = nodes_to_hash($controllers,'name','internal_address')
$controller_public_addresses = nodes_to_hash($controllers,'name','public_address')
$controller_storage_addresses = nodes_to_hash($controllers,'name','storage_address')
$controller_hostnames = keys($controller_internal_addresses)
$controller_nodes = ipsort(values($controller_internal_addresses))
$controller_node_public = $public_vip
$controller_node_address = $management_vip
$mountpoints = filter_hash($mp_hash,'point')
# AMQP configuration
$queue_provider = hiera('queue_provider','rabbitmq')
if !$rabbit_hash['user'] {
$rabbit_hash['user'] = 'nova'
$rabbit_hash['user'] = 'nova'
}
if $deployment_mode == 'ha_compact' {
$amqp_port = '5673'
$amqp_hosts = amqp_hosts($controller_nodes, $amqp_port, $internal_address)
$rabbit_ha_queues = true
$rabbitmq_cluster_nodes = $controller_hostnames
} else {
# simple multinode (deprecated)
$amqp_port = '5672'
$amqp_hosts = amqp_hosts($controller_node_address, $amqp_port)
$rabbitmq_cluster_nodes = [ $controller[0]['name'] ]
$rabbit_ha_queues = false
}
$amqp_port = '5673'
$amqp_hosts = amqp_hosts($controller_nodes, $amqp_port, $internal_address)
$rabbit_ha_queues = true
$rabbitmq_cluster_nodes = $controller_hostnames
# MySQL and SQLAlchemy backend configuration
$custom_mysql_setup_class = hiera('custom_mysql_setup_class', 'galera')
@ -177,8 +169,8 @@ $max_overflow = hiera('max_overflow', min($::processorcount * 5 + 0,
$max_retries = hiera('max_retries', '-1')
$idle_timeout = hiera('idle_timeout','3600')
$nova_db_password = $nova_hash['db_password']
$cinder_iscsi_bind_addr = $storage_address
$sql_connection = "mysql://nova:${nova_db_password}@${controller_node_address}/nova?read_timeout = 6 0"
$cinder_iscsi_bind_addr = get_network_role_property('cinder/iscsi', 'ipaddr')
$sql_connection = "mysql://nova:${nova_db_password}@${database_vip}/nova?read_timeout = 6 0"
$mirror_type = hiera('mirror_type', 'external')
$multi_host = hiera('multi_host', true)
@ -205,6 +197,18 @@ if ($storage_hash['images_ceph']) {
$glance_known_stores = false
}
# Define memcached-related variables:
# todo(sv): change to 'memcache' as soon as this node role was ready
$memcache_servers = values(get_node_to_ipaddr_map_by_network_role(get_nodes_hash_by_roles($network_metadata, ['primary-controller', 'controller']), 'mgmt/memcache'))
# Define swift-related variables
# todo(sv): use special node-roles instead controllers in the future
$swift_master_role = 'primary-controller'
$swift_nodes = get_nodes_hash_by_roles($network_metadata, ['primary-controller', 'controller'])
$swift_proxies = get_nodes_hash_by_roles($network_metadata, ['primary-controller', 'controller'])
$swift_proxy_caches = get_nodes_hash_by_roles($network_metadata, ['primary-controller', 'controller']) # memcache for swift
$is_primary_swift_proxy = $primary_controller
# save all these global variables into hiera yaml file for later use
# by other manifests with hiera function
file { '/etc/hiera/globals.yaml' :

View File

@ -15,7 +15,7 @@ if !($storage_hash['images_ceph'] and $storage_hash['objects_ceph']) and !$stora
}
if ($use_swift) {
$swift_proxies = hiera('swift_proxies', $haproxy_nodes)
$swift_proxies = hiera_hash('swift_proxies', undef)
} elsif ($storage_hash['objects_ceph']) {
$rgw_servers = hiera('rgw_servers', $controllers)
}

View File

@ -30,7 +30,7 @@ $keystone_hash = hiera('keystone', {})
$cinder_hash = hiera_hash('cinder', {})
$ceilometer_hash = hiera('ceilometer',{})
$access_hash = hiera('access', {})
$network_scheme = hiera('network_scheme', {})
$network_scheme = hiera_hash('network_scheme')
$controllers = hiera('controllers')
$neutron_mellanox = hiera('neutron_mellanox', false)
$syslog_hash = hiera('syslog', {})
@ -93,9 +93,9 @@ class { 'l23network' :
}
if $use_neutron {
$neutron_config = hiera('quantum_settings')
$neutron_config = hiera('quantum_settings')
} else {
$neutron_config = {}
$neutron_config = {}
}
if !$ceilometer_hash {
@ -295,9 +295,9 @@ if ($use_ceph and !$storage_hash['volumes_lvm']) {
$primary_mon = $controllers[0]['name']
if ($use_neutron) {
prepare_network_config($network_scheme)
$ceph_cluster_network = get_network_role_property('storage', 'cidr')
$ceph_public_network = get_network_role_property('management', 'cidr')
prepare_network_config(hiera_hash('network_scheme'))
$ceph_cluster_network = get_network_role_property('ceph/replication', 'network')
$ceph_public_network = get_network_role_property('ceph/public', 'network')
} else {
$ceph_cluster_network = hiera('storage_network_range')
$ceph_public_network = hiera('management_network_range')

View File

@ -1,18 +1,24 @@
notice('MODULAR: swift/rebalance_cronjob.pp')
$network_metadata = hiera_hash('network_metadata')
# $network_scheme = hiera_hash('network_scheme')
# prepare_network_config($network_scheme)
$storage_hash = hiera('storage_hash')
$swift_master_role = hiera('swift_master_role', 'primary-controller')
$ring_min_part_hours = hiera('swift_ring_min_part_hours', 1)
# Use Swift if it isn't replaced by vCenter, Ceph for BOTH images and objects
if !($storage_hash['images_ceph'] and $storage_hash['objects_ceph']) and !$storage_hash['images_vcenter'] {
$master_swift_proxy_nodes = filter_nodes(hiera('nodes_hash'),'role',$swift_master_role)
$master_swift_proxy_ip = $master_swift_proxy_nodes[0]['storage_address']
$master_swift_replication_nodes = get_nodes_hash_by_roles($network_metadata, [$swift_master_role])
$master_swift_replication_nodes_list = values($master_swift_replication_nodes)
$master_swift_replication_ip = $master_swift_replication_nodes_list[0]['network_roles']['swift/replication']
# setup a cronjob to rebalance and repush rings periodically
class { 'openstack::swift::rebalance_cronjob':
ring_rebalance_period => min($ring_min_part_hours * 2, 23),
master_swift_proxy_ip => $master_swift_proxy_ip,
primary_proxy => hiera('primary_controller'),
ring_rebalance_period => min($ring_min_part_hours * 2, 23),
master_swift_replication_ip => $master_swift_replication_ip,
primary_proxy => hiera('is_primary_swift_proxy'),
}
}

View File

@ -1,58 +1,63 @@
notice('MODULAR: swift.pp')
$swift_hash = hiera_hash('swift_hash')
$swift_master_role = hiera('swift_master_role', 'primary-controller')
$swift_nodes = pick(hiera('swift_nodes', undef), hiera('controllers', undef))
$swift_proxies_cache = pick(hiera('swift_proxies_cache', undef), hiera('controller_nodes', undef))
$primary_swift = pick(hiera('primary_swift', undef), hiera('primary_controller', undef))
$proxy_port = hiera('proxy_port', '8080')
$network_scheme = hiera('network_scheme', {})
$storage_hash = hiera('storage_hash')
$mp_hash = hiera('mp')
$management_vip = hiera('management_vip')
$debug = hiera('debug', false)
$verbose = hiera('verbose')
$storage_address = hiera('storage_address')
$node = hiera('node')
$ring_min_part_hours = hiera('swift_ring_min_part_hours', 1)
$deploy_swift_storage = hiera('deploy_swift_storage', true)
$deploy_swift_proxy = hiera('deploy_swift_proxy', true)
$create_keystone_auth = pick($swift_hash['create_keystone_auth'], true)
$network_scheme = hiera_hash('network_scheme')
$network_metadata = hiera_hash('network_metadata')
prepare_network_config($network_scheme)
$swift_hash = hiera_hash('swift_hash')
$swift_master_role = hiera('swift_master_role', 'primary-controller')
$swift_nodes = hiera_hash('swift_nodes', {})
$swift_proxies_addr_list = values(get_node_to_ipaddr_map_by_network_role(hiera_hash('swift_proxies', {}), 'swift/api'))
# todo(sv) replace 'management' to mgmt/memcache
$memcaches_addr_list = values(get_node_to_ipaddr_map_by_network_role(hiera_hash('swift_proxy_caches', {}), 'management'))
$is_primary_swift_proxy = hiera('is_primary_swift_proxy', false)
$proxy_port = hiera('proxy_port', '8080')
$storage_hash = hiera_hash('storage_hash')
$mp_hash = hiera('mp')
$management_vip = hiera('management_vip')
$public_vip = hiera('public_vip')
$swift_api_ipaddr = get_network_role_property('swift/api', 'ipaddr')
$swift_storage_ipaddr = get_network_role_property('swift/replication', 'ipaddr')
$debug = hiera('debug', false)
$verbose = hiera('verbose', false)
$ring_min_part_hours = hiera('swift_ring_min_part_hours', 1)
$deploy_swift_storage = hiera('deploy_swift_storage', true)
$deploy_swift_proxy = hiera('deploy_swift_proxy', true)
$create_keystone_auth = pick($swift_hash['create_keystone_auth'], true)
#Keystone settings
$service_endpoint = hiera('service_endpoint', $management_vip)
$keystone_endpoint = hiera('keystone_endpoint', $service_endpoint)
$keystone_user = pick($swift_hash['user'], 'swift')
$keystone_password = pick($swift_hash['user_password'], 'passsword')
$keystone_tenant = pick($swift_hash['tenant'], 'services')
$keystone_protocol = pick($swift_hash['auth_protocol'], 'http')
$region = hiera('region', 'RegionOne')
$service_endpoint = hiera('service_endpoint', $management_vip)
$keystone_endpoint = hiera('keystone_endpoint', $service_endpoint)
$keystone_user = pick($swift_hash['user'], 'swift')
$keystone_password = pick($swift_hash['user_password'], 'passsword')
$keystone_tenant = pick($swift_hash['tenant'], 'services')
$keystone_protocol = pick($swift_hash['auth_protocol'], 'http')
$region = hiera('region', 'RegionOne')
# Use Swift if it isn't replaced by vCenter, Ceph for BOTH images and objects
if !($storage_hash['images_ceph'] and $storage_hash['objects_ceph']) and !$storage_hash['images_vcenter'] {
$swift_partition = hiera('swift_partition', '/var/lib/glance/node')
$master_swift_proxy_nodes = filter_nodes(hiera('nodes_hash'),'role',$swift_master_role)
$master_swift_proxy_ip = $master_swift_proxy_nodes[0]['storage_address']
if ($primary_swift) {
$primary_proxy = true
} else {
$primary_proxy = false
}
$master_swift_proxy_nodes = get_nodes_hash_by_roles($network_metadata, [$swift_master_role])
$master_swift_proxy_nodes_list = values($master_swift_proxy_nodes)
$master_swift_proxy_ip = regsubst($master_swift_proxy_nodes_list[0]['network_roles']['swift/api'], '\/\d+$', '')
$master_swift_replication_ip = regsubst($master_swift_proxy_nodes_list[0]['network_roles']['swift/replication'], '\/\d+$', '')
if ($deploy_swift_storage){
class { 'openstack::swift::storage_node':
storage_type => false,
loopback_size => '5243780',
storage_mnt_base_dir => $swift_partition,
storage_devices => filter_hash($mp_hash,'point'),
swift_zone => $node[0]['swift_zone'],
swift_local_net_ip => $storage_address,
master_swift_proxy_ip => $master_swift_proxy_ip,
sync_rings => ! $primary_proxy,
swift_zone => $master_swift_proxy_nodes_list[0]['swift_zone'],
swift_local_net_ip => $swift_storage_ipaddr,
master_swift_proxy_ip => $master_swift_proxy_ip,
master_swift_replication_ip => $master_swift_replication_ip,
sync_rings => ! $is_primary_swift_proxy,
debug => $debug,
verbose => $verbose,
log_facility => 'LOG_SYSLOG',
}
}
if $primary_proxy {
if $is_primary_swift_proxy {
ring_devices {'all':
storages => $swift_nodes,
require => Class['swift'],
@ -61,18 +66,19 @@ if !($storage_hash['images_ceph'] and $storage_hash['objects_ceph']) and !$stora
if ($deploy_swift_proxy){
$resize_value = pick($swift_hash['resize_value'], 2)
$ring_part_power = calc_ring_part_power($swift_nodes,$resize_value)
$sto_net = $network_scheme['endpoints'][$network_scheme['roles']['storage']]['IP']
$man_net = $network_scheme['endpoints'][$network_scheme['roles']['management']]['IP']
$sto_net = get_network_role_property('swift/replication', 'network')
$man_net = get_network_role_property('swift/api', 'network')
class { 'openstack::swift::proxy':
swift_user_password => $swift_hash['user_password'],
swift_proxies_cache => $swift_proxies_cache,
swift_proxies_cache => $memcaches_addr_list,
ring_part_power => $ring_part_power,
primary_proxy => $primary_proxy,
swift_local_net_ip => $storage_address,
master_swift_proxy_ip => $master_swift_proxy_ip,
primary_proxy => $is_primary_swift_proxy,
swift_proxy_local_ipaddr => $swift_api_ipaddr,
swift_replication_local_ipaddr => $swift_storage_ipaddr,
master_swift_proxy_ip => $master_swift_proxy_ip,
master_swift_replication_ip => $master_swift_replication_ip,
proxy_port => $proxy_port,
debug => $debug,
verbose => $verbose,
@ -85,9 +91,8 @@ if !($storage_hash['images_ceph'] and $storage_hash['objects_ceph']) and !$stora
auth_host => $keystone_endpoint,
auth_protocol => $keystone_protocol,
} ->
class { 'openstack::swift::status':
endpoint => "http://${storage_address}:${proxy_port}",
endpoint => "http://${swift_api_ipaddr}:${proxy_port}",
vip => $management_vip,
only_from => "127.0.0.1 240.0.0.2 ${sto_net} ${man_net}",
con_timeout => 5
@ -96,7 +101,7 @@ if !($storage_hash['images_ceph'] and $storage_hash['objects_ceph']) and !$stora
if ($create_keystone_auth){
class { 'swift::keystone::auth':
password => $swift_hash['user_password'],
public_address => hiera('public_vip'),
public_address => $public_vip,
region => $region,
internal_address => $management_vip,
admin_address => $management_vip,

View File

@ -14,8 +14,8 @@
<% globals.store "controller", @controller -%>
<% globals.store "controller_hostnames", @controller_hostnames -%>
<% globals.store "controller_internal_addresses", @controller_internal_addresses -%>
<% globals.store "controller_node_address", @controller_node_address -%>
<% globals.store "controller_node_public", @controller_node_public -%>
<% globals.store "controller_node_address", @management_vip -%>
<% globals.store "controller_node_public", @public_vip -%>
<% globals.store "controller_nodes", @controller_nodes -%>
<% globals.store "controller_public_addresses", @controller_public_addresses -%>
<% globals.store "controller_storage_addresses", @controller_storage_addresses -%>
@ -25,11 +25,11 @@
<% globals.store "default_gateway", @default_gateway -%>
<% globals.store "deployment_mode", @deployment_mode -%>
<% globals.store "dns_nameservers", @dns_nameservers -%>
<% globals.store "fuel_settings", @fuel_settings -%>
<% globals.store "glance_backend", @glance_backend -%>
<% globals.store "glance_hash", @glance_hash -%>
<% globals.store "glance_known_stores", @glance_known_stores -%>
<% globals.store "heat_hash", @heat_hash -%>
<% globals.store "node_name", @node_name -%>
<% globals.store "idle_timeout", @idle_timeout -%>
<% globals.store "internal_address", @internal_address -%>
<% globals.store "internal_int", @internal_int -%>
@ -100,4 +100,14 @@
<% globals.store "vcenter_hash", @vcenter_hash -%>
<% globals.store "verbose", @verbose -%>
<% globals.store "vlan_start", @vlan_start -%>
<% globals.store "management_vip", @management_vip -%>
<% globals.store "database_vip", @database_vip -%>
<% globals.store "public_vip", @public_vip -%>
<% globals.store "memcache_servers", @memcache_servers -%>
<% globals.store "swift_master_role", @swift_master_role -%>
<% globals.store "swift_nodes", @swift_nodes -%>
<% globals.store "swift_proxies", @swift_proxies -%>
<% globals.store "swift_proxy_caches", @swift_proxy_caches -%>
<% globals.store "is_primary_swift_proxy", @is_primary_swift_proxy -%>
<%= YAML.dump globals %>