Fixes errors when nova is disabled

This patch checks if nova is disabled in some
plugins so we can run packstack with
CONFIG_NOVA_INSTALL=n

Added also an ALL option to the firewall
template.

Change-Id: I05a9bd55c89d4009e28307248d74624533d47240
Fixes: rhbz#987888 rhbz#1024564 rhbz#1026795
This commit is contained in:
Ivan Chavero
2013-11-06 09:59:59 -07:00
parent bb48532631
commit 768ee0d856
11 changed files with 67 additions and 38 deletions

View File

@@ -4,7 +4,8 @@ from .datastructures import SortedDict
from .decorators import retry
from .network import get_localhost_ip, host2ip, force_ip, device_from_ip
from .shell import ScriptRunner, execute
from .shortcuts import host_iter, hosts, get_current_user, get_current_username
from .shortcuts import host_iter, hosts, get_current_user,\
get_current_username, split_hosts
from .strings import COLORS, color_text, mask_string
@@ -13,4 +14,4 @@ __all__ = ('SortedDict',
'get_localhost_ip', 'host2ip', 'force_ip', 'device_from_ip',
'ScriptRunner', 'execute',
'host_iter', 'hosts', 'get_current_user', 'get_current_username',
'COLORS', 'color_text', 'mask_string')
'split_hosts', 'COLORS', 'color_text', 'mask_string')

View File

@@ -38,3 +38,12 @@ def get_current_username():
user = pwd.getpwuid(uid).pw_name
group = grp.getgrgid(gid).gr_name
return user, group
def split_hosts(hosts_string):
hosts = set()
for host in hosts_string.split(','):
shost = host.strip()
if shost:
hosts.add(shost)
return hosts

View File

@@ -99,6 +99,10 @@ def create_manifest(config):
config['FIREWALL_SERVICE_NAME'] = 'ceilometer-api'
config['FIREWALL_PORTS'] = "'8777'"
manifestdata += getManifestTemplate("firewall.pp")
# Add a template that creates a group for nova because the ceilometer
# class needs it
if config['CONFIG_NOVA_INSTALL'] == 'n':
manifestdata += getManifestTemplate("ceilometer_nova_disabled.pp")
appendManifestFile(manifestfile, manifestdata)

View File

@@ -10,6 +10,7 @@ import logging
from packstack.installer import exceptions
from packstack.installer import processors
from packstack.installer import validators
from packstack.installer.utils import split_hosts
from packstack.installer import basedefs
from packstack.installer import utils
@@ -364,7 +365,12 @@ def create_manifest(config):
if config['CONFIG_CEILOMETER_INSTALL'] == 'y':
manifestdata += getManifestTemplate('cinder_ceilometer.pp')
hosts = config['CONFIG_NOVA_COMPUTE_HOSTS'].split(",")
hosts = set()
if config['CONFIG_NOVA_INSTALL'] == 'y':
hosts = split_hosts(config['CONFIG_NOVA_COMPUTE_HOSTS'])
else:
hosts.add('ALL',)
config['FIREWALL_ALLOWED'] = ",".join(["'%s'" % i.strip() for i in hosts if i.strip()])
config['FIREWALL_SERVICE_NAME'] = "cinder"
config['FIREWALL_PORTS'] = "'3260', '8776'"

View File

@@ -8,6 +8,7 @@ import logging
from packstack.installer import validators
from packstack.installer import basedefs
from packstack.installer import utils
from packstack.installer.utils import split_hosts
from packstack.modules.ospluginutils import getManifestTemplate, appendManifestFile
@@ -98,8 +99,10 @@ def createmanifest(config):
if config['CONFIG_CEILOMETER_INSTALL'] == 'y':
manifestdata += getManifestTemplate('glance_ceilometer.pp')
hosts = set()
for host in config['CONFIG_NOVA_COMPUTE_HOSTS'].split(','):
hosts.add(host.strip())
if config['CONFIG_NOVA_INSTALL'] == 'y':
hosts = split_hosts(config['CONFIG_NOVA_COMPUTE_HOSTS'])
else:
hosts.add('ALL',)
config['FIREWALL_ALLOWED'] = ",".join(["'%s'" % i for i in hosts])
config['FIREWALL_SERVICE_NAME'] = "glance"
config['FIREWALL_PORTS'] = "'9292'"

