diff --git a/compass/deployment/installers/config_manager.py b/compass/deployment/installers/config_manager.py index 0703548f..22b7c964 100644 --- a/compass/deployment/installers/config_manager.py +++ b/compass/deployment/installers/config_manager.py @@ -110,12 +110,11 @@ class BaseConfigManager(object): return {} deploy_config = self.get_cluster_deployed_package_config() + mapping = deploy_config.setdefault(const.ROLES_MAPPING, {}) - if const.ROLES_MAPPING not in deploy_config: + if not mapping: mapping = self._get_cluster_roles_mapping_helper() deploy_config[const.ROLES_MAPPING] = mapping - else: - mapping = deploy_config[const.ROLES_MAPPING] return mapping @@ -332,6 +331,7 @@ class BaseConfigManager(object): """The ouput format will be as below, for example: { "controller": { + "hostname": "xxx", "management": { "interface": "eth0", "ip": "192.168.1.10", @@ -361,16 +361,18 @@ class BaseConfigManager(object): def _get_host_roles_mapping_helper(self, host_id): """The format will be the same as cluster roles mapping.""" - mapping = {} network_mapping = self.get_host_network_mapping(host_id) if not network_mapping: return {} + hostname = self.get_hostname(host_id) roles = self.get_host_roles(host_id) interfaces = self.get_host_interfaces(host_id) - temp = {} + + mapping = {} + temp = {const.HOSTNAME: hostname} for key in network_mapping: - nic = network_mapping[key] + nic = network_mapping[key][const.NIC] if nic in interfaces: temp[key] = self.get_host_interface_config(host_id, nic) temp[key][const.NIC] = nic diff --git a/compass/deployment/installers/installer.py b/compass/deployment/installers/installer.py index ae8e020f..7caf8b0e 100644 --- a/compass/deployment/installers/installer.py +++ b/compass/deployment/installers/installer.py @@ -102,7 +102,7 @@ class BaseInstaller(object): if meta_key.startswith("$"): return (False, metadata[meta_key]) - raise KeyError("'%s' is an invalid metadata!" % key) + raise KeyError("'%s' is invalid in metadata '%s'!" % (key, metadata)) def _get_tmpl_vars_helper(self, metadata, config, output): for key, config_value in sorted(config.iteritems()): diff --git a/compass/tests/deployment/installers/pk_installers/chef_installer/test_chef.py b/compass/tests/deployment/installers/pk_installers/chef_installer/test_chef.py index 686aa709..20d5e8fa 100644 --- a/compass/tests/deployment/installers/pk_installers/chef_installer/test_chef.py +++ b/compass/tests/deployment/installers/pk_installers/chef_installer/test_chef.py @@ -222,6 +222,7 @@ class TestChefInstaller(unittest2.TestCase): }, "roles_mapping": { "os_controller": { + "hostname": "server01", "management": { "interface": "vnet0", "ip": "12.234.32.100", @@ -240,6 +241,7 @@ class TestChefInstaller(unittest2.TestCase): } }, "os_compute_worker": { + "hostname": "server02", "management": { "interface": "eth0", "ip": "12.234.32.101", @@ -258,6 +260,7 @@ class TestChefInstaller(unittest2.TestCase): } }, "os_network": { + "hostname": "server03", "management": { "interface": "eth0", "ip": "12.234.32.103", @@ -291,6 +294,7 @@ class TestChefInstaller(unittest2.TestCase): "deployed_package_config": { "roles_mapping": { "os_controller": { + "hostname": "server01", "management": { "interface": "vnet0", "ip": "12.234.32.100", @@ -321,6 +325,7 @@ class TestChefInstaller(unittest2.TestCase): "deployed_package_config": { "roles_mapping": { "os_compute_worker": { + "hostname": "server02", "management": { "interface": "eth0", "ip": "12.234.32.101", @@ -351,6 +356,7 @@ class TestChefInstaller(unittest2.TestCase): "deployed_package_config": { "roles_mapping": { "os_network": { + "hostname": "server03", "management": { "interface": "eth0", "ip": "12.234.32.103", @@ -377,6 +383,7 @@ class TestChefInstaller(unittest2.TestCase): } }, "os_compute_worker": { + "hostname": "server03", "management": { "interface": "eth0", "ip": "12.234.32.103", diff --git a/compass/tests/deployment/installers/test_config_manager.py b/compass/tests/deployment/installers/test_config_manager.py index 1e771b23..74559917 100644 --- a/compass/tests/deployment/installers/test_config_manager.py +++ b/compass/tests/deployment/installers/test_config_manager.py @@ -64,6 +64,7 @@ class TestConfigManager(unittest2.TestCase): def test_get_cluster_roles_mapping(self): expected_output = { "os_controller": { + "hostname": "server01", "management": { "interface": "vnet0", "ip": "12.234.32.100", @@ -82,6 +83,7 @@ class TestConfigManager(unittest2.TestCase): } }, "os_compute_worker": { + "hostname": "server02", "management": { "interface": "eth0", "ip": "12.234.32.101", @@ -100,6 +102,7 @@ class TestConfigManager(unittest2.TestCase): } }, "os_network": { + "hostname": "server03", "management": { "interface": "eth0", "ip": "12.234.32.103", @@ -139,6 +142,7 @@ class TestConfigManager(unittest2.TestCase): def test_get_host_role_mapping(self): expected_output = { "os_network": { + "hostname": "server03", "management": { "interface": "eth0", "ip": "12.234.32.103", @@ -165,6 +169,7 @@ class TestConfigManager(unittest2.TestCase): } }, "os_compute_worker": { + "hostname": "server03", "management": { "interface": "eth0", "ip": "12.234.32.103", diff --git a/compass/tests/deployment/test_data/config_data.py b/compass/tests/deployment/test_data/config_data.py index 3db576ee..13127d39 100644 --- a/compass/tests/deployment/test_data/config_data.py +++ b/compass/tests/deployment/test_data/config_data.py @@ -228,9 +228,15 @@ cluster_test_config = { } }, "network_mapping": { - "management": "eth0", - "public": "eth2", - "tenant": "eth1" + "management": { + "interface": "eth0" + }, + "public": { + "interface": "eth2" + }, + "tenant": { + "interface": "eth1" + } } } } @@ -276,8 +282,12 @@ hosts_test_config = { }, "package_config": { "network_mapping": { - "management": "vnet0", - "tenant": "vnet1" + "management": { + "interface": "vnet0" + }, + "tenant": { + "interface": "vnet1" + } } } }, diff --git a/conf/adapter/chef_ceph_openstack.conf b/conf/adapter/chef_ceph_openstack.conf new file mode 100644 index 00000000..ee36923f --- /dev/null +++ b/conf/adapter/chef_ceph_openstack.conf @@ -0,0 +1,7 @@ +NAME = 'ceph_openstack_icehouse' +DISPLAY_NAME = 'Ceph + OpenStack Icehouse' +PARENT = 'openstack' +PACKAGE_INSTALLER = 'chef_installer' +OS_INSTALLER = 'cobbler' +SUPPORTED_OS_PATTERNS = ['(?i)centos.*', '(?i)ubuntu.*'] +DEPLOYABLE = True diff --git a/conf/flavor/ceph_firefly.conf b/conf/flavor/ceph_firefly.conf new file mode 100644 index 00000000..148499c4 --- /dev/null +++ b/conf/flavor/ceph_firefly.conf @@ -0,0 +1,9 @@ +ADAPTER_NAME = 'ceph_firefly' +FLAVORS = [ + { + 'flavor': 'ceph_firefly', + 'display_name': 'Ceph Cluster (Firefly)', + 'template': 'ceph_firefly.tmpl', + 'roles': ['ceph-mon', 'ceph-osd', 'ceph-mds', 'ceph-radosgw'] + } +] diff --git a/conf/flavor/chef_ceph_openstack.conf b/conf/flavor/chef_ceph_openstack.conf new file mode 100644 index 00000000..fcb8f8f7 --- /dev/null +++ b/conf/flavor/chef_ceph_openstack.conf @@ -0,0 +1,15 @@ +ADAPTER_NAME = 'ceph_openstack_icehouse' +FLAVORS = [ +{ + 'flavor': 'ceph_openstack_multinodes', + 'display_name': 'Multi-node Ceph+OpenStack Cluster', + 'template': 'multinodes.tmpl', + 'roles': [ + 'os-ops-database', 'os-ops-messaging', 'os-identity', 'os-compute-controller', + 'ceph-mon', 'ceph-osd', 'ceph-mds', 'ceph-radosgw', 'os-compute-worker', + 'os-network-worker', 'os-network-server', 'os-block-storage-controller', + 'os-block-storage-volume', 'os-image', 'os-dashboard', + 'ceph-os-block-config', 'ceph-os-compute-config', 'ceph-os-object-config', + 'ceph-os-image-config', 'openstack_config_mon', 'openstack_config_radosgw' + ] +}] diff --git a/conf/flavor/openstack_chef.conf b/conf/flavor/openstack_chef.conf index 24faca3d..02f525cb 100644 --- a/conf/flavor/openstack_chef.conf +++ b/conf/flavor/openstack_chef.conf @@ -18,10 +18,8 @@ FLAVORS = [{ 'template': 'multinodes.tmpl', 'roles': [ 'os-ops-database', 'os-identity', 'os-ops-messaging', - 'os-compute-controller', - 'os-compute-worker', 'os-network-server', - 'os-network-worker', 'os-block-storage-volume', - 'os-block-storage-controller', 'os-image', 'os-dashboard', - 'ha-proxy' + 'os-compute-controller', 'os-compute-worker', 'os-network-worker', + 'os-network-server', 'os-block-storage-controller', 'os-block-storage-volume', + 'os-image', 'os-dashboard' ] }] diff --git a/conf/package_metadata/ceph.conf b/conf/package_metadata/ceph.conf new file mode 100644 index 00000000..7ac7de7c --- /dev/null +++ b/conf/package_metadata/ceph.conf @@ -0,0 +1,79 @@ +ADAPTER = 'ceph' +METADATA = { + 'global_config': { + '_self': { + 'required_in_whole_config': True, + 'mapping_to': 'global' + }, + 'osd_pool_pg_num': { + '_self': { + 'is_required': True, + 'field': 'general', + 'default_value': '1024', + 'mapping_to': 'osd_pool_pg_num' + } + }, + 'osd_pool_pgp_num': { + '_self': { + 'is_required': True, + 'field': 'general', + 'default_value': '1024', + 'mapping_to': 'osd_pool_pgp_num' + } + }, + 'osd_pool_size': { + '_self': { + 'is_required': True, + 'field': 'general', + 'default_value': '3', + 'mapping_to': 'osd_pool_size' + } + } + }, + 'osd_config': { + '_self': { + 'mapping_to': 'osd_config' + } + 'journal_size': { + '_self': { + 'field': 'general', + 'default_value': '10000', + 'mapping_to': 'journal_size' + } + }, + 'op_threads': { + '_self': { + 'field': 'general', + 'default_value': 10, + 'mapping_to': 'op_threads' + } + } + }, + "osd_devices": { + '_self': { + 'mapping_to': 'osd_devices' + } + '$device': { + '_self': { + 'validator': is_valid_partition + }, + 'journal': { + '_self': { + 'field': 'general', + 'mapping_to': 'journal' + } + } + } + }, + 'network_mapping': { + '_self': { + 'required_in_whole_config': True + }, + '$interface_type': { + '_self': { + 'is_required': True, + 'field': 'general' + } + } + } +} diff --git a/conf/package_metadata/ceph_openstack.conf b/conf/package_metadata/ceph_openstack.conf new file mode 100644 index 00000000..db9d4ce5 --- /dev/null +++ b/conf/package_metadata/ceph_openstack.conf @@ -0,0 +1,66 @@ +ADAPTER = 'ceph_openstack_icehouse' +METADATA = { + 'global_config': { + '_self': { + 'required_in_whole_config': True, + }, + 'osd_pool_pg_num': { + '_self': { + 'is_required': True, + 'field': 'general', + 'default_value': '1024', + 'mapping_to': 'osd_pool_pg_num' + } + }, + 'osd_pool_pgp_num': { + '_self': { + 'is_required': True, + 'field': 'general', + 'default_value': '1024', + 'mapping_to': 'osd_pool_pgp_num' + } + }, + 'osd_pool_size': { + '_self': { + 'is_required': True, + 'field': 'general', + 'default_value': '3', + 'mapping_to': 'osd_pool_size' + } + } + }, + 'osd_config': { + '_self': { + } + 'journal_size': { + '_self': { + 'field': 'general', + 'default_value': '10000', + 'mapping_to': 'journal_size' + } + }, + 'op_threads': { + '_self': { + 'field': 'general', + 'default_value': 10, + 'mapping_to': 'op_threads' + } + } + }, + "osd_devices": { + '_self': { + 'mapping_to': 'osd_devices' + } + '$device': { + '_self': { + 'validator': is_valid_partition + }, + 'journal': { + '_self': { + 'field': 'general', + 'mapping_to': 'journal' + } + } + } + } +} diff --git a/conf/package_metadata/openstack.conf b/conf/package_metadata/openstack.conf index bb5406c3..d8206e95 100644 --- a/conf/package_metadata/openstack.conf +++ b/conf/package_metadata/openstack.conf @@ -6,7 +6,7 @@ METADATA = { }, 'service_credentials': { '_self': { - 'mapping_to': 'service_credentials' + 'mapping_to': 'service_credentials' }, '$service': { 'username': { diff --git a/conf/role/ceph.conf b/conf/role/ceph.conf new file mode 100644 index 00000000..c89cfa47 --- /dev/null +++ b/conf/role/ceph.conf @@ -0,0 +1,21 @@ +ADAPTER_NAME = 'ceph_firefly' +ROLES = [ +{ + 'role': 'ceph-mon', + 'display_name': 'Ceph Mon', + 'description': 'ceph monitor server' +}, { + 'role': 'ceph-osd', + 'display_name': 'Ceph OSD', + 'description': 'ceph storage server' +}, { + 'role': 'ceph-mds', + 'display_name': 'Ceph MDS', + 'description': 'ceph metadata server', + 'optional': True +}, { + 'role': 'ceph-radosgw', + 'display_name': 'Ceph Radosgw', + 'description': 'ceph object gateway', + 'optional': True +}] diff --git a/conf/role/chef_ceph_openstack.conf b/conf/role/chef_ceph_openstack.conf new file mode 100644 index 00000000..a5fa6e9e --- /dev/null +++ b/conf/role/chef_ceph_openstack.conf @@ -0,0 +1,110 @@ +ADAPTER_NAME = 'ceph_openstack_icehouse' +ROLES = [{ + 'role': 'os-compute-worker', + 'display_name': 'compute', + 'description': 'compute node' +}, { + 'role': 'os-network', + 'display_name': 'network', + 'description': 'network node including network server' +}, { + 'role': 'os-network-server', + 'display_name': 'network server', + 'description': 'network server node' +}, { + 'role': 'os-network-worker', + 'display_name': 'network worker', + 'description': 'network node including network server' +}, { + 'role': 'os-block-storage-controller', + 'display_name': 'storage controller', + 'description': 'storage controller node' +}, { + 'role': 'os-block-storage-volume', + 'display_name': 'storage worker', + 'description': 'storage node' +}, { + 'role': 'os-image', + 'display_name': 'image', + 'description': 'image node' +}, { + 'role': 'os-compute-vncproxy', + 'display_name': 'vnc proxy', + 'description': 'vnc proxy node' +}, { + 'role': 'os-controller', + 'display_name': 'controller', + 'description': 'controller node including identity, dashboard, network server, and block stroage controller services' +}, { + 'role': 'os-compute-controller', + 'display_name': 'controller-only', + 'description': 'controller node for nova APIs' +}, { + 'role': 'os-ops-messaging', + 'display_name': 'message queue', + 'description': 'message queue node' +}, { + 'role': 'os-ops-database', + 'display_name': 'database', + 'description': 'database node' +}, { + 'role': 'os-identity', + 'display_name': 'keystone', + 'description': 'keystone node' +}, { + 'role': 'os-dashboard', + 'display_name': 'dashboard', + 'description': 'dashboard node' +}, { + 'role': 'os-ha', + 'display_name': 'ha proxy', + 'description': 'ha proxy node' +}, { + 'role': 'allinone-compute', + 'display_name': 'all in one node', + 'description': 'all in one compute' +}, { + 'role': 'ceph-os-block-config', + 'display_name': 'ceph-os block config', + 'description': 'ceph os block config' +}, { + 'role': 'ceph-os-compute-config', + 'display_name': 'ceph-os compute config', + 'description': 'ceph os compute config' +}, { + 'role': 'ceph-os-image-config', + 'display_name': 'ceph-os image config', + 'description': 'ceph os image config' +}, { + 'role': 'ceph-os-object-config', + 'display_name': 'ceph-os object config', + 'description': 'ceph openstack object storage config' +}, { + 'role': 'ceph-mds', + 'display_name': 'ceph MDS', + 'description': 'ceph metadata server', + 'optional': True +}, { + 'role': 'ceph-mon', + 'display_name': 'ceph monitor', + 'description': 'ceph monitor server' +}, { + 'role': 'ceph-osd', + 'display_name': 'ceph OSD', + 'description': 'ceph storage server' +}, { + 'role': 'ceph-radosgw', + 'display_name': 'ceph radosgw', + 'description': 'ceph object gateway', + 'optional': True +}, { + 'role': 'openstack_config_mon', + 'display_name': 'ceph-os mon config', + 'description': 'ceph openstack Monitor config', + 'optional': True +}, { + 'role': 'openstack_config_radosgw', + 'display_name': 'ceph-os radosgw config', + 'description': 'ceph openstack radosgw config', + 'optional': True +}] diff --git a/conf/templates/chef_installer/ceph_firefly/environments/ceph_firefly.tmpl b/conf/templates/chef_installer/ceph_firefly/environments/ceph_firefly.tmpl new file mode 100644 index 00000000..9760cb03 --- /dev/null +++ b/conf/templates/chef_installer/ceph_firefly/environments/ceph_firefly.tmpl @@ -0,0 +1,69 @@ +#import simplejson as json +#import uuid +#from copy import deepcopy + +#set fsid = str(uuid.uuid4()) +#set public_network_subnet = $network_mapping.public_network.subnet +#set cluster_network_subnet = $network_mapping.cluster_network.subnet + +#set osd_pool_pg_num = $getVar('osd_pool_pg_num', '1024') +#set osd_pool_pgp_num = $getVar('osd_pool_pgp_num', '1024') +#set osd_pool_size = $getVar('osd_pool_size', '3') + +#set journal_size = $getVar('journal_size', '10000') +#set osd_op_threads = $getVar('op_threads', 10) + +#set devices = [] +#if not $getVar('osd_devices', {}) + #set devices_info = $osd_devices + #set devices_num = len($devices_info) + #set devices = [x for x in range($devices_num)] + #set index = 0 + #for device, config in $devices_info.iteritems() + #set temp = deepcopy($config) + #set temp["device"] = $device + #set devices[index] = $temp + #set index = $index + 1 + #end for +#end if +#set devices = json.dumps($devices, encoding='utf-8') + +{ + "name": "ceph_env", + "description": "", + "cookbook_versions": { + "ceph": "~> 0.2.1" + }, + "json_class": "Chef::Environment", + "chef_type": "environment", + "default_attributes": { + "ceph": { + "config": { + "fsid": "$fsid", + "global": { + "public network": "$public_network_subnet", + "cluster network": "$cluster_network_subnet", + "auth cluster required": "cephx", + "auth service required": "cephx", + "auth client required": "cephx", + "osd pool default pg num": "$osd_pool_pg_num", + "osd pool default pgp num": "$osd_pool_pgp_num", + "osd pool default size": "$osd_pool_size" + }, + "mon": { + "debug mon": "20", + "debug paxos": "1/5", + "debug auth": "2" + }, + "osd": { + "osd journal size": "$journal_size", + "filestore xattr use omap": true, + "osd op threads": $osd_op_threads + } + }, + "osd_devices": $devices + } + }, + "override_attributes": { + } +} diff --git a/conf/templates/chef_installer/ceph_firefly/environments/ceph_firefly.tmpl.bak b/conf/templates/chef_installer/ceph_firefly/environments/ceph_firefly.tmpl.bak new file mode 100644 index 00000000..49a66d1c --- /dev/null +++ b/conf/templates/chef_installer/ceph_firefly/environments/ceph_firefly.tmpl.bak @@ -0,0 +1,40 @@ +#import uuid +#set UUID = str(uuid.uuid4()) +{ + "name": "ceph_env", + "description": "", + "cookbook_versions": { + "ceph": "~> 0.2.1" + }, + "json_class": "Chef::Environment", + "chef_type": "environment", + "default_attributes": { + "ceph": { + "config": { + "fsid": "$UUID", + "global": { + "public network": "10.145.88.0/23", + "cluster network": "172.16.100.0/24", + "auth cluster required": "cephx", + "auth service required": "cephx", + "auth client required": "cephx", + "osd pool default pg num": "1024", + "osd pool default pgp num": "1024", + "osd pool default size": "3" + }, + "mon": { + "debug mon": "20", + "debug paxos": "1/5", + "debug auth": "2" + }, + "osd": { + "osd journal size": "10000", + "filestore xattr use omap": true, + "osd op threads": 10 + } + } + } + }, + "override_attributes": { + } +} diff --git a/conf/templates/chef_installer/ceph_openstack_icehouse/environments/ha_multinodes.tmpl b/conf/templates/chef_installer/ceph_openstack_icehouse/environments/ha_multinodes.tmpl new file mode 100644 index 00000000..6276bb60 --- /dev/null +++ b/conf/templates/chef_installer/ceph_openstack_icehouse/environments/ha_multinodes.tmpl @@ -0,0 +1,407 @@ +#set ha_vip = $getVar('ha_vip') +#set ha_proxy_role = $getVar('os_ha', None) +#set ha_proxy_nic = $ha_proxy_role.management.interface + +#set controller_role = $getVar('os_compute_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_server_role = $get_role('os_network_server', [$controller_role]) +#set network_worker_role = $get_role('os_network_worker', [$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_public_nic = $network_worker_role.public.interface +#set network_worker_tenant_nic = $network_worker_role.tenant.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 Ceph and Openstack Icehouse", + "cookbook_versions": { + }, + "json_class": "Chef::Environment", + "chef_type": "environment", + "default_attributes": { + "ceph": { + "keystone environment": "openstack-ceph", + "radosgw domain": "test-ceph1", + "is_keystone_integration": true, + "config": { + "fsid": "82850ab3-f2b7-4eed-b6c2-29178a005750", + "global": { + "public network": "10.145.88.0/23", + "cluster network": "172.16.100.0/24", + "osd pool default pg num": "512", + "osd pool default pgp num": "512", + "osd pool default size": "2", + "max open files": "131072" + }, + "osd": { + "osd journal size": "10000", + "filestore xattr use omap": true, + "osd mkfs type": "xfs", + "osd mount options xfs": "rw,noatime,inode64,logbsize=256k,delaylog", + "osd mkfs options xfs": "-f -i size=2048", + "filestore max inline xattr size": "254", + "filestore max inline xattrs": "6", + "osd_op_threads": "20", + "filestore_queue_max_ops": "500", + "filestore_queue_committing_max_ops": "5000", + "journal_max_write_entries": "1000", + "journal_queue_max_ops": "3000", + "objecter_inflight_ops": "10240", + "filestore_queue_max_bytes": "1048576000", + "filestore_queue_committing_max_bytes": "1048576000", + "journal_max_write_bytes": "1048576000", + "journal_queue_max_bytes": "1048576000", + "ms_dispatch_throttle_bytes": "1048576000", + "objecter_infilght_op_bytes": "1048576000", + "filestore_max_sync_interval": "10", + "filestore_flusher": "false", + "filestore_flush_min": "0", + "filestore_sync_flush": true + } + } + }, + "haproxy": { + "incoming_address": "$ha_vip" + }, + "keepalived": { + "vip": { + "ipaddress": "$ha_vip", + "interface": "$ha_proxy_nic" + } + }, + "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" + } + }, + "openstack": { + "auth": { + "validate_certs": false + }, + "block-storage": { + "syslog": { + "use": false + }, + "api": { + "ratelimit": "False" + }, + "debug": true, + "volume": { + "driver": "cinder.volume.drivers.rbd.RBDDriver" + }, + "rbd_pool": "volumes", + "rbd_secret_uuid": "8b8441cc-949c-43ce-8bbc-f50e3bfeeaee", + "rbd_ceph_conf": "/etc/ceph/ceph.conf", + "rbd_flatten_volume_from_snapshot": false, + "rbd_max_clone_depth": 5, + "glance_api_version": 2 + }, + "dashboard": { + "use_ssl": "false" + }, + "compute": { + "syslog": { + "use": false + }, + "libvirt": { + "bind_interface": "$compute_nic", + "images_type": "rbd", + "images_rbd_pool": "vms" + }, + "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" + } + }, + "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": "$controller_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": { + "bind_interface": "$glance_nic" + }, + "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" + }, + "network-api": { + "host": "$ha_vip", + "scheme": "http", + "port": "9696", + "path": "" + }, + "network-api-bind": { + "bind_interface": "$network_server_nic" + } + }, + "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", + "default_store": "rbd" + }, + "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_servers": [ + "$identity_ip:11211" + ], + "mq": { + "user": "guest", + "password": "test", + "vhost": "/nova", + "network": { + "service_type": "rabbitmq" + } + } + } + } +} diff --git a/conf/templates/chef_installer/ceph_openstack_icehouse/environments/multinodes.tmpl b/conf/templates/chef_installer/ceph_openstack_icehouse/environments/multinodes.tmpl new file mode 100644 index 00000000..65e7d1a2 --- /dev/null +++ b/conf/templates/chef_installer/ceph_openstack_icehouse/environments/multinodes.tmpl @@ -0,0 +1,462 @@ +#import simplejson as json +#import uuid +#from copy import deepcopy + +## Ceph cluster config +#set fsid = str(uuid.uuid4()) +#set rbd_secret_uuid = str(uuid.uuid4()) + +#set public_network_subnet = $network_mapping.public_network.subnet +#set cluster_network_subnet = $network_mapping.cluster_network.subnet + +#set osd_pool_pg_num = $getVar('osd_pool_pg_num', '1024') +#set osd_pool_pgp_num = $getVar('osd_pool_pgp_num', '1024') +#set osd_pool_size = $getVar('osd_pool_size', '3') + +#set journal_size = $getVar('journal_size', '10000') +#set osd_op_threads = $getVar('op_threads', 10) + +#set devices = [] +#if not $getVar('osd_devices', {}) + #set devices_info = $osd_devices + #set devices_num = len($devices_info) + #set devices = [x for x in range($devices_num)] + #set index = 0 + #for device, config in $devices_info.iteritems() + #set temp = deepcopy($config) + #set temp["device"] = $device + #set devices[index] = $temp + #set index = $index + 1 + #end for +#end if +#set devices = json.dumps($devices, encoding='utf-8') + +#set radosgw_role = $getVar('ceph_radosgw', '') +#set radosgw_domain = '' +#if $radosgw_role != '' + #set radosgw_domain = $radosgw_role.hostname +#end if + + +## OpenStack config +## Contoller node management IP/interface +#set controller_role = $get_role('os_compute_controller', $getVar('os_controller', None)) +#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_public_nic = $network_worker_role.public.interface +#set network_worker_tenant_nic = $network_worker_role.tenant.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": { + "ceph": { + "keystone environment": "openstack-ceph", + "radosgw domain": "$radosgw_domain", + "config": { + "fsid": "$fsid", + "global": { + "public network": "$public_network_subnet", + "cluster network": "$cluster_network_subnet", + "osd pool default pg num": "$osd_pool_pg_num", + "osd pool default pgp num": "$osd_pool_pgp_num", + "osd pool default size": "$osd_pool_size", + "max open files": "131072" + }, + "osd": { + "osd journal size": "$journal_size", + "filestore xattr use omap": true, + "osd mkfs type": "xfs", + "osd mount options xfs": "rw,noatime,inode64,logbsize=256k,delaylog", + "osd mkfs options xfs": "-f -i size=2048", + "filestore max inline xattr size": "254", + "filestore max inline xattrs": "6", + "osd_op_threads": "$osd_op_threads", + "filestore_queue_max_ops": "500", + "filestore_queue_committing_max_ops": "5000", + "journal_max_write_entries": "1000", + "journal_queue_max_ops": "3000", + "objecter_inflight_ops": "10240", + "filestore_queue_max_bytes": "1048576000", + "filestore_queue_committing_max_bytes": "1048576000", + "journal_max_write_bytes": "1048576000", + "journal_queue_max_bytes": "1048576000", + "ms_dispatch_throttle_bytes": "1048576000", + "objecter_infilght_op_bytes": "1048576000", + "filestore_max_sync_interval": "10", + "filestore_flusher": "false", + "filestore_flush_min": "0", + "filestore_sync_flush": true + } + }, + "osd_devices": $devices + }, + "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" + } + }, + "openstack": { + "auth": { + "validate_certs": false + }, + "block-storage": { + "syslog": { + "use": false + }, + "api": { + "ratelimit": "False" + }, + "volume": { + "driver": "cinder.volume.drivers.rbd.RBDDriver" + }, + "debug": true, + "rbd_pool": "volumes", + "rbd_secret_uuid": "$rbd_secret_uuid", + "rbd_ceph_conf": "/etc/ceph/ceph.conf", + "rbd_flatten_volume_from_snapshot": false, + "rbd_max_clone_depth": 5, + "glance_api_version": 2 + }, + "dashboard": { + "use_ssl": "false" + }, + "compute": { + "syslog": { + "use": false + }, + "libvirt": { + "bind_interface": "$compute_nic", + "images_type": "rbd", + "images_rbd_pool": "vms" + }, + "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": "$controller_ip", + "scheme": "http", + "port": "8774", + "path": "/v2/%(tenant_id)s" + }, + "compute-api-bind": { + "bind_interface": "$controller_nic" + }, + "compute-ec2-admin": { + "host": "$controller_ip", + "scheme": "http", + "port": "8773", + "path": "/services/Admin" + }, + "compute-ec2-api": { + "host": "$controller_ip", + "scheme": "http", + "port": "8773", + "path": "/services/Cloud" + }, + "compute-novnc": { + "host": "$controller_ip", + "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": "$glance_ip", + "scheme": "http", + "port": "9292", + "path": "/v2" + }, + "image-api-bind": { + "bind_interface": "$glance_nic" + }, + "image-registry": { + "host": "$glance_ip", + "scheme": "http", + "port": "9191", + "path": "/v2" + }, + "image-registry-bind": { + "bind_interface": "$glance_nic" + }, + "identity-bind": { + "bind_interface": "$identity_nic" + }, + "identity-api": { + "host": "$identity_ip", + "scheme": "http", + "port": "5000", + "path": "/v2.0" + }, + "identity-admin": { + "host": "$identity_ip", + "scheme": "http", + "port": "35357", + "path": "/v2.0" + }, + "block-storage-api": { + "host": "$cinder_controller_ip", + "scheme": "http", + "port": "8776", + "path": "/v1/%(tenant_id)s" + }, + "block-storage-api-bind": { + "bind_interface": "$cinder_controller_nic" + }, + "telemetry-api": { + "host": "$controller_ip", + "scheme": "http", + "port": "8777", + "path": "/v1" + }, + "network-api": { + "host": "$network_server_ip", + "scheme": "http", + "port": "9696", + "path": "" + }, + "network-api-bind": { + "bind_interface": "$network_server_nic" + }, + "orchestration-api": { + "host": "$controller_ip", + "scheme": "http", + "port": "8004", + "path": "/v1/%(tenant_id)s" + }, + "orchestration-api-cfn": { + "host": "$controller_ip", + "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", + "default_store": "rbd" + }, + "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_servers": [ + "$identity_ip:11211" + ], + "mq": { + "user": "guest", + "password": "test", + "vhost": "/nova", + "network": { + "service_type": "rabbitmq" + } + } + } + } +} diff --git a/conf/templates/cobbler/CentOS-6.5-x86_64/system.tmpl b/conf/templates/cobbler/CentOS-6.5-x86_64/system.tmpl index 6114e47d..03a7565c 100644 --- a/conf/templates/cobbler/CentOS-6.5-x86_64/system.tmpl +++ b/conf/templates/cobbler/CentOS-6.5-x86_64/system.tmpl @@ -28,7 +28,7 @@ #end if #if $val.is_mgmt: #set mac_key = '-'.join(('macaddress', $nic)) - #set dns_key = '-'.join(('dns', $nic)) + #set dns_key = '-'.join(('dnsname', $nic)) #set $rekeyed[$mac_key] = $mac #set $rekeyed[$dns_key] = $dns #end if