Skip to content

Commit

Permalink
Merge "Partial-Bug: 1574061 server-manager support for provisioning e…
Browse files Browse the repository at this point in the history
…xternal load balancer role. The external loadbalancer method can be either keepalived or using bird package, needs to be specified in cluster params. This is only supported with new cluster parameters."
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Jun 15, 2016
2 parents 2271a73 + b6970e9 commit 7d94310
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 41 deletions.
61 changes: 32 additions & 29 deletions src/role_sequence.json
Original file line number Diff line number Diff line change
@@ -1,34 +1,37 @@
{
"default": {
"role_sequence": [[["haproxy"], "p"],
[["database"], "p"],
[["openstack"], "p"],
[["config"], "p"],
[["control"], "p"],
[["collector"], "p"],
[["webui"], "p"],
[["compute"], "p"],
[["tsn"], "p"],
[["toragent"], "p"],
[["storage-compute"], "p"],
[["loadbalancer"], "p"],
[["database"], "p"],
[["openstack"], "p"],
[["config"], "p"],
[["control"], "p"],
[["collector"], "p"],
[["webui"], "p"],
[["compute"], "p"],
[["tsn"], "p"],
[["toragent"], "p"],
[["storage-compute"], "p"],
[["storage-master"], "p"]]
},
"default_ha": {
"role_sequence": [[["keepalived"], "p"],
[["haproxy"], "p"],
[["database"], "p"],
[["openstack"], "p"],
[["pre_exec_vnc_galera"], "s"],
[["post_exec_vnc_galera"], "s"],
[["config"], "p"],
[["control"], "p"],
[["collector"], "p"],
[["webui"], "p"],
[["compute"], "p"]]
[["haproxy"], "p"],
[["loadbalancer"], "p"],
[["database"], "p"],
[["openstack"], "p"],
[["pre_exec_vnc_galera"], "s"],
[["post_exec_vnc_galera"], "s"],
[["config"], "p"],
[["control"], "p"],
[["collector"], "p"],
[["webui"], "p"],
[["compute"], "p"]]
},
"default_contrail_ha": {
"role_sequence": [[["keepalived"], "p"],
[["haproxy"], "p"],
[["loadbalancer"], "p"],
[["database"], "p"],
[["openstack"], "p"],
[["config"], "p"],
Expand All @@ -40,20 +43,20 @@
"cluster": [
{
"id": "scale3",
"role_sequence": [[["database"], "s"],
[["openstack"], "s"],
[["config"], "s"],
[["control"], "s"],
[["collector"], "s"],
[["webui"], "s"],
[["compute"], "p"]]
"role_sequence": [[["database"], "s"],
[["openstack"], "s"],
[["config"], "s"],
[["control"], "s"],
[["collector"], "s"],
[["webui"], "s"],
[["compute"], "p"]]

},
{
"id": "cluster3",
"role_sequence": [[["database","openstack",
"config", "control",
"collector", "webui", "compute"], "s"]]
"config", "control",
"collector", "webui", "compute"], "s"]]
}
]
}
Expand Down
52 changes: 41 additions & 11 deletions src/server_mgr_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,19 +155,22 @@ class VncServerManager():
_package_types = ["contrail-ubuntu-package", "contrail-centos-package",
"contrail-storage-ubuntu-package"]
_image_category_list = ["image", "package"]
_control_roles = ['database', 'openstack', 'config', 'control', 'collector', 'webui']
_control_roles = ['loadbalancer', 'database', 'openstack', 'config', 'control', 'collector', 'webui']
_role_sequence = [(['haproxy'], 'p'),
(['loadbalancer'], 'p'),
(['database'], 'p'), (['openstack'], 'p'),
(['config'], 'p'), (['control'], 'p'),
(['collector'], 'p'), (['webui'], 'p')]
_role_step_sequence_ha = [(['keepalived'], 'p'), (['haproxy'], 'p'),
(['loadbalancer'], 'p'),
(['database'], 'p'), (['openstack'], 'p'),
(['pre_exec_vnc_galera'], 's'),
(['post_exec_vnc_galera'], 's'),
(['config'], 'p'), (['control'], 'p'),
(['collector'], 'p'), (['webui'], 'p')]

_role_step_sequence_contrail_ha = [(['keepalived'], 'p'), (['haproxy'], 'p'),
(['loadbalancer'], 'p'),
(['database'], 'p'), (['openstack'], 'p'),
(['config'], 'p'), (['control'], 'p'),
(['collector'], 'p'), (['webui'], 'p')]
Expand All @@ -176,11 +179,11 @@ class VncServerManager():
#_role_sequence = [(['database', 'openstack', 'config', 'control', 'collector', 'webui'], 's')]
_compute_roles = ['compute', 'tsn', 'toragent','storage-compute', 'storage-master']
_roles = _control_roles + _compute_roles
_control_step_roles = ['database', 'openstack', 'config', 'control', 'collector', 'webui']
_control_step_roles = ['loadbalancer', 'database', 'openstack', 'config', 'control', 'collector', 'webui']
_compute_step_roles = ['compute', 'tsn', 'toragent','storage-compute', 'storage-master']
_openstack_steps = ['pre_exec_vnc_galera', 'post_exec_vnc_galera', 'keepalived', 'haproxy']
_role_steps = _control_roles + _openstack_steps + _compute_roles
_control_step_roles = ['database', 'openstack', 'config', 'control', 'collector', 'webui']
_control_step_roles = ['loadbalancer', 'database', 'openstack', 'config', 'control', 'collector', 'webui']
_compute_step_roles = ['compute', 'storage-compute', 'storage-master']
_step_roles = _control_step_roles + _compute_step_roles
_tags_dict = {}
Expand Down Expand Up @@ -902,8 +905,8 @@ def _validate_roles(self, cluster_id):
"database", "openstack", "config",
"control", "collector", "webui", "compute" ]
roles_set = set(role_list)