View File

@@ -113,7 +113,7 @@ def createmanifest(config):
hosts.add(config.get('CONFIG_%s_HOST' % mod.upper()).strip())
elif mod == 'neutron':
hosts.add(config.get('CONFIG_NEUTRON_SERVER_HOST').strip())
else:
elif config['CONFIG_NOVA_INSTALL'] != 'n':
#In that remote case that we have lot's of nova hosts
hosts.add(config.get('CONFIG_NOVA_API_HOST').strip())
hosts.add(config.get('CONFIG_NOVA_CERT_HOST').strip())
@@ -121,8 +121,7 @@ def createmanifest(config):
hosts.add(config.get('CONFIG_NOVA_CONDUCTOR_HOST').strip())
hosts.add(config.get('CONFIG_NOVA_SCHED_HOST').strip())
if config['CONFIG_NEUTRON_INSTALL'] != 'y':
dbhosts = config['CONFIG_NOVA_NETWORK_HOSTS'].split(',')
dbhosts = set([i.strip() for i in dbhosts if i.strip()])
dbhosts = split_hosts(config['CONFIG_NOVA_NETWORK_HOSTS'])
hosts |= dbhosts
for host in config.get('CONFIG_NOVA_COMPUTE_HOSTS').split(','):
hosts.add(host.strip())

View File

