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:
parent
8f1bc80b6c
commit
1d59cedfd6
|
@ -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)),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"]
|
||||
}
|
||||
|
|
|
@ -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 -%>
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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}
|
||||
}
|
|
@ -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')
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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'),
|
||||
}
|
||||
|
|
|
@ -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' :
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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'),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 %>
|
||||
|
|
Loading…
Reference in New Issue