modify config_manager and add openstack ha tmpl

Change-Id: Ib9b0cac53a4a33ec4fe133de24dc9361b5a15dab
This commit is contained in:
grace.yu 2014-11-10 13:47:32 -08:00
parent 9146158be5
commit b93544704c
8 changed files with 417 additions and 22 deletions

View File

@ -35,12 +35,11 @@ class DeployManager(object):
# Get OS installer
os_installer_name = adapter_info[const.OS_INSTALLER][const.NAME]
os_hosts_info = self._get_hosts_for_os_installation(hosts_info)
self.os_installer = DeployManager._get_installer(OSInstaller,
os_installer_name,
adapter_info,
cluster_info,
os_hosts_info)
hosts_info)
# Get package installer
pk_info = adapter_info.setdefault(const.PK_INSTALLER, {})
@ -148,18 +147,6 @@ class DeployManager(object):
if self.pk_installer:
self.pk_installer.delete_hosts(delete_cluster=delete_cluster)
def _get_hosts_for_os_installation(self, hosts_info):
"""Get info of hosts which need to install/reinstall OS."""
hosts_list = {}
for host_id in hosts_info:
reinstall_os_flag = hosts_info[host_id][const.REINSTALL_OS_FLAG]
if not reinstall_os_flag:
continue
hosts_list[host_id] = hosts_info[host_id]
return hosts_list
class PowerManager(object):
"""Manage host to power on, power off, and reset."""

View File

@ -59,6 +59,15 @@ class BaseConfigManager(object):
return self.hosts_info.keys()
def get_hosts_id_list_for_os_installation(self):
"""Get info of hosts which need to install/reinstall OS."""
result = []
all_host_ids = self.get_host_id_list()
for host_id in all_host_ids:
if self.hosts_info[host_id][const.REINSTALL_OS_FLAG]:
result.append(host_id)
return result
def get_cluster_flavor_info(self):
return self.__get_cluster_item(const.FLAVOR, {})

View File