optional_role_list = ["storage-compute", "storage-master", "tsn", "toragent"]
# adding role here got the role in hieradata yaml file
optional_role_list = ["storage-compute", "storage-master", "tsn", "toragent", "loadbalancer"]
optional_role_set = set(optional_role_list)

cluster_role_list = []
Expand Down Expand Up @@ -971,7 +974,7 @@ def validate_smgr_provision(self, validation_data, request , data=None):
role_list = [
"database", "openstack", "config",
"control", "collector", "webui", "compute", "zookeeper",
"storage-compute", "storage-master", "tsn", "toragent"]
"storage-compute", "storage-master", "tsn", "toragent", "loadbalancer"]
roles = req_provision_params.get("roles", None)
if roles is None:
msg = "No provisioning roles specified"
Expand Down Expand Up @@ -3580,6 +3583,19 @@ def get_hieradata_environment(self, server):
return hiera_env
# end get_hieradata_environment

def is_cluster_ext_lb(self, cluster):
'''return true if loadbalancer role is defined for cluster
else return false'''
if not cluster:
return False
cluster_params = eval(cluster['parameters'])
cluster_provision_params = cluster_params.get("provision", {})
if cluster_provision_params:
cluster_params_lb = cluster_provision_params['contrail']
if cluster_params_lb.get('loadbalancer', None):
return True
return False

def get_role_step_servers(self, role_servers, cluster):
role_step_servers = {}
if not cluster:
Expand All @@ -3590,6 +3606,7 @@ def get_role_step_servers(self, role_servers, cluster):
role_step_servers['haproxy'] = []
openstack_ha = self.is_cluster_ha(cluster)
contrail_ha = self.is_cluster_contrail_ha(cluster)
ext_lb_flag = self.is_cluster_ext_lb(cluster)
for role in self._roles:
role_step_servers[role] = []
for server in role_servers[role]:
Expand All @@ -3599,16 +3616,24 @@ def get_role_step_servers(self, role_servers, cluster):
role_step_servers['pre_exec_vnc_galera'].append(server['id'])
if server['id'] not in role_step_servers['post_exec_vnc_galera']:
role_step_servers['post_exec_vnc_galera'].append(server['id'])
if server['id'] not in role_step_servers['keepalived']:
role_step_servers['keepalived'].append(server['id'])
if server['id'] not in role_step_servers['haproxy']:
role_step_servers['haproxy'].append(server['id'])
if role == 'config':
if not ext_lb_flag:
if server['id'] not in role_step_servers['keepalived']:
role_step_servers['keepalived'].append(server['id'])
if server['id'] not in role_step_servers['haproxy']:
role_step_servers['haproxy'].append(server['id'])
if role == 'config' and (not ext_lb_flag):
if server['id'] not in role_step_servers['haproxy']:
role_step_servers['haproxy'].append(server['id'])
if contrail_ha:
if server['id'] not in role_step_servers['keepalived']:
role_step_servers['keepalived'].append(server['id'])
# add loadbalancer node in keepalived and haproxy list, if one defined
if role == 'loadbalancer':
if openstack_ha or contrail_ha:
if server['id'] not in role_step_servers['keepalived']:
role_step_servers['keepalived'].append(server['id'])
if server['id'] not in role_step_servers['haproxy']:
role_step_servers['haproxy'].append(server['id'])
return role_step_servers

def validate_role_sequence(self, role_sequence):
Expand Down Expand Up @@ -4241,6 +4266,11 @@ def provision_server(self):
# fully on new format.
provision_params = {}
if "provision" in cluster_params:
# validate ext lb params in cluster
if role_servers.get('loadbalancer', None):
msg = self._smgr_validations.validate_external_lb_params(cluster)
if msg:
self.log_and_raise_exception(msg)
self.build_calculated_provision_params(
server, cluster, role_servers, cluster_servers, package)
else:
Expand Down
2 changes: 1 addition & 1 deletion src/server_mgr_puppet.py
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@ def add_sequencing_params(self, cluster, package):
sequencing_params['contrail'][key]['enable_provision_started'] = True
sequencing_params['contrail'][key]['enable_storage_master'] = False
sequencing_params['contrail'][key]['enable_storage_compute'] = False
for role in ['database', 'config', 'openstack',
for role in ['loadbalancer', 'database', 'config', 'openstack',
'control', 'collector',
'webui', 'compute', 'tsn', 'toragent']:
sequencing_params['contrail'][key][
Expand Down
13 changes: 13 additions & 0 deletions src/server_mgr_validations.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,19 @@ def get_vips_in_cluster(self,cluster):
contrail_external_vip = cluster_params.get('contrail_external_vip')
return (internal_vip, external_vip, contrail_internal_vip, contrail_external_vip)

# Function to validate ext lb params
def validate_external_lb_params(self, cluster):
lb_params = cluster['parameters']['provision']['contrail']\
['loadbalancer']
if not lb_params:
return "cluster does not contain loadbalancer in "\
"provision:contrail stanza"
lb_method = lb_params.get('loadbalancer_method', None)
if not lb_method:
return "cluster does not contain loadbalancer method in "\
"provision:contrail:loadbalancer stanza"
return None

#Function to validate vip configuration for a multi interface server
def validate_multi_interface_vip(self,cluster, servers):
#Get the list of servers with specific roles
Expand Down

0 comments on commit 7d94310

Please sign in to comment.