@@ -9,6 +9,7 @@ import uuid
from packstack.installer import utils
from packstack.installer import validators
from packstack.installer.utils import split_hosts
from packstack.modules.ospluginutils import getManifestTemplate, appendManifestFile
@@ -316,20 +317,13 @@ def initSequences(controller):
controller.CONF['CONFIG_NEUTRON_CORE_PLUGIN'] = 'neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2'
global api_hosts, l3_hosts, dhcp_hosts, compute_hosts, meta_hosts, q_hosts
dirty = controller.CONF['CONFIG_NEUTRON_SERVER_HOST'].split(',')
api_hosts = set([i.strip() for i in dirty if i.strip()])
dirty = controller.CONF['CONFIG_NEUTRON_L3_HOSTS'].split(',')
l3_hosts = set([i.strip() for i in dirty if i.strip()])
dirty = controller.CONF['CONFIG_NEUTRON_DHCP_HOSTS'].split(',')
dhcp_hosts = set([i.strip() for i in dirty if i.strip()])
dirty = controller.CONF['CONFIG_NEUTRON_METADATA_HOSTS'].split(',')
meta_hosts = set([i.strip() for i in dirty if i.strip()])
dirty = controller.CONF['CONFIG_NOVA_COMPUTE_HOSTS'].split(',')
compute_hosts = set([i.strip() for i in dirty if i.strip()])
api_hosts = split_hosts(controller.CONF['CONFIG_NEUTRON_SERVER_HOST'])
l3_hosts = split_hosts(controller.CONF['CONFIG_NEUTRON_L3_HOSTS'])
dhcp_hosts = split_hosts(controller.CONF['CONFIG_NEUTRON_DHCP_HOSTS'])
meta_hosts = split_hosts(controller.CONF['CONFIG_NEUTRON_METADATA_HOSTS'])
compute_hosts = set()
if controller.CONF['CONFIG_NOVA_INSTALL'] == 'y':
compute_hosts = split_hosts(controller.CONF['CONFIG_NOVA_COMPUTE_HOSTS'])
q_hosts = api_hosts | l3_hosts | dhcp_hosts | compute_hosts | meta_hosts
neutron_steps = [
@@ -450,7 +444,8 @@ def createL2AgentManifests(config):
def createMetadataManifests(config):
global meta_hosts
if config.get('CONFIG_NOVA_INSTALL') == 'n':
return
for host in meta_hosts:
controller.CONF['CONFIG_NEUTRON_METADATA_HOST'] = host
manifestdata = getManifestTemplate('neutron_metadata.pp')

View File

@@ -72,8 +72,8 @@ def initConfig(controllerObject):
groupDict = { "GROUP_NAME" : "QPIDLANCE",
"DESCRIPTION" : "QPID Config parameters",
"PRE_CONDITION" : "CONFIG_NOVA_INSTALL",
"PRE_CONDITION_MATCH" : "y",
"PRE_CONDITION" : check_enabled,
"PRE_CONDITION_MATCH" : True,
"POST_CONDITION" : False,
"POST_CONDITION_MATCH" : True}
@@ -144,8 +144,8 @@ def initConfig(controllerObject):
groupDict = { "GROUP_NAME" : "QPIDSSL",
"DESCRIPTION" : "QPID Config SSL parameters",
"PRE_CONDITION" : "CONFIG_QPID_ENABLE_SSL",
"PRE_CONDITION_MATCH" : "y",
"PRE_CONDITION" : check_ssl_enabled,
"PRE_CONDITION_MATCH" : True,
"POST_CONDITION" : False,
"POST_CONDITION_MATCH" : True}
@@ -188,11 +188,15 @@ def initConfig(controllerObject):
controller.addGroup(groupDict, paramsList)
def check_ssl_enabled(config):
return check_enabled(config) and config.get('CONFIG_QPID_ENABLE_SSL') == 'y'
def check_enabled(config):
return (config.get('CONFIG_NOVA_INSTALL') == 'y' or
config.get('CONFIG_QPID_HOST') != '')
def initSequences(controller):
# If we don't want Nova we don't need qpid
if controller.CONF['CONFIG_NOVA_INSTALL'] != 'y':
return
qpidsteps = [
{'title': 'Adding QPID manifest entries', 'functions':[createmanifest]}
]

View File

@@ -11,6 +11,7 @@ from packstack.installer import validators
from packstack.installer.exceptions import ParamValidationError
from packstack.installer import basedefs
from packstack.installer import utils
from packstack.installer.utils import split_hosts
from packstack.modules.ospluginutils import getManifestTemplate, appendManifestFile, manifestfiles
@@ -278,13 +279,10 @@ def createstoragemanifest(config):
controller.CONF["SWIFT_STORAGE_DEVICES"] = "'%s'"%devicename
manifestdata = "\n" + getManifestTemplate("swift_loopback.pp")
# Allowed host list for firewall
hosts = set()
for host in config['CONFIG_SWIFT_STORAGE_HOSTS'].split(','):
hosts.add(host.strip())
for host in config['CONFIG_SWIFT_PROXY_HOSTS'].split(','):
hosts.add(host.strip())
for host in config['CONFIG_NOVA_COMPUTE_HOSTS'].split(','):
hosts.add(host.strip())
hosts = split_hosts(config['CONFIG_SWIFT_STORAGE_HOSTS'])
hosts |= split_hosts(config['CONFIG_SWIFT_PROXY_HOSTS'])
if config['CONFIG_NOVA_INSTALL'] == 'y':
hosts |= split_hosts(config['CONFIG_NOVA_COMPUTE_HOSTS'])
config['FIREWALL_ALLOWED'] = ",".join(["'%s'" % i for i in hosts])
# Firewall rules for storage and rsync
config['FIREWALL_SERVICE_NAME'] = "swift storage and rsync"

View File

@@ -0,0 +1,6 @@
group { "nova":
ensure => present,
}
Group['nova'] -> Class['ceilometer']

View File

@@ -4,11 +4,15 @@
$hosts = [ %(FIREWALL_ALLOWED)s ]
define add_allow_host {
$source = $title ? {
'ALL' => '0.0.0.0/0',
default => $title,
}
firewall { "001 %(FIREWALL_SERVICE_NAME)s incoming ${title}":
proto => 'tcp',
dport => [%(FIREWALL_PORTS)s],
action => 'accept',
source => $title,
source => $source,
}
}