@ -117,7 +117,7 @@ class CobblerInstaller(OSInstaller):
}
}
"""
host_ids = self.config_manager.get_host_id_list()
host_ids = self.config_manager.get_hosts_id_list_for_os_installation()
if not host_ids:
# No hosts need to install OS
logging.info("Cobbler: No host needs to install OS.")

View File

@ -54,9 +54,3 @@ class TestDeployManager(unittest2.TestCase):
test_manager = DeployManager(adapter_info, cluster_info, hosts_info)
self.assertIsNotNone(test_manager)
# Test hepler function _get_hosts_for_os_installation return correct
# number of hosts config for os deployment. In config_data, two out of
# three hosts need to install OS.
hosts_list = test_manager._get_hosts_for_os_installation(hosts_info)
self.assertEqual(2, len(hosts_list))

View File

@ -22,4 +22,14 @@ FLAVORS = [{
'os-network-server', 'os-block-storage-controller', 'os-block-storage-volume',
'os-image', 'os-dashboard'
]
}, {
'flavor': 'HA-multinodes',
'display_name': 'Multi-node Cluster with HA',
'template': 'ha_multinodes.tmpl',
'roles': [
'os-ops-database', 'os-identity', 'os-ops-messaging', 'os-ha',
'os-compute-controller', 'os-compute-worker', 'os-network-worker',
'os-network-server', 'os-block-storage-controller', 'os-block-storage-volume',
'os-image', 'os-dashboard'
]
}]

View File

@ -89,5 +89,16 @@ METADATA = {
}
}
}
},
'ha_proxy': {
'_self': {
},
'vip': {
'_self': {
'is_required': True,
'field': 'general',
'mapping_to': 'ha_vip'
}
}
}
}

View File

@ -57,7 +57,7 @@ ROLES = [{
'display_name': 'dashboard node',
'description': 'dashboard node'
}, {
'role': 'ha-proxy',
'role': 'os-ha',
'display_name': 'ha proxy node',
'description': 'ha proxy node',
'optional': True

View File

@ -0,0 +1,384 @@
#set ha_vip = $getVar('ha_vip', None)
#if not ha_vip
#raise ValueError("ha_vip hasnot been set yet!")
#end if
#set controller_role = $get_role('os_compute_controller', $getVar('os_controller', None))
## Contoller node management IP/interface
#set controller_ip = $controller_role.management.ip
#set controller_nic = $controller_role.management.interface
## Compute node management IP/interface
#set compute_role = $getVar('os_compute_worker', None)
#set compute_nic = $compute_role.management.interface
## Network server/worker node IP/interface
#set network = $getVar('os_network', None)
#set network_server_role = $get_role('os_network_server', [$network, $controller_role])
#set network_worker_role = $get_role('os_network_worker', [$network, $compute_role])
#set network_server_ip = $network_server_role.management.ip
#set network_server_nic = $network_server_role.management.interface
## Network worker node management IP/interface
#set network_worker_ip = $network_worker_role.management.ip
#set network_worker_nic = $network_worker_role.management.interface
#set network_worker_tenant_nic = $network_worker_role.tenant.interface
#set network_worker_public_nic = $network_worker_role.external.interface
## Database node management IP
#set db_role = $get_role('os_ops_database', $controller_role)
#set db_ip = $db_role.management.ip
#set db_nic = $db_role.management.interface
## Message queue node management IP/interface
#set msg_queue_role = $get_role('os_ops_messaging', $controller_role)
#set msg_queue_ip = $msg_queue_role.management.ip
## Identity (keystone) node IP/interface
#set identity_role = $get_role('os_identity', $controller_role)
#set identity_ip = $identity_role.management.ip
#set identity_nic = $identity_role.management.interface
## Glance node management IP/interface
#set glance_role = $get_role('os_image', $controller_role)
#set glance_ip = $glance_role.management.ip
#set glance_nic = $glance_role.management.interface
## Cinder node management IP/interface
#set cinder_role = $get_role('os_block_storage_controller', $controller_role)
#set cinder_controller_ip = $cinder_role.management.ip
#set cinder_controller_nic = $cinder_role.management.interface
## Dashboard node management IP/interface
#set dash_role = $get_role('os_dashboard', $controller_role)
#set dash_ip = $dash_role.management.ip
#def get_role($role_name, $default_roles=None)
#set target_role = $getVar($role_name, None)
#if $target_role is None and $default_roles is not None
#if isinstance($default_roles, list)
#for $role in $default_roles
#if $role is not None
#set target_role = $role
#break
#end if
#end for
#else
#set target_role = $default_roles
#end if
#end if
#return $target_role
#end def
{
"name": "testing",
"description": "Environment used in testing the upstream cookbooks and reference Chef repository",
"cookbook_versions": {
},
"json_class": "Chef::Environment",
"chef_type": "environment",
"default_attributes": {
"local_repo": "",
"mysql": {
"server_root_password": "test",
"server_debian_password": "root",
"server_repl_password": "root",
"allow_remote_root": true,
"root_network_acl": "%"
},
"collectd": {
"server": {
"host": "metrics",
"port": "2003",
"protocol": "udp"
}
},
"haproxy": {
"incoming_address": "$ha_vip"
},
"keepalived": {
"vip": {
"ipaddress": "$ha_vip",
"interface": "eth0"
}
},
"openstack": {
"auth": {
"validate_certs": false
},
"block-storage": {
"syslog": {
"use": false
},
"api": {
"ratelimit": "False"
},
"debug": true
},
"dashboard": {
"use_ssl": "false"
},
"compute": {
"syslog": {
"use": false
},
"libvirt": {
"bind_interface": "$compute_nic"
},
"novnc_proxy": {
"bind_interface": "$compute_nic"
},
"xvpvnc_proxy": {
"bind_interface": "$compute_nic"
},
"ratelimit": {
"api": {
"enabled": false
},
"volume": {
"enabled": false
}
},
"network": {
"service_type": "neutron"
}
},
"network": {
"verbose": "True",
"debug": "True",
"service_plugins": [
"router"
],
"ml2": {
"type_drivers": "gre",
"tenant_network_types": "gre",
"tunnel_id_ranges": "1:1000",
"enable_security_group": "True"
},
"openvswitch": {
"tenant_network_type": "gre",
"enable_tunneling": "True",
"tunnel_id_ranges": "1:1000",
"bind_interface": "$network_worker_tenant_nic"
},
"l3": {
"external_network_bridge_interface": "$network_worker_public_nic"
}
},
"db": {
"bind_interface": "$db_nic",
"compute": {
"host": "$db_ip"
},
"identity": {
"host": "$db_ip"
},
"image": {
"host": "$db_ip"
},
"network": {
"host": "$db_ip"
},
"volume": {
"host": "$db_ip"
},
"dashboard": {
"host": "$db_ip"
},
"telemetry": {
"host": "$db_ip"
},
"orchestration": {
"host": "$db_ip"
}
},
"developer_mode": true,
"endpoints": {
"db": {
"host": "$db_ip"
},
"mq": {
"host": "$msg_queue_ip"
},
"compute-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "8774",
"path": "/v2/%(tenant_id)s"
},
"compute-api-bind": {
"bind_interface": "$compute_nic"
},
"compute-ec2-admin": {
"host": "$ha_vip",
"scheme": "http",
"port": "8773",
"path": "/services/Admin"
},
"compute-ec2-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "8773",
"path": "/services/Cloud"
},
"compute-novnc": {
"host": "$ha_vip",
"scheme": "http",
"port": "6080",
"path": "/vnc_auto.html"
},
"compute-novnc-bind": {
"bind_interface": "$controller_nic"
},
"compute-vnc-bind": {
"bind_interface" : "$compute_nic"
},
"vnc_bind": {
"bind_interface": "$controller_nic"
},
"image-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "9292",
"path": "/v2"
},
"image-api-bind": {
"bind_interface": "$glance_nic"
},
"image-registry": {
"host": "$ha_vip",
"scheme": "http",
"port": "9191",
"path": "/v2"
},
"image-registry-bind": {
"bind_interface": "$glance_nic"
},
"identity-bind": {
"bind_interface": "$identity_nic"
},
"identity-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "5000",
"path": "/v2.0"
},
"identity-admin": {
"host": "$ha_vip",
"scheme": "http",
"port": "35357",
"path": "/v2.0"
},
"block-storage-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "8776",
"path": "/v1/%(tenant_id)s"
},
"block-storage-api-bind": {
"bind_interface": "$cinder_controller_nic"
},
"telemetry-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "8777",
"path": "/v1"
},
"network-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "9696",
"path": ""
},
"network-api-bind": {
"bind_interface": "$network_server_nic"
},
"orchestration-api": {
"host": "$ha_vip",
"scheme": "http",
"port": "8004",
"path": "/v1/%(tenant_id)s"
},
"orchestration-api-cfn": {
"host": "$ha_vip",
"scheme": "http",
"port": "8000",
"path": "/v1"
}
},
"identity": {
"admin_user": "admin",
"bind_interface": "$identity_nic",
"catalog": {
"backend": "sql"
},
"debug": true,
"roles": [
"admin",
"member"
],
"syslog": {
"use": false
},
"tenants": [
"admin",
"service",
"demo"
],
"token": {
"backend": "sql"
},
"users": {
"admin": {
"password": "admin",
"default_tenant": "admin",
"roles": {
"admin": [
"admin"
]
}
},
"demo": {
"password": "demo",
"default_tenant": "demo",
"roles": {
"member": [
"demo"
]
}
}
}
},
"image": {
"api": {
"bind_interface": "$glance_nic"
},
"debug": true,
"registry": {
"bind_interface": "$glance_nic"
},
"syslog": {
"use": false
},
"upload_image": {
"cirros": "http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img"
},
"upload_images": [
"cirros"
]
},
"memcached": {
"bind_interface": "$identity_nic"
},
"mq": {
"user": "guest",
"password": "test",
"vhost": "/nova",
"network": {
"service_type": "rabbitmq"
}
}
}
}
}