Merge "Implement tiller gRPC channel clean up"

This commit is contained in:
Zuul 2018-11-13 15:26:38 +00:00 committed by Gerrit Code Review
commit d963b2e4df
33 changed files with 528 additions and 515 deletions

View File

@ -23,6 +23,8 @@ import falcon
from oslo_config import cfg
from oslo_log import log as logging
from armada.handlers.tiller import Tiller
CONF = cfg.CONF
@ -107,6 +109,19 @@ class BaseResource(object):
def error(self, ctx, msg):
self.log_error(ctx, log.ERROR, msg)
def get_tiller(self, req, resp):
dry_run = req.get_param_as_bool('dry_run')
tiller_port = req.get_param_as_int('tiller_port') or CONF.tiller_port
tiller_namespace = req.get_param(
'tiller_namespace',
default=CONF.tiller_namespace) or CONF.tiller_namespace
return Tiller(
tiller_host=req.get_param('tiller_host'),
tiller_port=tiller_port,
tiller_namespace=tiller_namespace,
dry_run=dry_run)
class ArmadaRequestContext(object):

View File

@ -16,7 +16,6 @@ import json
import yaml
import falcon
from oslo_config import cfg
from armada import api
from armada.common import policy
@ -25,8 +24,6 @@ from armada.handlers.armada import Armada
from armada.handlers.document import ReferenceResolver
from armada.handlers.override import Override
CONF = cfg.CONF
class Apply(api.BaseResource):
"""Controller for installing and updating charts defined in an Armada
@ -71,31 +68,30 @@ class Apply(api.BaseResource):
message="Request must be in application/x-yaml"
"or application/json")
try:
armada = Armada(
documents,
disable_update_pre=req.get_param_as_bool('disable_update_pre'),
disable_update_post=req.get_param_as_bool(
'disable_update_post'),
enable_chart_cleanup=req.get_param_as_bool(
'enable_chart_cleanup'),
dry_run=req.get_param_as_bool('dry_run'),
force_wait=req.get_param_as_bool('wait'),
timeout=req.get_param_as_int('timeout'),
tiller_host=req.get_param('tiller_host'),
tiller_port=req.get_param_as_int('tiller_port') or
CONF.tiller_port,
tiller_namespace=req.get_param(
'tiller_namespace', default=CONF.tiller_namespace),
target_manifest=req.get_param('target_manifest'))
with self.get_tiller(req, resp) as tiller:
msg = armada.sync()
armada = Armada(
documents,
disable_update_pre=req.get_param_as_bool(
'disable_update_pre'),
disable_update_post=req.get_param_as_bool(
'disable_update_post'),
enable_chart_cleanup=req.get_param_as_bool(
'enable_chart_cleanup'),
dry_run=req.get_param_as_bool('dry_run'),
force_wait=req.get_param_as_bool('wait'),
timeout=req.get_param_as_int('timeout'),
tiller=tiller,
target_manifest=req.get_param('target_manifest'))
resp.body = json.dumps({
'message': msg,
})
msg = armada.sync()
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200
resp.body = json.dumps({
'message': msg,
})
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200
except exceptions.ManifestException as e:
self.return_error(resp, falcon.HTTP_400, message=str(e))
except Exception as e:

View File

@ -19,7 +19,6 @@ from oslo_config import cfg
from armada import api
from armada.common import policy
from armada.handlers.tiller import Tiller
CONF = cfg.CONF
@ -33,26 +32,20 @@ class Rollback(api.BaseResource):
try:
dry_run = req.get_param_as_bool('dry_run')
tiller = Tiller(
tiller_host=req.get_param('tiller_host'),
tiller_port=req.get_param_as_int('tiller_port') or
CONF.tiller_port,
tiller_namespace=req.get_param(
'tiller_namespace', default=CONF.tiller_namespace),
dry_run=dry_run)
with self.get_tiller(req, resp) as tiller:
tiller.rollback_release(
release,
req.get_param_as_int('version') or 0,
wait=req.get_param_as_bool('wait'),
timeout=req.get_param_as_int('timeout') or 0,
force=req.get_param_as_bool('force'),
recreate_pods=req.get_param_as_bool('recreate_pods'))
tiller.rollback_release(
release,
req.get_param_as_int('version') or 0,
wait=req.get_param_as_bool('wait'),
timeout=req.get_param_as_int('timeout') or 0,
force=req.get_param_as_bool('force'),
recreate_pods=req.get_param_as_bool('recreate_pods'))
resp.body = json.dumps({
'message': ('(dry run) ' if dry_run else '') +
'Rollback of {} complete.'.format(release),
})
resp.body = json.dumps({
'message': ('(dry run) ' if dry_run else '') +
'Rollback of {} complete.'.format(release),
})
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200

View File

@ -22,7 +22,6 @@ from armada import api
from armada.common import policy
from armada import const
from armada.handlers.test import test_release_for_success
from armada.handlers.tiller import Tiller
from armada.handlers.manifest import Manifest
from armada.utils.release import release_prefixer
from armada.utils import validate
@ -38,24 +37,13 @@ class TestReleasesReleaseNameController(api.BaseResource):
@policy.enforce('armada:test_release')
def on_get(self, req, resp, release):
self.logger.info('RUNNING: %s', release)
try:
tiller = Tiller(
tiller_host=req.get_param('tiller_host'),
tiller_port=req.get_param_as_int('tiller_port') or
CONF.tiller_port,
tiller_namespace=req.get_param(
'tiller_namespace', default=CONF.tiller_namespace))
with self.get_tiller(req, resp) as tiller:
cleanup = req.get_param_as_bool('cleanup')
if cleanup is None:
cleanup = False
success = test_release_for_success(
tiller, release, cleanup=cleanup)
# TODO(fmontei): Provide more sensible exception(s) here.
except Exception as e:
err_message = 'Failed to test {}: {}'.format(release, e)
self.error(req.context, err_message)
return self.return_error(
resp, falcon.HTTP_500, message=err_message)
if success:
msg = {
@ -119,23 +107,10 @@ class TestReleasesManifestController(api.BaseResource):
@policy.enforce('armada:test_manifest')
def on_post(self, req, resp):
# TODO(fmontei): Validation Content-Type is application/x-yaml.
with self.get_tiller(req, resp) as tiller:
return self.handle(req, resp, tiller)
target_manifest = req.get_param('target_manifest', None)
try:
tiller = Tiller(
tiller_host=req.get_param('tiller_host'),
tiller_port=req.get_param_as_int('tiller_port') or
CONF.tiller_port,
tiller_namespace=req.get_param(
'tiller_namespace', default=CONF.tiller_namespace))
# TODO(fmontei): Provide more sensible exception(s) here.
except Exception:
err_message = 'Failed to initialize Tiller handler.'
self.error(req.context, err_message)
return self.return_error(
resp, falcon.HTTP_500, message=err_message)
def handle(self, req, resp, tiller):
try:
documents = self.req_yaml(req, default=[])
except yaml.YAMLError:
@ -143,9 +118,10 @@ class TestReleasesManifestController(api.BaseResource):
return self.return_error(
resp, falcon.HTTP_400, message=err_message)
target_manifest = req.get_param('target_manifest', None)
is_valid = self._validate_documents(req, resp, documents)
if not is_valid:
return resp
return
armada_obj = Manifest(
documents, target_manifest=target_manifest).get_manifest()

View File

@ -20,7 +20,6 @@ from oslo_log import log as logging
from armada import api
from armada.common import policy
from armada.handlers.tiller import Tiller
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
@ -34,27 +33,23 @@ class Status(api.BaseResource):
get tiller status
'''
try:
tiller = Tiller(
tiller_host=req.get_param('tiller_host'),
tiller_port=req.get_param_as_int('tiller_port') or
CONF.tiller_port,
tiller_namespace=req.get_param(
'tiller_namespace', default=CONF.tiller_namespace))
with self.get_tiller(req, resp) as tiller:
LOG.debug('Tiller (Status) at: %s:%s, namespace=%s, '
'timeout=%s', tiller.tiller_host, tiller.tiller_port,
tiller.tiller_namespace, tiller.timeout)
LOG.debug(
'Tiller (Status) at: %s:%s, namespace=%s, '
'timeout=%s', tiller.tiller_host, tiller.tiller_port,
tiller.tiller_namespace, tiller.timeout)
message = {
'tiller': {
'state': tiller.tiller_status(),
'version': tiller.tiller_version()
message = {
'tiller': {
'state': tiller.tiller_status(),
'version': tiller.tiller_version()
}
}
}
resp.status = falcon.HTTP_200
resp.body = json.dumps(message)
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200
resp.body = json.dumps(message)
resp.content_type = 'application/json'
except Exception as e:
err_message = 'Failed to get Tiller Status: {}'.format(e)
@ -69,26 +64,21 @@ class Release(api.BaseResource):
'''Controller for listing Tiller releases.
'''
try:
tiller = Tiller(
tiller_host=req.get_param('tiller_host'),
tiller_port=req.get_param_as_int('tiller_port') or
CONF.tiller_port,
tiller_namespace=req.get_param(
'tiller_namespace', default=CONF.tiller_namespace))
with self.get_tiller(req, resp) as tiller:
LOG.debug(
'Tiller (Release) at: %s:%s, namespace=%s, '
'timeout=%s', tiller.tiller_host, tiller.tiller_port,
tiller.tiller_namespace, tiller.timeout)
LOG.debug(
'Tiller (Release) at: %s:%s, namespace=%s, '
'timeout=%s', tiller.tiller_host, tiller.tiller_port,
tiller.tiller_namespace, tiller.timeout)
releases = {}
for release in tiller.list_releases():
releases.setdefault(release.namespace, [])
releases[release.namespace].append(release.name)
releases = {}
for release in tiller.list_releases():
releases.setdefault(release.namespace, [])
releases[release.namespace].append(release.name)
resp.body = json.dumps({'releases': releases})
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200
resp.body = json.dumps({'releases': releases})
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200
except Exception as e:
err_message = 'Unable to find Tiller Releases: {}'.format(e)

View File

@ -78,8 +78,7 @@ def create(enable_middleware=CONF.middleware):
policy.Enforcer(CONF)
# Error handlers (FILO handling)
api.add_error_handler(exceptions.ArmadaBaseException,
exceptions.default_exception_handler)
api.add_error_handler(Exception, exceptions.default_exception_handler)
api.add_error_handler(exceptions.ArmadaAPIException,
exceptions.ArmadaAPIException.handle)

View File

@ -21,6 +21,7 @@ from armada.cli import CliAction
from armada.exceptions.source_exceptions import InvalidPathException
from armada.handlers.armada import Armada
from armada.handlers.document import ReferenceResolver
from armada.handlers.tiller import Tiller
CONF = cfg.CONF
@ -198,23 +199,26 @@ class ApplyManifest(CliAction):
return
if not self.ctx.obj.get('api', False):
armada = Armada(
documents,
disable_update_pre=self.disable_update_pre,
disable_update_post=self.disable_update_post,
enable_chart_cleanup=self.enable_chart_cleanup,
dry_run=self.dry_run,
set_ovr=self.set,
force_wait=self.wait,
timeout=self.timeout,
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace,
values=self.values,
target_manifest=self.target_manifest)
with Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace,
dry_run=self.dry_run) as tiller:
armada = Armada(
documents,
disable_update_pre=self.disable_update_pre,
disable_update_post=self.disable_update_post,
enable_chart_cleanup=self.enable_chart_cleanup,
dry_run=self.dry_run,
set_ovr=self.set,
force_wait=self.wait,
timeout=self.timeout,
tiller=tiller,
values=self.values,
target_manifest=self.target_manifest)
resp = armada.sync()
self.output(resp)
resp = armada.sync()
self.output(resp)
else:
if len(self.values) > 0:
self.logger.error(

View File

@ -88,8 +88,12 @@ class DeleteChartManifest(CliAction):
self.tiller_port = tiller_port
def invoke(self):
tiller = Tiller(
tiller_host=self.tiller_host, tiller_port=self.tiller_port)
with Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port) as tiller:
self.handle(tiller)
def handle(self, tiller):
known_release_names = [release[0] for release in tiller.list_charts()]
if self.releases:

View File

@ -110,21 +110,21 @@ class Rollback(CliAction):
self.recreate_pods = recreate_pods
def invoke(self):
tiller = Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace,
dry_run=self.dry_run)
with Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace,
dry_run=self.dry_run) as tiller:
response = tiller.rollback_release(
self.release,
self.version,
wait=self.wait,
timeout=self.timeout,
force=self.force,
recreate_pods=self.recreate_pods)
response = tiller.rollback_release(
self.release,
self.version,
wait=self.wait,
timeout=self.timeout,
force=self.force,
recreate_pods=self.recreate_pods)
self.output(response)
self.output(response)
def output(self, response):
self.logger.info(('(dry run) ' if self.dry_run else '') +

View File

@ -105,10 +105,14 @@ class TestChartManifest(CliAction):
self.cleanup = cleanup
def invoke(self):
tiller = Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace)
with Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace) as tiller:
self.handle(tiller)
def handle(self, tiller):
known_release_names = [release[0] for release in tiller.list_charts()]
if self.release:

View File

@ -84,11 +84,14 @@ class TillerServices(CliAction):
def invoke(self):
tiller = Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace)
with Tiller(
tiller_host=self.tiller_host,
tiller_port=self.tiller_port,
tiller_namespace=self.tiller_namespace) as tiller:
self.handle(tiller)
def handle(self, tiller):
if self.status:
if not self.ctx.obj.get('api', False):
self.logger.info('Tiller Service: %s', tiller.tiller_status())

View File

@ -165,7 +165,7 @@ def default_exception_handler(ex, req, resp, params):
else:
# take care of the uncaught stuff
exc_string = traceback.format_exc()
logging.error('Unhanded Exception being handled: \n%s', exc_string)
LOG.error('Unhanded Exception being handled: \n%s', exc_string)
format_error_resp(
req,
resp,

View File

@ -26,7 +26,6 @@ from armada.exceptions import validate_exceptions
from armada.handlers.chart_deploy import ChartDeploy
from armada.handlers.manifest import Manifest
from armada.handlers.override import Override
from armada.handlers.tiller import Tiller
from armada.utils.release import release_prefixer
from armada.utils import source
@ -42,6 +41,7 @@ class Armada(object):
def __init__(self,
documents,
tiller,
disable_update_pre=False,
disable_update_post=False,
enable_chart_cleanup=False,
@ -49,9 +49,6 @@ class Armada(object):
set_ovr=None,
force_wait=False,
timeout=None,
tiller_host=None,
tiller_port=None,
tiller_namespace=None,
values=None,
target_manifest=None,
k8s_wait_attempts=1,
@ -60,6 +57,7 @@ class Armada(object):
Initialize the Armada engine and establish a connection to Tiller.
:param List[dict] documents: Armada documents.
:param tiller: Tiller instance to use.
:param bool disable_update_pre: Disable pre-update Tiller operations.
:param bool disable_update_post: Disable post-update Tiller
operations.
@ -69,11 +67,6 @@ class Armada(object):
deployed, rather than using each chart's specified wait policy.
:param int timeout: Specifies overall time in seconds that Tiller
should wait for charts until timing out.
:param str tiller_host: Tiller host IP. Default is None.
:param int tiller_port: Tiller host port. Default is
``CONF.tiller_port``.
:param str tiller_namespace: Tiller host namespace. Default is
``CONF.tiller_namespace``.
:param str target_manifest: The target manifest to run. Useful for
specifying which manifest to run when multiple are available.
:param int k8s_wait_attempts: The number of times to attempt waiting
@ -81,19 +74,11 @@ class Armada(object):
:param int k8s_wait_attempt_sleep: The time in seconds to sleep
between attempts.
'''
tiller_port = tiller_port or CONF.tiller_port
tiller_namespace = tiller_namespace or CONF.tiller_namespace
self.enable_chart_cleanup = enable_chart_cleanup
self.dry_run = dry_run
self.force_wait = force_wait
# TODO: Use dependency injection i.e. pass in a Tiller instead of
# creating it here.
self.tiller = Tiller(
tiller_host=tiller_host,
tiller_port=tiller_port,
tiller_namespace=tiller_namespace,
dry_run=dry_run)
self.tiller = tiller
try:
self.documents = Override(
documents, overrides=set_ovr,

View File

@ -80,12 +80,11 @@ class Tiller(object):
tiller_host=None,
tiller_port=None,
tiller_namespace=None,
dry_run=False):
dry_run=None):
self.tiller_host = tiller_host
self.tiller_port = tiller_port or CONF.tiller_port
self.tiller_namespace = tiller_namespace or CONF.tiller_namespace
self.dry_run = dry_run
self.dry_run = dry_run or False
# init k8s connectivity
self.k8s = K8s()
@ -818,3 +817,14 @@ class Tiller(object):
'using default %ss.', self.timeout)
timeout = self.timeout
return timeout
def close(self):
# Ensure channel was actually initialized before closing
if getattr(self, 'channel', None):
self.channel.close()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.close()

View File

@ -17,6 +17,7 @@ import mock
from oslo_config import cfg
from armada import api
from armada.api.controller import armada as armada_api
from armada.common.policies import base as policy_base
from armada.tests import test_utils
@ -27,9 +28,11 @@ CONF = cfg.CONF
class ArmadaControllerTest(base.BaseControllerTest):
@mock.patch.object(api, 'Tiller')
@mock.patch.object(armada_api, 'Armada')
@mock.patch.object(armada_api, 'ReferenceResolver')
def test_armada_apply_resource(self, mock_resolver, mock_armada):
def test_armada_apply_resource(self, mock_resolver, mock_armada,
mock_tiller):
"""Tests the POST /api/v1.0/apply endpoint."""
rules = {'armada:create_endpoints': '@'}
self.policy.set_rules(rules)
@ -45,6 +48,9 @@ class ArmadaControllerTest(base.BaseControllerTest):
'timeout': '100'
}
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
expected_armada_options = {
'disable_update_pre': False,
'disable_update_post': False,
@ -52,9 +58,7 @@ class ArmadaControllerTest(base.BaseControllerTest):
'dry_run': False,
'force_wait': False,
'timeout': 100,
'tiller_host': None,
'tiller_port': 44134,
'tiller_namespace': 'kube-system',
'tiller': m_tiller,
'target_manifest': None
}
@ -83,6 +87,13 @@ class ArmadaControllerTest(base.BaseControllerTest):
}], **expected_armada_options)
mock_armada.return_value.sync.assert_called()
mock_tiller.assert_called_with(
tiller_host=None,
tiller_port=44134,
tiller_namespace='kube-system',
dry_run=False)
m_tiller.__exit__.assert_called()
def test_armada_apply_no_href(self):
"""Tests /api/v1.0/apply returns 400 when hrefs list is empty."""
rules = {'armada:create_endpoints': '@'}

View File

@ -16,7 +16,7 @@ import json
import mock
from armada.api.controller import rollback
from armada import api
from armada.common.policies import base as policy_base
from armada.tests import test_utils
from armada.tests.unit.api import base
@ -24,12 +24,14 @@ from armada.tests.unit.api import base
class RollbackReleaseControllerTest(base.BaseControllerTest):
@mock.patch.object(rollback, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_rollback_controller_pass(self, mock_tiller):
rules = {'armada:rollback_release': '@'}
self.policy.set_rules(rules)
rollback_release = mock_tiller.return_value.rollback_release
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
rollback_release = m_tiller.rollback_release
rollback_release.return_value = None
tiller_host = 'host'
@ -69,12 +71,13 @@ class RollbackReleaseControllerTest(base.BaseControllerTest):
self.assertEqual(200, resp.status_code)
self.assertEqual('Rollback of test-release complete.',
json.loads(resp.text)['message'])
m_tiller.__exit__.assert_called()
@test_utils.attr(type=['negative'])
class RollbackReleaseControllerNegativeTest(base.BaseControllerTest):
@mock.patch.object(rollback, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_rollback_controller_tiller_exc_return_500(self, mock_tiller):
rules = {'armada:rollback_release': '@'}
self.policy.set_rules(rules)

View File

@ -18,6 +18,7 @@ import yaml
import mock
from armada import api
from armada.api.controller import test
from armada.common.policies import base as policy_base
from armada.exceptions import manifest_exceptions
@ -28,7 +29,7 @@ from armada.tests.unit.api import base
class TestReleasesManifestControllerTest(base.BaseControllerTest):
@mock.patch.object(test, 'Manifest')
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_test_controller_with_manifest(self, mock_tiller, mock_manifest):
rules = {'armada:test_manifest': '@'}
self.policy.set_rules(rules)
@ -41,6 +42,9 @@ class TestReleasesManifestControllerTest(base.BaseControllerTest):
payload = f.read()
documents = list(yaml.safe_load_all(payload))
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
resp = self.app.simulate_post('/api/v1.0/tests', body=payload)
self.assertEqual(200, resp.status_code)
@ -49,13 +53,14 @@ class TestReleasesManifestControllerTest(base.BaseControllerTest):
self.assertEqual(expected, result)
mock_manifest.assert_called_once_with(documents, target_manifest=None)
self.assertTrue(mock_tiller.called)
mock_tiller.assert_called()
m_tiller.__exit__.assert_called()
class TestReleasesReleaseNameControllerTest(base.BaseControllerTest):
@mock.patch.object(test, 'test_release_for_success')
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_test_controller_test_pass(self, mock_tiller,
mock_test_release_for_success):
rules = {'armada:test_release': '@'}
@ -63,6 +68,9 @@ class TestReleasesReleaseNameControllerTest(base.BaseControllerTest):
mock_test_release_for_success.return_value = True
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
release = 'fake-release'
resp = self.app.simulate_get('/api/v1.0/test/{}'.format(release))
mock_test_release_for_success.assert_has_calls(
@ -70,44 +78,53 @@ class TestReleasesReleaseNameControllerTest(base.BaseControllerTest):
self.assertEqual(200, resp.status_code)
self.assertEqual('MESSAGE: Test Pass',
json.loads(resp.text)['message'])
m_tiller.__exit__.assert_called()
@mock.patch.object(test, 'test_release_for_success')
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_test_controller_test_fail(self, mock_tiller,
mock_test_release_for_success):
rules = {'armada:test_release': '@'}
self.policy.set_rules(rules)
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
mock_test_release_for_success.return_value = False
release = 'fake-release'
resp = self.app.simulate_get('/api/v1.0/test/{}'.format(release))
self.assertEqual(200, resp.status_code)
self.assertEqual('MESSAGE: Test Fail',
json.loads(resp.text)['message'])
m_tiller.__exit__.assert_called()
@mock.patch.object(test, 'test_release_for_success')
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_test_controller_cleanup(self, mock_tiller,
mock_test_release_for_success):
rules = {'armada:test_release': '@'}
self.policy.set_rules(rules)
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
mock_test_release_for_success.return_value = True
release = 'fake-release'
resp = self.app.simulate_get(
'/api/v1.0/test/{}'.format(release), query_string='cleanup=true')
mock_test_release_for_success.assert_has_calls(
[mock.call(mock_tiller.return_value, release, cleanup=True)])
[mock.call(m_tiller, release, cleanup=True)])
self.assertEqual(200, resp.status_code)
self.assertEqual('MESSAGE: Test Pass',
json.loads(resp.text)['message'])
m_tiller.__exit__.assert_called()
@test_utils.attr(type=['negative'])
class TestReleasesManifestControllerNegativeTest(base.BaseControllerTest):
@mock.patch.object(test, 'Manifest')
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
@mock.patch.object(test, 'test_release_for_success')
def test_test_controller_tiller_exc_returns_500(
self, mock_test_release_for_success, mock_tiller, _):
@ -121,8 +138,9 @@ class TestReleasesManifestControllerNegativeTest(base.BaseControllerTest):
self.assertEqual(500, resp.status_code)
@mock.patch.object(test, 'Manifest')
@mock.patch.object(test, 'Tiller')
def test_test_controller_validation_failure_returns_400(self, *_):
@mock.patch.object(api, 'Tiller')
def test_test_controller_validation_failure_returns_400(
self, mock_tiller, mock_manifest):
rules = {'armada:test_manifest': '@'}
self.policy.set_rules(rules)
@ -138,6 +156,9 @@ class TestReleasesManifestControllerNegativeTest(base.BaseControllerTest):
resp = self.app.simulate_post('/api/v1.0/tests', body=invalid_payload)
self.assertEqual(400, resp.status_code)
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
resp_body = json.loads(resp.text)
self.assertEqual(400, resp_body['code'])
self.assertEqual(1, resp_body['details']['errorCount'])
@ -158,11 +179,12 @@ class TestReleasesManifestControllerNegativeTest(base.BaseControllerTest):
}, resp_body['details']['messageList'])
self.assertEqual(('Failed to validate documents or generate Armada '
'Manifest from documents.'), resp_body['message'])
m_tiller.__exit__.assert_called()
@mock.patch('armada.utils.validate.Manifest')
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_test_controller_manifest_failure_returns_400(
self, _, mock_manifest):
self, mock_tiller, mock_manifest):
rules = {'armada:test_manifest': '@'}
self.policy.set_rules(rules)
@ -177,6 +199,9 @@ class TestReleasesManifestControllerNegativeTest(base.BaseControllerTest):
resp = self.app.simulate_post('/api/v1.0/tests', body=payload)
self.assertEqual(400, resp.status_code)
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
resp_body = json.loads(resp.text)
self.assertEqual(400, resp_body['code'])
self.assertEqual(1, resp_body['details']['errorCount'])
@ -195,12 +220,13 @@ class TestReleasesManifestControllerNegativeTest(base.BaseControllerTest):
}], resp_body['details']['messageList'])
self.assertEqual(('Failed to validate documents or generate Armada '
'Manifest from documents.'), resp_body['message'])
m_tiller.__exit__.assert_called()
@test_utils.attr(type=['negative'])
class TestReleasesReleaseNameControllerNegativeTest(base.BaseControllerTest):
@mock.patch.object(test, 'Tiller')
@mock.patch.object(api, 'Tiller')
@mock.patch.object(test, 'test_release_for_success')
def test_test_controller_tiller_exc_returns_500(
self, mock_test_release_for_success, mock_tiller):

View File

@ -16,7 +16,7 @@ import mock
from oslo_config import cfg
from armada.api.controller import tiller as tiller_controller
from armada import api
from armada.common.policies import base as policy_base
from armada.tests import test_utils
from armada.tests.unit.api import base
@ -26,14 +26,16 @@ CONF = cfg.CONF
class TillerControllerTest(base.BaseControllerTest):
@mock.patch.object(tiller_controller, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_get_tiller_status(self, mock_tiller):
"""Tests GET /api/v1.0/status endpoint."""
rules = {'tiller:get_status': '@'}
self.policy.set_rules(rules)
mock_tiller.return_value.tiller_status.return_value = 'fake_status'
mock_tiller.return_value.tiller_version.return_value = 'fake_version'
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
m_tiller.tiller_status.return_value = 'fake_status'
m_tiller.tiller_version.return_value = 'fake_version'
result = self.app.simulate_get('/api/v1.0/status')
expected = {
@ -48,16 +50,20 @@ class TillerControllerTest(base.BaseControllerTest):
mock_tiller.assert_called_once_with(
tiller_host=None,
tiller_port=44134,
tiller_namespace='kube-system')
tiller_namespace='kube-system',
dry_run=None)
m_tiller.__exit__.assert_called()
@mock.patch.object(tiller_controller, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_get_tiller_status_with_params(self, mock_tiller):
"""Tests GET /api/v1.0/status endpoint with query parameters."""
rules = {'tiller:get_status': '@'}
self.policy.set_rules(rules)
mock_tiller.return_value.tiller_status.return_value = 'fake_status'
mock_tiller.return_value.tiller_version.return_value = 'fake_version'
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
m_tiller.tiller_status.return_value = 'fake_status'
m_tiller.tiller_version.return_value = 'fake_version'
result = self.app.simulate_get(
'/api/v1.0/status',
@ -79,9 +85,11 @@ class TillerControllerTest(base.BaseControllerTest):
mock_tiller.assert_called_once_with(
tiller_host='fake_host',
tiller_port=98765,
tiller_namespace='fake_ns')
tiller_namespace='fake_ns',
dry_run=None)
m_tiller.__exit__.assert_called()
@mock.patch.object(tiller_controller, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_tiller_releases(self, mock_tiller):
"""Tests GET /api/v1.0/releases endpoint."""
rules = {'tiller:get_release': '@'}
@ -92,7 +100,9 @@ class TillerControllerTest(base.BaseControllerTest):
fake_release.configure_mock(name=name)
return fake_release
mock_tiller.return_value.list_releases.return_value = [
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
m_tiller.list_releases.return_value = [
_get_fake_release('foo', 'bar'),
_get_fake_release('baz', 'qux')
]
@ -109,10 +119,12 @@ class TillerControllerTest(base.BaseControllerTest):
mock_tiller.assert_called_once_with(
tiller_host=None,
tiller_port=44134,
tiller_namespace='kube-system')
mock_tiller.return_value.list_releases.assert_called_once_with()
tiller_namespace='kube-system',
dry_run=None)
m_tiller.list_releases.assert_called_once_with()
m_tiller.__exit__.assert_called()
@mock.patch.object(tiller_controller, 'Tiller')
@mock.patch.object(api, 'Tiller')
def test_tiller_releases_with_params(self, mock_tiller):
"""Tests GET /api/v1.0/releases endpoint with query parameters."""
rules = {'tiller:get_release': '@'}
@ -123,7 +135,9 @@ class TillerControllerTest(base.BaseControllerTest):
fake_release.configure_mock(name=name)
return fake_release
mock_tiller.return_value.list_releases.return_value = [
m_tiller = mock_tiller.return_value
m_tiller.__enter__.return_value = m_tiller
m_tiller.list_releases.return_value = [
_get_fake_release('foo', 'bar'),
_get_fake_release('baz', 'qux')
]
@ -147,8 +161,10 @@ class TillerControllerTest(base.BaseControllerTest):
mock_tiller.assert_called_once_with(
tiller_host='fake_host',
tiller_port=98765,
tiller_namespace='fake_ns')
mock_tiller.return_value.list_releases.assert_called_once_with()
tiller_namespace='fake_ns',
dry_run=None)
m_tiller.list_releases.assert_called_once_with()
m_tiller.__exit__.assert_called()
class TillerControllerNegativeRbacTest(base.BaseControllerTest):

View File

@ -281,24 +281,18 @@ class ArmadaHandlerTestCase(base.ArmadaTestCase):
self.assertEqual(expected_config, armada_obj.manifest)
@mock.patch.object(armada, 'source')
@mock.patch('armada.handlers.armada.Tiller')
def test_pre_flight_ops(self, mock_tiller, mock_source):
def test_pre_flight_ops(self, mock_source):
"""Test pre-flight checks and operations."""
yaml_documents = list(yaml.safe_load_all(TEST_YAML))
armada_obj = armada.Armada(yaml_documents)
m_tiller = mock.Mock()
m_tiller.tiller_status.return_value = True
armada_obj = armada.Armada(yaml_documents, m_tiller)
# Mock methods called by `pre_flight_ops()`.
m_tiller = mock_tiller.return_value
m_tiller.tiller_status.return_value = True
mock_source.git_clone.return_value = CHART_SOURCES[0][0]
self._test_pre_flight_ops(armada_obj)
mock_tiller.assert_called_once_with(
tiller_host=None,
tiller_namespace='kube-system',
tiller_port=44134,
dry_run=False)
mock_source.git_clone.assert_called_once_with(
'git://github.com/dummy/armada',
'master',
@ -306,17 +300,17 @@ class ArmadaHandlerTestCase(base.ArmadaTestCase):
proxy_server=None)
@mock.patch.object(armada, 'source')
@mock.patch('armada.handlers.armada.Tiller')
def test_post_flight_ops(self, mock_tiller, mock_source):
def test_post_flight_ops(self, mock_source):
"""Test post-flight operations."""
yaml_documents = list(yaml.safe_load_all(TEST_YAML))
armada_obj = armada.Armada(yaml_documents)
# Mock methods called by `pre_flight_ops()`.
m_tiller = mock_tiller.return_value
m_tiller = mock.Mock()
m_tiller.tiller_status.return_value = True
mock_source.git_clone.return_value = CHART_SOURCES[0][0]
armada_obj = armada.Armada(yaml_documents, m_tiller)
self._test_pre_flight_ops(armada_obj)
armada_obj.post_flight_ops()
@ -343,22 +337,22 @@ class ArmadaHandlerTestCase(base.ArmadaTestCase):
@mock.patch.object(armada.Armada, 'post_flight_ops')
@mock.patch.object(armada.Armada, 'pre_flight_ops')
@mock.patch('armada.handlers.chart_deploy.ChartBuilder')
@mock.patch('armada.handlers.armada.Tiller')
@mock.patch.object(chart_deploy, 'test_release_for_success')
def _do_test(mock_test_release_for_success, mock_tiller,
mock_chartbuilder, mock_pre_flight, mock_post_flight):
def _do_test(mock_test_release_for_success, mock_chartbuilder,
mock_pre_flight, mock_post_flight):
# Instantiate Armada object.
yaml_documents = list(yaml.safe_load_all(TEST_YAML))
armada_obj = armada.Armada(yaml_documents)
m_tiller = mock.MagicMock()
m_tiller.list_releases.return_value = known_releases
armada_obj = armada.Armada(yaml_documents, m_tiller)
armada_obj.chart_deploy.get_diff = mock.Mock()
chart_group = armada_obj.manifest['armada']['chart_groups'][0]
charts = chart_group['chart_group']
cg_test_all_charts = chart_group.get('test_charts', True)
m_tiller = mock_tiller.return_value
m_tiller.list_releases.return_value = known_releases
if test_failure_to_run:
def fail(tiller, release, timeout=None, cleanup=False):
@ -663,30 +657,26 @@ class ArmadaHandlerTestCase(base.ArmadaTestCase):
class ArmadaNegativeHandlerTestCase(base.ArmadaTestCase):
@mock.patch.object(armada, 'source')
@mock.patch('armada.handlers.armada.Tiller')
def test_armada_get_manifest_exception(self, mock_tiller, mock_source):
def test_armada_get_manifest_exception(self, mock_source):
"""Test armada handling with invalid manifest."""
yaml_documents = list(yaml.safe_load_all(TEST_YAML))
error_re = ('Documents must be a list of documents with at least one '
'of each of the following schemas: .*')
self.assertRaisesRegexp(ManifestException, error_re, armada.Armada,
yaml_documents[:1])
yaml_documents[:1], mock.MagicMock())
@mock.patch.object(armada, 'source')
@mock.patch('armada.handlers.armada.Tiller')
def test_armada_override_exception(self, mock_tiller, mock_source):
def test_armada_override_exception(self, mock_source):
"""Test Armada checks with invalid chart override."""
yaml_documents = list(yaml.safe_load_all(TEST_YAML))
override = ('chart:example-chart-2:name=' 'overridden', )
error_re = ('is not a valid override statement')
with self.assertRaisesRegexp(InvalidOverrideValueException, error_re):
armada.Armada(yaml_documents, set_ovr=override)
armada.Armada(yaml_documents, mock.MagicMock(), set_ovr=override)
@mock.patch.object(armada, 'source')
@mock.patch('armada.handlers.armada.Tiller')
def test_armada_manifest_exception_override_none(self, mock_tiller,
mock_source):
def test_armada_manifest_exception_override_none(self, mock_source):
"""Test Armada checks with invalid manifest."""
yaml_documents = list(yaml.safe_load_all(TEST_YAML))
example_document = [
@ -697,4 +687,4 @@ class ArmadaNegativeHandlerTestCase(base.ArmadaTestCase):
error_re = ('Invalid document .*')
with self.assertRaisesRegexp(InvalidManifestException, error_re):
armada.Armada(yaml_documents, set_ovr=None)
armada.Armada(yaml_documents, mock.MagicMock(), set_ovr=None)

View File

@ -33,7 +33,7 @@ class TillerTestCase(base.ArmadaTestCase):
def test_install_release(self, mock_stub, mock_install_request,
mock_config, mock_grpc, mock_k8s, mock_ip):
# instantiate Tiller object
mock_grpc.insecure_channel.return_value = None
mock_grpc.insecure_channel.return_value = mock.Mock()
mock_ip.return_value = '0.0.0.0'
tiller_obj = tiller.Tiller()
assert tiller_obj._get_tiller_ip() == '0.0.0.0'
@ -74,12 +74,14 @@ class TillerTestCase(base.ArmadaTestCase):
mock_port.return_value = mock.sentinel.port
mock_ip.return_value = mock.sentinel.ip
mock_channel = mock.Mock()
# instantiate Tiller object
mock_grpc.insecure_channel.return_value = 'connected'
mock_grpc.insecure_channel.return_value = mock_channel
tiller_obj = tiller.Tiller()
self.assertIsNotNone(tiller_obj.channel)
self.assertEqual('connected', tiller_obj.channel)
self.assertEqual(mock_channel, tiller_obj.channel)
mock_grpc.insecure_channel.assert_called_once_with(
'%s:%s' % (str(mock.sentinel.ip), str(mock.sentinel.port)),

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -23,6 +22,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/chart.proto',
package='hapi.chart',
syntax='proto3',
serialized_options=_b('Z\005chart'),
serialized_pb=_b('\n\x16hapi/chart/chart.proto\x12\nhapi.chart\x1a\x17hapi/chart/config.proto\x1a\x19hapi/chart/metadata.proto\x1a\x19hapi/chart/template.proto\x1a\x19google/protobuf/any.proto\"\xca\x01\n\x05\x43hart\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.hapi.chart.Metadata\x12\'\n\ttemplates\x18\x02 \x03(\x0b\x32\x14.hapi.chart.Template\x12\'\n\x0c\x64\x65pendencies\x18\x03 \x03(\x0b\x32\x11.hapi.chart.Chart\x12\"\n\x06values\x18\x04 \x01(\x0b\x32\x12.hapi.chart.Config\x12#\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x14.google.protobuf.AnyB\x07Z\x05\x63hartb\x06proto3')
,
dependencies=[hapi_dot_chart_dot_config__pb2.DESCRIPTOR,hapi_dot_chart_dot_metadata__pb2.DESCRIPTOR,hapi_dot_chart_dot_template__pb2.DESCRIPTOR,google_dot_protobuf_dot_any__pb2.DESCRIPTOR,])
@ -43,42 +43,42 @@ _CHART = _descriptor.Descriptor(
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='templates', full_name='hapi.chart.Chart.templates', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dependencies', full_name='hapi.chart.Chart.dependencies', index=2,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='values', full_name='hapi.chart.Chart.values', index=3,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='files', full_name='hapi.chart.Chart.files', index=4,
number=5, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -104,6 +104,5 @@ Chart = _reflection.GeneratedProtocolMessageType('Chart', (_message.Message,), d
_sym_db.RegisterMessage(Chart)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -19,6 +18,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/config.proto',
package='hapi.chart',
syntax='proto3',
serialized_options=_b('Z\005chart'),
serialized_pb=_b('\n\x17hapi/chart/config.proto\x12\nhapi.chart\"\x87\x01\n\x06\x43onfig\x12\x0b\n\x03raw\x18\x01 \x01(\t\x12.\n\x06values\x18\x02 \x03(\x0b\x32\x1e.hapi.chart.Config.ValuesEntry\x1a@\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.hapi.chart.Value:\x02\x38\x01\"\x16\n\x05Value\x12\r\n\x05value\x18\x01 \x01(\tB\x07Z\x05\x63hartb\x06proto3')
)
@ -38,21 +38,21 @@ _CONFIG_VALUESENTRY = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='hapi.chart.Config.ValuesEntry.value', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
serialized_options=_b('8\001'),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -75,21 +75,21 @@ _CONFIG = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='values', full_name='hapi.chart.Config.values', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_CONFIG_VALUESENTRY, ],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -113,14 +113,14 @@ _VALUE = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -160,8 +160,6 @@ Value = _reflection.GeneratedProtocolMessageType('Value', (_message.Message,), d
_sym_db.RegisterMessage(Value)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
_CONFIG_VALUESENTRY.has_options = True
_CONFIG_VALUESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
DESCRIPTOR._options = None
_CONFIG_VALUESENTRY._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -19,6 +18,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/metadata.proto',
package='hapi.chart',
syntax='proto3',
serialized_options=_b('Z\005chart'),
serialized_pb=_b('\n\x19hapi/chart/metadata.proto\x12\nhapi.chart\"6\n\nMaintainer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\"\xd5\x03\n\x08Metadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04home\x18\x02 \x01(\t\x12\x0f\n\x07sources\x18\x03 \x03(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x10\n\x08keywords\x18\x06 \x03(\t\x12+\n\x0bmaintainers\x18\x07 \x03(\x0b\x32\x16.hapi.chart.Maintainer\x12\x0e\n\x06\x65ngine\x18\x08 \x01(\t\x12\x0c\n\x04icon\x18\t \x01(\t\x12\x12\n\napiVersion\x18\n \x01(\t\x12\x11\n\tcondition\x18\x0b \x01(\t\x12\x0c\n\x04tags\x18\x0c \x01(\t\x12\x12\n\nappVersion\x18\r \x01(\t\x12\x12\n\ndeprecated\x18\x0e \x01(\x08\x12\x15\n\rtillerVersion\x18\x0f \x01(\t\x12:\n\x0b\x61nnotations\x18\x10 \x03(\x0b\x32%.hapi.chart.Metadata.AnnotationsEntry\x12\x13\n\x0bkubeVersion\x18\x11 \x01(\t\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\" \n\x06\x45ngine\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05GOTPL\x10\x01\x42\x07Z\x05\x63hartb\x06proto3')
)
@ -32,15 +32,15 @@ _METADATA_ENGINE = _descriptor.EnumDescriptor(
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='GOTPL', index=1, number=1,
options=None,
serialized_options=None,
type=None),
],
containing_type=None,
options=None,
serialized_options=None,
serialized_start=535,
serialized_end=567,
)
@ -60,28 +60,28 @@ _MAINTAINER = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='email', full_name='hapi.chart.Maintainer.email', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='url', full_name='hapi.chart.Maintainer.url', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -105,21 +105,21 @@ _METADATA_ANNOTATIONSENTRY = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='hapi.chart.Metadata.AnnotationsEntry.value', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
serialized_options=_b('8\001'),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -142,119 +142,119 @@ _METADATA = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='home', full_name='hapi.chart.Metadata.home', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='sources', full_name='hapi.chart.Metadata.sources', index=2,
number=3, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='version', full_name='hapi.chart.Metadata.version', index=3,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='description', full_name='hapi.chart.Metadata.description', index=4,
number=5, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='keywords', full_name='hapi.chart.Metadata.keywords', index=5,
number=6, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='maintainers', full_name='hapi.chart.Metadata.maintainers', index=6,
number=7, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='engine', full_name='hapi.chart.Metadata.engine', index=7,
number=8, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='icon', full_name='hapi.chart.Metadata.icon', index=8,
number=9, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='apiVersion', full_name='hapi.chart.Metadata.apiVersion', index=9,
number=10, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='condition', full_name='hapi.chart.Metadata.condition', index=10,
number=11, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='tags', full_name='hapi.chart.Metadata.tags', index=11,
number=12, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='appVersion', full_name='hapi.chart.Metadata.appVersion', index=12,
number=13, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='deprecated', full_name='hapi.chart.Metadata.deprecated', index=13,
number=14, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='tillerVersion', full_name='hapi.chart.Metadata.tillerVersion', index=14,
number=15, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='annotations', full_name='hapi.chart.Metadata.annotations', index=15,
number=16, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='kubeVersion', full_name='hapi.chart.Metadata.kubeVersion', index=16,
number=17, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@ -262,7 +262,7 @@ _METADATA = _descriptor.Descriptor(
enum_types=[
_METADATA_ENGINE,
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -303,8 +303,6 @@ _sym_db.RegisterMessage(Metadata)
_sym_db.RegisterMessage(Metadata.AnnotationsEntry)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
_METADATA_ANNOTATIONSENTRY.has_options = True
_METADATA_ANNOTATIONSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
DESCRIPTOR._options = None
_METADATA_ANNOTATIONSENTRY._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -19,6 +18,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/template.proto',
package='hapi.chart',
syntax='proto3',
serialized_options=_b('Z\005chart'),
serialized_pb=_b('\n\x19hapi/chart/template.proto\x12\nhapi.chart\"&\n\x08Template\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x42\x07Z\x05\x63hartb\x06proto3')
)
@ -38,21 +38,21 @@ _TEMPLATE = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='data', full_name='hapi.chart.Template.data', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -73,6 +73,5 @@ Template = _reflection.GeneratedProtocolMessageType('Template', (_message.Messag
_sym_db.RegisterMessage(Template)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -20,6 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/hook.proto',
package='hapi.release',
syntax='proto3',
serialized_options=_b('Z\007release'),
serialized_pb=_b('\n\x17hapi/release/hook.proto\x12\x0chapi.release\x1a\x1fgoogle/protobuf/timestamp.proto\"\x91\x04\n\x04Hook\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\x12\x10\n\x08manifest\x18\x04 \x01(\t\x12(\n\x06\x65vents\x18\x05 \x03(\x0e\x32\x18.hapi.release.Hook.Event\x12,\n\x08last_run\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0e\n\x06weight\x18\x07 \x01(\x05\x12\x38\n\x0f\x64\x65lete_policies\x18\x08 \x03(\x0e\x32\x1f.hapi.release.Hook.DeletePolicy\"\xe5\x01\n\x05\x45vent\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0bPRE_INSTALL\x10\x01\x12\x10\n\x0cPOST_INSTALL\x10\x02\x12\x0e\n\nPRE_DELETE\x10\x03\x12\x0f\n\x0bPOST_DELETE\x10\x04\x12\x0f\n\x0bPRE_UPGRADE\x10\x05\x12\x10\n\x0cPOST_UPGRADE\x10\x06\x12\x10\n\x0cPRE_ROLLBACK\x10\x07\x12\x11\n\rPOST_ROLLBACK\x10\x08\x12\x18\n\x14RELEASE_TEST_SUCCESS\x10\t\x12\x18\n\x14RELEASE_TEST_FAILURE\x10\n\x12\x0f\n\x0b\x43RD_INSTALL\x10\x0b\"C\n\x0c\x44\x65letePolicy\x12\r\n\tSUCCEEDED\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x18\n\x14\x42\x45\x46ORE_HOOK_CREATION\x10\x02\x42\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
@ -34,55 +34,55 @@ _HOOK_EVENT = _descriptor.EnumDescriptor(
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_INSTALL', index=1, number=1,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_INSTALL', index=2, number=2,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_DELETE', index=3, number=3,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_DELETE', index=4, number=4,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_UPGRADE', index=5, number=5,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_UPGRADE', index=6, number=6,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_ROLLBACK', index=7, number=7,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_ROLLBACK', index=8, number=8,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='RELEASE_TEST_SUCCESS', index=9, number=9,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='RELEASE_TEST_FAILURE', index=10, number=10,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='CRD_INSTALL', index=11, number=11,
options=None,
serialized_options=None,
type=None),
],
containing_type=None,
options=None,
serialized_options=None,
serialized_start=306,
serialized_end=535,
)
@ -96,19 +96,19 @@ _HOOK_DELETEPOLICY = _descriptor.EnumDescriptor(
values=[
_descriptor.EnumValueDescriptor(
name='SUCCEEDED', index=0, number=0,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='FAILED', index=1, number=1,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='BEFORE_HOOK_CREATION', index=2, number=2,
options=None,
serialized_options=None,
type=None),
],
containing_type=None,
options=None,
serialized_options=None,
serialized_start=537,
serialized_end=604,
)
@ -128,56 +128,56 @@ _HOOK = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='kind', full_name='hapi.release.Hook.kind', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='path', full_name='hapi.release.Hook.path', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='manifest', full_name='hapi.release.Hook.manifest', index=3,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='events', full_name='hapi.release.Hook.events', index=4,
number=5, type=14, cpp_type=8, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='last_run', full_name='hapi.release.Hook.last_run', index=5,
number=6, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='weight', full_name='hapi.release.Hook.weight', index=6,
number=7, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='delete_policies', full_name='hapi.release.Hook.delete_policies', index=7,
number=8, type=14, cpp_type=8, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@ -186,7 +186,7 @@ _HOOK = _descriptor.Descriptor(
_HOOK_EVENT,
_HOOK_DELETEPOLICY,
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -212,6 +212,5 @@ Hook = _reflection.GeneratedProtocolMessageType('Hook', (_message.Message,), dic
_sym_db.RegisterMessage(Hook)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -21,6 +20,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/info.proto',
package='hapi.release',
syntax='proto3',
serialized_options=_b('Z\007release'),
serialized_pb=_b('\n\x17hapi/release/info.proto\x12\x0chapi.release\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19hapi/release/status.proto\"\xd5\x01\n\x04Info\x12$\n\x06status\x18\x01 \x01(\x0b\x32\x14.hapi.release.Status\x12\x32\n\x0e\x66irst_deployed\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x31\n\rlast_deployed\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\x07\x64\x65leted\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0b\x44\x65scription\x18\x05 \x01(\tB\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,hapi_dot_release_dot_status__pb2.DESCRIPTOR,])
@ -41,42 +41,42 @@ _INFO = _descriptor.Descriptor(
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='first_deployed', full_name='hapi.release.Info.first_deployed', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='last_deployed', full_name='hapi.release.Info.last_deployed', index=2,
number=3, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='deleted', full_name='hapi.release.Info.deleted', index=3,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='Description', full_name='hapi.release.Info.Description', index=4,
number=5, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -101,6 +101,5 @@ Info = _reflection.GeneratedProtocolMessageType('Info', (_message.Message,), dic
_sym_db.RegisterMessage(Info)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -23,6 +22,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/release.proto',
package='hapi.release',
syntax='proto3',
serialized_options=_b('Z\007release'),
serialized_pb=_b('\n\x1ahapi/release/release.proto\x12\x0chapi.release\x1a\x17hapi/release/hook.proto\x1a\x17hapi/release/info.proto\x1a\x17hapi/chart/config.proto\x1a\x16hapi/chart/chart.proto\"\xd8\x01\n\x07Release\x12\x0c\n\x04name\x18\x01 \x01(\t\x12 \n\x04info\x18\x02 \x01(\x0b\x32\x12.hapi.release.Info\x12 \n\x05\x63hart\x18\x03 \x01(\x0b\x32\x11.hapi.chart.Chart\x12\"\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x12.hapi.chart.Config\x12\x10\n\x08manifest\x18\x05 \x01(\t\x12!\n\x05hooks\x18\x06 \x03(\x0b\x32\x12.hapi.release.Hook\x12\x0f\n\x07version\x18\x07 \x01(\x05\x12\x11\n\tnamespace\x18\x08 \x01(\tB\tZ\x07releaseb\x06proto3')
,
dependencies=[hapi_dot_release_dot_hook__pb2.DESCRIPTOR,hapi_dot_release_dot_info__pb2.DESCRIPTOR,hapi_dot_chart_dot_config__pb2.DESCRIPTOR,hapi_dot_chart_dot_chart__pb2.DESCRIPTOR,])
@ -43,63 +43,63 @@ _RELEASE = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='info', full_name='hapi.release.Release.info', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='chart', full_name='hapi.release.Release.chart', index=2,
number=3, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='config', full_name='hapi.release.Release.config', index=3,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='manifest', full_name='hapi.release.Release.manifest', index=4,
number=5, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='hooks', full_name='hapi.release.Release.hooks', index=5,
number=6, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='version', full_name='hapi.release.Release.version', index=6,
number=7, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='namespace', full_name='hapi.release.Release.namespace', index=7,
number=8, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -124,6 +124,5 @@ Release = _reflection.GeneratedProtocolMessageType('Release', (_message.Message,
_sym_db.RegisterMessage(Release)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -21,6 +20,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/status.proto',
package='hapi.release',
syntax='proto3',
serialized_options=_b('Z\007release'),
serialized_pb=_b('\n\x19hapi/release/status.proto\x12\x0chapi.release\x1a\x1dhapi/release/test_suite.proto\x1a\x19google/protobuf/any.proto\"\xa4\x02\n\x06Status\x12\'\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x19.hapi.release.Status.Code\x12\x11\n\tresources\x18\x03 \x01(\t\x12\r\n\x05notes\x18\x04 \x01(\t\x12\x34\n\x13last_test_suite_run\x18\x05 \x01(\x0b\x32\x17.hapi.release.TestSuite\"\x98\x01\n\x04\x43ode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x08\x44\x45PLOYED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\x12\x0e\n\nSUPERSEDED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\x0c\n\x08\x44\x45LETING\x10\x05\x12\x13\n\x0fPENDING_INSTALL\x10\x06\x12\x13\n\x0fPENDING_UPGRADE\x10\x07\x12\x14\n\x10PENDING_ROLLBACK\x10\x08\x42\tZ\x07releaseb\x06proto3')
,
dependencies=[hapi_dot_release_dot_test__suite__pb2.DESCRIPTOR,google_dot_protobuf_dot_any__pb2.DESCRIPTOR,])
@ -35,43 +35,43 @@ _STATUS_CODE = _descriptor.EnumDescriptor(
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DEPLOYED', index=1, number=1,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DELETED', index=2, number=2,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SUPERSEDED', index=3, number=3,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='FAILED', index=4, number=4,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DELETING', index=5, number=5,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PENDING_INSTALL', index=6, number=6,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PENDING_UPGRADE', index=7, number=7,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PENDING_ROLLBACK', index=8, number=8,
options=None,
serialized_options=None,
type=None),
],
containing_type=None,
options=None,
serialized_options=None,
serialized_start=242,
serialized_end=394,
)
@ -91,28 +91,28 @@ _STATUS = _descriptor.Descriptor(
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='resources', full_name='hapi.release.Status.resources', index=1,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='notes', full_name='hapi.release.Status.notes', index=2,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='last_test_suite_run', full_name='hapi.release.Status.last_test_suite_run', index=3,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@ -120,7 +120,7 @@ _STATUS = _descriptor.Descriptor(
enum_types=[
_STATUS_CODE,
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -144,6 +144,5 @@ Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,),
_sym_db.RegisterMessage(Status)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -20,6 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/test_run.proto',
package='hapi.release',
syntax='proto3',
serialized_options=_b('Z\007release'),
serialized_pb=_b('\n\x1bhapi/release/test_run.proto\x12\x0chapi.release\x1a\x1fgoogle/protobuf/timestamp.proto\"\xf3\x01\n\x07TestRun\x12\x0c\n\x04name\x18\x01 \x01(\t\x12,\n\x06status\x18\x02 \x01(\x0e\x32\x1c.hapi.release.TestRun.Status\x12\x0c\n\x04info\x18\x03 \x01(\t\x12.\n\nstarted_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0c\x63ompleted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"<\n\x06Status\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x42\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
@ -34,23 +34,23 @@ _TESTRUN_STATUS = _descriptor.EnumDescriptor(
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SUCCESS', index=1, number=1,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='FAILURE', index=2, number=2,
options=None,
serialized_options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='RUNNING', index=3, number=3,
options=None,
serialized_options=None,
type=None),
],
containing_type=None,
options=None,
serialized_options=None,
serialized_start=262,
serialized_end=322,
)
@ -70,35 +70,35 @@ _TESTRUN = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='status', full_name='hapi.release.TestRun.status', index=1,
number=2, type=14, cpp_type=8, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='info', full_name='hapi.release.TestRun.info', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='started_at', full_name='hapi.release.TestRun.started_at', index=3,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='completed_at', full_name='hapi.release.TestRun.completed_at', index=4,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@ -106,7 +106,7 @@ _TESTRUN = _descriptor.Descriptor(
enum_types=[
_TESTRUN_STATUS,
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -131,6 +131,5 @@ TestRun = _reflection.GeneratedProtocolMessageType('TestRun', (_message.Message,
_sym_db.RegisterMessage(TestRun)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -21,6 +20,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/test_suite.proto',
package='hapi.release',
syntax='proto3',
serialized_options=_b('Z\007release'),
serialized_pb=_b('\n\x1dhapi/release/test_suite.proto\x12\x0chapi.release\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bhapi/release/test_run.proto\"\x95\x01\n\tTestSuite\x12.\n\nstarted_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0c\x63ompleted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12&\n\x07results\x18\x03 \x03(\x0b\x32\x15.hapi.release.TestRunB\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,hapi_dot_release_dot_test__run__pb2.DESCRIPTOR,])
@ -41,28 +41,28 @@ _TESTSUITE = _descriptor.Descriptor(
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='completed_at', full_name='hapi.release.TestSuite.completed_at', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='results', full_name='hapi.release.TestSuite.results', index=2,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -86,6 +86,5 @@ TestSuite = _reflection.GeneratedProtocolMessageType('TestSuite', (_message.Mess
_sym_db.RegisterMessage(TestSuite)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,6 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -19,6 +18,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/version/version.proto',
package='hapi.version',
syntax='proto3',
serialized_options=_b('Z\007version'),
serialized_pb=_b('\n\x1ahapi/version/version.proto\x12\x0chapi.version\"F\n\x07Version\x12\x0f\n\x07sem_ver\x18\x01 \x01(\t\x12\x12\n\ngit_commit\x18\x02 \x01(\t\x12\x16\n\x0egit_tree_state\x18\x03 \x01(\tB\tZ\x07versionb\x06proto3')
)
@ -38,28 +38,28 @@ _VERSION = _descriptor.Descriptor(
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='git_commit', full_name='hapi.version.Version.git_commit', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='git_tree_state', full_name='hapi.version.Version.git_tree_state', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
@ -80,6 +80,5 @@ Version = _reflection.GeneratedProtocolMessageType('Version', (_message.Message,
_sym_db.RegisterMessage(Version)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007version'))
DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)

View File

@ -1,7 +1,7 @@
deepdiff==3.3.0
gitpython
grpcio==1.10.0
grpcio-tools==1.10.0
grpcio==1.16.0
grpcio-tools==1.16.0
jsonschema>=2.6.0
keystoneauth1==2.21.0
keystonemiddleware==4.9.1