Refactor scaling and monitoring policies in Tacker

1. scaling and monitoring policy nodes got failed

From tosca-parser 0.8.0, tosca nodes required to be validated.
Unfortunately, the scaling and monitoring policies are not fully
leveraged tosca-parser. This patch will fix this issue.

2. Multiple alarm actions support

Closes-bug: #1682098

Change-Id: I29cb35edfe2447628fa93c64583e5cb4f7bee2f8
This commit is contained in:
doantungbk
2017-05-04 10:58:06 -07:00
parent 9677abff15
commit af7d3d7cb1
35 changed files with 526 additions and 414 deletions

View File

@@ -14,7 +14,7 @@
from oslo_config import cfg
from oslo_log import log as logging
from oslo_serialization import jsonutils
from six.moves.urllib import parse as urlparse
from six.moves.urllib import parse
from tacker.vnfm.monitor_drivers.token import Token
from tacker import wsgi
# check alarm url with db --> move to plugin
@@ -23,14 +23,12 @@ from tacker import wsgi
LOG = logging.getLogger(__name__)
OPTS = [
cfg.StrOpt('username', default='tacker',
cfg.StrOpt('username', default='admin',
help=_('User name for alarm monitoring')),
cfg.StrOpt('password', default='nomoresecret',
cfg.StrOpt('password', default='devstack',
help=_('password for alarm monitoring')),
cfg.StrOpt('project_name', default='service',
cfg.StrOpt('project_name', default='admin',
help=_('project name for alarm monitoring')),
cfg.StrOpt('url', default='http://localhost:35357/v3',
help=_('url for alarm monitoring')),
]
cfg.CONF.register_opts(OPTS, 'alarm_auth')
@@ -49,10 +47,11 @@ class AlarmReceiver(wsgi.Middleware):
if not self.handle_url(url):
return
prefix, info, params = self.handle_url(req.url)
auth = cfg.CONF.keystone_authtoken
token = Token(username=cfg.CONF.alarm_auth.username,
password=cfg.CONF.alarm_auth.password,
project_name=cfg.CONF.alarm_auth.project_name,
auth_url=cfg.CONF.alarm_auth.url,
auth_url=auth.auth_url + '/v3',
user_domain_name='default',
project_domain_name='default')
@@ -79,14 +78,16 @@ class AlarmReceiver(wsgi.Middleware):
def handle_url(self, url):
# alarm_url = 'http://host:port/v1.0/vnfs/vnf-uuid/mon-policy-name/action-name/8ef785' # noqa
parts = urlparse.urlparse(url)
parts = parse.urlparse(url)
p = parts.path.split('/')
if len(p) != 7:
return None
if any((p[0] != '', p[2] != 'vnfs')):
return None
qs = urlparse.parse_qs(parts.query)
# decode action name: respawn%25log
p[5] = parse.unquote(p[5])
qs = parse.parse_qs(parts.query)
params = dict((k, v[0]) for k, v in qs.items())
prefix_url = '/%(collec)s/%(vnf_uuid)s/' % {'collec': p[2],
'vnf_uuid': p[3]}