Initial Armada Commit (#1)

* Initial commit of Armada framework

* python based .gitignore

* incorporate pull request feedback
This commit is contained in:
Alan Meadows 2017-02-10 15:27:04 -08:00 committed by GitHub
parent eef4185a15
commit 501d3d5ca2
36 changed files with 3633 additions and 1 deletions

View File

@ -1,2 +1,90 @@
# armada
# Armada
A python orchestrator for a installing, upgrading, and managing a collection of helm charts, dependencies, and values overrides.
Note that this project is pre-alpha and under active development. It may undergo drastic changes to support the long-term vision but contributions are welcome.
# Overview
The armada python library and command line tool provides a way to synchronize a helm (tiller) target with an operators intended state, consisting of several charts, dependencies, and overrides using a single file or directory with a collection of files. This allows operators to define many charts, potentially with different namespaces for those releases, and their overrides in a central place. With a single command, deploy and/or upgrade them where applicable.
Armada also supports fetching helm chart source and then building charts from source from various local and remote locations, such as git/github endpoints. In the future, it may supprot other mechanisms as well.
It will also give the operator some indication of what is about to change by assisting with diffs for both values, values overrides, and actual template changes.
Its functionality may extend beyond helm, assisting in interacting with kubernetes directly to perform basic pre and post steps, such as removing completed or failed jobs, running backup jobs, blocking on chart readiness, or deleting resources that do not support upgrades. However, primarily, it will be an interface to support orchestrating Helm.
# Installation
The installation is fairly straight forward:
```
virtualenv --no-site-packages ~/armada-env
~/armada-env/bin/pip install -r ./requirements.txt
~/armada-env/bin/python ./setup.py install
```
To run armada, simply supply it with your YAML based intention for any number of charts:
```
~/armada-env/bin/aramda -c examples/aramda.conf
```
Your output will look something like this:
```
$ ~/armada-env/bin/armada -c examples/armada.yaml
2017-02-10 09:42:36,753 armada INFO Cloning git://github.com/att-comdev/openstack-helm/keystone for release keystone
2017-02-10 09:42:39,238 armada INFO Building dependency chart common for release keystone
2017-02-10 09:42:39,238 armada INFO Cloning git://github.com/att-comdev/openstack-helm/common for release None
2017-02-10 09:42:41,459 armada INFO Installing release keystone
```
If you were to run it a second time, modifying the shared values override example in examples/armada.conf:
```
endpoints: &endpoints
glance:
this: is an example
```
to:
```
endpoints: &endpoints
glance:
this: is an example
that: is another example
```
And re-run armada, we will notice it will upgrade the keystone release, instead of install it on this pass, as well as report back the values changes as a unified diff. A unified diff for any template changes would also be shown had those occurred.
```
alan@hpdesktop:~/Workbench/att/attcomdev/armada$ /tmp/armada/bin/armada -c examples/armada.yaml
2017-02-10 09:44:43,396 armada INFO Cloning git://github.com/att-comdev/openstack-helm/keystone for release keystone
2017-02-10 09:44:47,640 armada INFO Building dependency chart common for release keystone
2017-02-10 09:44:47,640 armada INFO Cloning git://github.com/att-comdev/openstack-helm/common for release None
2017-02-10 09:44:49,701 armada INFO Upgrading release keystone
2017-02-10 09:44:49,704 armada INFO Values Unified Diff (keystone)
---
+++
@@ -1,3 +1,3 @@
endpoints:
- glance: {this: is an example}
+ glance: {that: is another example, this: is an example}
```
# Helm gRPC
The helm gRPC libraries are located in the hapi directory. They were generated with the grpc_tools.protoc utility against Helm 2.1.3. Should you wish to re-generate them you can easily do so:
```
git clone https://github.com/kubernetes/helm ./helm
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. helm/_proto/hapi/chart/*
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. helm/_proto/hapi/services/*
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. helm/_proto/hapi/release/*
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. helm/_proto/hapi/version/*
```

0
armada/__init__.py Normal file
View File

106
armada/armada.py Normal file
View File

@ -0,0 +1,106 @@
from supermutes.dot import dotify
from chartbuilder import ChartBuilder
from tiller import Tiller
from logutil import LOG
import yaml
import difflib
class Armada(object):
'''
This is the main Armada class handling the Armada
workflows
'''
def __init__(self, args):
'''
Initialize the Armada Engine and establish
a connection to Tiller
'''
self.args = args
# internalize config
self.config = yaml.load(open(args.config).read())
self.tiller = Tiller()
def find_release_chart(self, known_releases, name):
'''
Find a release given a list of known_releases and a release name
'''
for chart_name, version, chart, values in known_releases:
if chart_name == name:
return chart, values
def sync(self):
'''
Syncronize Helm with the Armada Config(s)
'''
# extract known charts on tiller right now
known_releases = self.tiller.list_charts()
for release in known_releases:
LOG.debug("Release {}, Version {} found on tiller".format(release[0], release[1]))
for entry in self.config['armada']['charts']:
chart = dotify(entry['chart'])
values = entry['chart']['values']
if chart.release_name is None:
continue
# initialize helm chart and request a
# protoc helm chart object which will
# pull the sources down and walk the
# dependencies
chartbuilder = ChartBuilder(chart)
protoc_chart = chartbuilder.get_helm_chart()
# determine install or upgrade by examining known releases
if chart.release_name in [x[0] for x in known_releases]:
# indicate to the end user what path we are taking
LOG.info("Upgrading release {}".format(chart.release_name))
# extract the installed chart and installed values from the latest release so we can compare to the intended state
installed_chart, installed_values = self.find_release_chart(known_releases, chart.release_name)
# show delta for both the chart templates and the chart values
# TODO(alanmeadows) account for .files differences once we support those
self.show_diff(chart, installed_chart, installed_values, chartbuilder.dump(), values)
# do actual update
self.tiller.update_release(protoc_chart, self.args.dry_run, chart.release_name, disable_hooks=chart.upgrade.no_hooks, values=yaml.safe_dump(values))
# process install
else:
LOG.info("Installing release {}".format(chart.release_name))
self.tiller.install_release(protoc_chart, self.args.dry_run, chart.release_name, chart.namespace, values=yaml.safe_dump(values))
LOG.debug("Cleaning up chart source in {}".format(chartbuilder.source_directory))
chartbuilder.source_cleanup()
def show_diff(self, chart, installed_chart, installed_values, target_chart, target_values):
'''
Produce a unified diff of the installed chart vs our intention
TODO(alanmeadows): This needs to be rewritten to produce better
unified diff output and avoid the use of print
'''
chart_diff = list(difflib.unified_diff(installed_chart.SerializeToString().split('\n'), target_chart.split('\n')))
if len(chart_diff) > 0:
LOG.info("Chart Unified Diff ({})".format(chart.release_name))
for line in chart_diff:
print line
values_diff = list(difflib.unified_diff(installed_values.split('\n'), yaml.safe_dump(target_values).split('\n')))
if len(values_diff) > 0:
LOG.info("Values Unified Diff ({})".format(chart.release_name))
for line in values_diff:
print line

164
armada/chartbuilder.py Normal file
View File

@ -0,0 +1,164 @@
from hapi.chart.template_pb2 import Template
from hapi.chart.chart_pb2 import Chart
from hapi.chart.metadata_pb2 import Metadata
from hapi.chart.config_pb2 import Config
from logutil import LOG
from supermutes.dot import dotify
import shutil
import tempfile
import pygit2
import os
import yaml
class ChartBuilder(object):
'''
This class handles taking chart intentions as a paramter and
turning those into proper protoc helm charts that can be
pushed to tiller.
It also processes chart source declarations, fetching chart
source from external resources where necessary
'''
def __init__(self, chart, parent=None):
'''
Initialize the ChartBuilder class
Note that tthis will trigger a source pull as part of
initialization as its necessary in order to examine
the source service many of the calls on ChartBuilder
'''
# cache for generated protoc chart object
self._helm_chart = None
# record whether this is a dependency based chart
self.parent = parent
# store chart schema
self.chart = chart
# extract, pull, whatever the chart from its source
self.source_directory = self.source_clone()
def source_clone(self):
'''
Clone the charts source
We only support a git source type right now, which can also
handle git:// local paths as well
'''
if self.chart.source.type == 'git':
tmpdir = tempfile.mkdtemp(prefix='armada', dir='/tmp')
self._source_tmp_dir = tmpdir
if self.parent:
LOG.info("Cloning {}/{} as dependency for {}".format(self.chart.source.location, self.chart.source.subpath, self.parent))
else:
LOG.info("Cloning {}/{} for release {}".format(self.chart.source.location, self.chart.source.subpath, self.chart.release_name))
pygit2.clone_repository(self.chart.source.location, tmpdir)
return os.path.join(tmpdir, self.chart.source.subpath)
else:
LOG.exception("Unknown source type {} for chart {}" .format(self.chart.name, self.chart.source.type))
def source_cleanup(self):
'''
Cleanup source
'''
shutil.rmtree(self._source_tmp_dir)
def get_metadata(self):
'''
Process metadata
'''
# extract Chart.yaml to construct metadata
chart_yaml = dotify(yaml.load(open(os.path.join(self.source_directory, 'Chart.yaml')).read()))
# construct Metadata object
return Metadata(
description=chart_yaml.description,
name=chart_yaml.name,
version=chart_yaml.version
)
def get_files(self):
'''
Return (non-template) files in this chart
TODO(alanmeadows): Not implemented
'''
return []
def get_values(self):
'''
Return the chart (default) values
'''
# create config object representing unmarshaled values.yaml
if os.path.exists(os.path.join(self.source_directory, 'values.yaml')):
raw_values = open(os.path.join(self.source_directory, 'values.yaml')).read()
else:
LOG.warn("No values.yaml in {}, using empty values".format(self.source_directory))
raw_values = ''
return Config(raw=raw_values)
def get_templates(self):
'''
Return all the chart templates
'''
# process all files in templates/ as a template to attach to the chart
# building a Template object
templates = []
if not os.path.exists(os.path.join(self.source_directory, 'templates')):
LOG.warn("Chart {} has no templates directory, no templates will be deployed".format(self.chart.name))
for root, dirs, files in os.walk(os.path.join(self.source_directory, 'templates'), topdown=True):
for file in files:
templates.append(Template(name=file, data=open(os.path.join(root, file), 'r').read()))
return templates
def get_helm_chart(self):
'''
Return a helm chart object
'''
if self._helm_chart:
return self._helm_chart
# dependencies
# [process_chart(x, is_dependency=True) for x in chart.dependencies]
dependencies=[]
for chart in self.chart.dependencies:
LOG.info("Building dependency chart {} for release {}".format(chart.name, self.chart.release_name))
dependencies.append(ChartBuilder(chart).get_helm_chart())
helm_chart = Chart(
metadata=self.get_metadata(),
templates=self.get_templates(),
dependencies=dependencies,
values=self.get_values(),
files=self.get_files(),
)
self._helm_chart = helm_chart
return helm_chart
def dump(self):
'''
This method is used to dump a chart object as a serialized string so that we can perform a diff
It should recurse into dependencies
'''
return self.get_helm_chart().SerializeToString()

12
armada/k8s.py Normal file
View File

@ -0,0 +1,12 @@
from logutil import LOG
from kubernetes import client, config
class K8s(object):
def __init__(self):
'''
Initialize connection to Kubernetes
'''
config.load_kube_config()
self.client = client.CoreV1Api()

17
armada/logutil.py Normal file
View File

@ -0,0 +1,17 @@
# various utilties to support logging
import logging
from logging.handlers import SysLogHandler
LOG = logging.getLogger('armada')
LOG_FORMAT='%(asctime)s %(name)-12s %(levelname)-8s %(message)s'
LOG_DATE = '%m-%d %H:%M'
def setup_logging(args):
level = logging.DEBUG if args.debug else logging.INFO
logging.basicConfig(level=level, format=LOG_FORMAT, date_fmt=LOG_DATE)
handler = SysLogHandler(address='/dev/log')
syslog_formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s')
handler.setFormatter(syslog_formatter)
LOG.addHandler(handler)

141
armada/tiller.py Normal file
View File

@ -0,0 +1,141 @@
from hapi.services.tiller_pb2 import ReleaseServiceStub, ListReleasesRequest, InstallReleaseRequest, UpdateReleaseRequest
from hapi.chart.config_pb2 import Config
from logutil import LOG
from k8s import K8s
import grpc
TILLER_PORT=44134
TILLER_VERSION=b'2.1.3'
TILLER_TIMEOUT=300
class Tiller(object):
'''
The Tiller class supports communication and requests to the Tiller Helm
service over gRPC
'''
def __init__(self):
# init k8s connectivity
self.k8s = K8s()
# init tiller channel
self.channel = self.get_channel()
# init timeout for all requests
# and assume eventually this will
# be fed at runtime as an override
self.timeout = TILLER_TIMEOUT
@property
def metadata(self):
'''
Return tiller metadata for requests
'''
return [(b'x-helm-api-client', TILLER_VERSION)]
def get_channel(self):
'''
Return a tiller channel
'''
tiller_ip = self._get_tiller_ip()
tiller_port = self._get_tiller_port()
return grpc.insecure_channel('%s:%s' % (tiller_ip, tiller_port))
def _get_tiller_pod(self):
'''
Search all namespaces for a pod beginning with tiller-deploy*
'''
ret = self.k8s.client.list_pod_for_all_namespaces()
for i in ret.items:
# TODO(alanmeadows): this is a bit loose
if i.metadata.name.startswith('tiller-deploy'):
return i
def _get_tiller_ip(self):
'''
Returns the tiller pod's IP address by searching all namespaces
'''
pod = self._get_tiller_pod()
return pod.status.pod_ip
def _get_tiller_port(self):
'''Stub method to support arbitrary ports in the future'''
return TILLER_PORT
def list_releases(self):
'''
List Helm Releases
'''
stub = ReleaseServiceStub(self.channel)
req = ListReleasesRequest()
return stub.ListReleases(req, self.timeout, metadata=self.metadata)
def list_charts(self):
'''
List Helm Charts from Latest Releases
Returns list of (name, version, chart, values)
'''
charts = []
for x in self.list_releases():
try:
latest_release = x.releases[-1]
charts.append((latest_release.name, latest_release.version, latest_release.chart, latest_release.config.raw))
except IndexError:
continue
return charts
def get_release(self):
'''
Fetch a specific release
'''
def update_release(self, chart, dry_run, name, disable_hooks=False, values=None):
'''
Update a Helm Release
'''
if values is None:
values = Config(raw='')
else:
values = Config(raw=values)
# build release install request
stub = ReleaseServiceStub(self.channel)
release_request = UpdateReleaseRequest(
chart=chart,
dry_run=dry_run,
disable_hooks=disable_hooks,
values=values,
name=name)
return stub.UpdateRelease(release_request, self.timeout, metadata=self.metadata)
def install_release(self, chart, dry_run, name, namespace, values=None):
'''
Create a Helm Release
'''
if values is None:
values = Config(raw='')
else:
values = Config(raw=values)
# build release install request
stub = ReleaseServiceStub(self.channel)
release_request = InstallReleaseRequest(
chart=chart,
dry_run=dry_run,
values=values,
name=name,
namespace=namespace)
return stub.InstallRelease(release_request, self.timeout, metadata=self.metadata)

47
examples/armada.yaml Normal file
View File

@ -0,0 +1,47 @@
endpoints: &endpoints
glance:
this: is an example
armada:
# results in "armada-keystone" release name below
# to avoid manipulating releases managed directtly
# with helm or other armadas
release_prefix: armada
charts:
# silent dependency
- chart: &common
name: common
release_name: null
namespace: null
values: {}
source:
type: git
location: git://github.com/att-comdev/openstack-helm
subpath: common
reference: master
dependencies: []
- chart: &keystone
name: keystone
release_name: keystone
namespace: openstack
install:
no_hooks: false
upgrade:
no_hooks: false
pre:
delete:
- Job/keystone-db-sync
- Job/keystone-db-init
values:
endpoints: *endpoints
source:
type: git
location: git://github.com/att-comdev/openstack-helm
subpath: keystone
reference: master
dependencies:
- *common

0
hapi/__init__.py Normal file
View File

0
hapi/chart/__init__.py Normal file
View File

119
hapi/chart/chart_pb2.py Normal file
View File

@ -0,0 +1,119 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/chart/chart.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
from hapi.chart import config_pb2 as hapi_dot_chart_dot_config__pb2
from hapi.chart import metadata_pb2 as hapi_dot_chart_dot_metadata__pb2
from hapi.chart import template_pb2 as hapi_dot_chart_dot_template__pb2
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/chart.proto',
package='hapi.chart',
syntax='proto3',
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,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_CHART = _descriptor.Descriptor(
name='Chart',
full_name='hapi.chart.Chart',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='metadata', full_name='hapi.chart.Chart.metadata', index=0,
number=1, 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),
_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),
_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),
_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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=145,
serialized_end=347,
)
_CHART.fields_by_name['metadata'].message_type = hapi_dot_chart_dot_metadata__pb2._METADATA
_CHART.fields_by_name['templates'].message_type = hapi_dot_chart_dot_template__pb2._TEMPLATE
_CHART.fields_by_name['dependencies'].message_type = _CHART
_CHART.fields_by_name['values'].message_type = hapi_dot_chart_dot_config__pb2._CONFIG
_CHART.fields_by_name['files'].message_type = google_dot_protobuf_dot_any__pb2._ANY
DESCRIPTOR.message_types_by_name['Chart'] = _CHART
Chart = _reflection.GeneratedProtocolMessageType('Chart', (_message.Message,), dict(
DESCRIPTOR = _CHART,
__module__ = 'hapi.chart.chart_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Chart)
))
_sym_db.RegisterMessage(Chart)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

177
hapi/chart/config_pb2.py Normal file
View File

@ -0,0 +1,177 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/chart/config.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/config.proto',
package='hapi.chart',
syntax='proto3',
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')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_CONFIG_VALUESENTRY = _descriptor.Descriptor(
name='ValuesEntry',
full_name='hapi.chart.Config.ValuesEntry',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='hapi.chart.Config.ValuesEntry.key', index=0,
number=1, 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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=111,
serialized_end=175,
)
_CONFIG = _descriptor.Descriptor(
name='Config',
full_name='hapi.chart.Config',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='raw', full_name='hapi.chart.Config.raw', index=0,
number=1, 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),
_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),
],
extensions=[
],
nested_types=[_CONFIG_VALUESENTRY, ],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=40,
serialized_end=175,
)
_VALUE = _descriptor.Descriptor(
name='Value',
full_name='hapi.chart.Value',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='value', full_name='hapi.chart.Value.value', index=0,
number=1, 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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=177,
serialized_end=199,
)
_CONFIG_VALUESENTRY.fields_by_name['value'].message_type = _VALUE
_CONFIG_VALUESENTRY.containing_type = _CONFIG
_CONFIG.fields_by_name['values'].message_type = _CONFIG_VALUESENTRY
DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
DESCRIPTOR.message_types_by_name['Value'] = _VALUE
Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), dict(
ValuesEntry = _reflection.GeneratedProtocolMessageType('ValuesEntry', (_message.Message,), dict(
DESCRIPTOR = _CONFIG_VALUESENTRY,
__module__ = 'hapi.chart.config_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Config.ValuesEntry)
))
,
DESCRIPTOR = _CONFIG,
__module__ = 'hapi.chart.config_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Config)
))
_sym_db.RegisterMessage(Config)
_sym_db.RegisterMessage(Config.ValuesEntry)
Value = _reflection.GeneratedProtocolMessageType('Value', (_message.Message,), dict(
DESCRIPTOR = _VALUE,
__module__ = 'hapi.chart.config_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Value)
))
_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'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

215
hapi/chart/metadata_pb2.py Normal file
View File

@ -0,0 +1,215 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/chart/metadata.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/metadata.proto',
package='hapi.chart',
syntax='proto3',
serialized_pb=_b('\n\x19hapi/chart/metadata.proto\x12\nhapi.chart\")\n\nMaintainer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\"\xf0\x01\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\" \n\x06\x45ngine\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05GOTPL\x10\x01\x42\x07Z\x05\x63hartb\x06proto3')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_METADATA_ENGINE = _descriptor.EnumDescriptor(
name='Engine',
full_name='hapi.chart.Metadata.Engine',
filename=None,
file=DESCRIPTOR,
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='GOTPL', index=1, number=1,
options=None,
type=None),
],
containing_type=None,
options=None,
serialized_start=293,
serialized_end=325,
)
_sym_db.RegisterEnumDescriptor(_METADATA_ENGINE)
_MAINTAINER = _descriptor.Descriptor(
name='Maintainer',
full_name='hapi.chart.Maintainer',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='hapi.chart.Maintainer.name', index=0,
number=1, 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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=41,
serialized_end=82,
)
_METADATA = _descriptor.Descriptor(
name='Metadata',
full_name='hapi.chart.Metadata',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='hapi.chart.Metadata.name', index=0,
number=1, 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),
_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),
_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),
_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),
_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),
_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),
_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),
_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),
_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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
_METADATA_ENGINE,
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=85,
serialized_end=325,
)
_METADATA.fields_by_name['maintainers'].message_type = _MAINTAINER
_METADATA_ENGINE.containing_type = _METADATA
DESCRIPTOR.message_types_by_name['Maintainer'] = _MAINTAINER
DESCRIPTOR.message_types_by_name['Metadata'] = _METADATA
Maintainer = _reflection.GeneratedProtocolMessageType('Maintainer', (_message.Message,), dict(
DESCRIPTOR = _MAINTAINER,
__module__ = 'hapi.chart.metadata_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Maintainer)
))
_sym_db.RegisterMessage(Maintainer)
Metadata = _reflection.GeneratedProtocolMessageType('Metadata', (_message.Message,), dict(
DESCRIPTOR = _METADATA,
__module__ = 'hapi.chart.metadata_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Metadata)
))
_sym_db.RegisterMessage(Metadata)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

View File

@ -0,0 +1,88 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/chart/template.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/chart/template.proto',
package='hapi.chart',
syntax='proto3',
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')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_TEMPLATE = _descriptor.Descriptor(
name='Template',
full_name='hapi.chart.Template',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='hapi.chart.Template.name', index=0,
number=1, 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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=41,
serialized_end=79,
)
DESCRIPTOR.message_types_by_name['Template'] = _TEMPLATE
Template = _reflection.GeneratedProtocolMessageType('Template', (_message.Message,), dict(
DESCRIPTOR = _TEMPLATE,
__module__ = 'hapi.chart.template_pb2'
# @@protoc_insertion_point(class_scope:hapi.chart.Template)
))
_sym_db.RegisterMessage(Template)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\005chart'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

0
hapi/release/__init__.py Normal file
View File

172
hapi/release/hook_pb2.py Normal file
View File

@ -0,0 +1,172 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/release/hook.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/hook.proto',
package='hapi.release',
syntax='proto3',
serialized_pb=_b('\n\x17hapi/release/hook.proto\x12\x0chapi.release\x1a\x1fgoogle/protobuf/timestamp.proto\"\xbd\x02\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\"\xa0\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\x42\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_HOOK_EVENT = _descriptor.EnumDescriptor(
name='Event',
full_name='hapi.release.Hook.Event',
filename=None,
file=DESCRIPTOR,
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_INSTALL', index=1, number=1,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_INSTALL', index=2, number=2,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_DELETE', index=3, number=3,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_DELETE', index=4, number=4,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_UPGRADE', index=5, number=5,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_UPGRADE', index=6, number=6,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='PRE_ROLLBACK', index=7, number=7,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='POST_ROLLBACK', index=8, number=8,
options=None,
type=None),
],
containing_type=None,
options=None,
serialized_start=232,
serialized_end=392,
)
_sym_db.RegisterEnumDescriptor(_HOOK_EVENT)
_HOOK = _descriptor.Descriptor(
name='Hook',
full_name='hapi.release.Hook',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='hapi.release.Hook.name', index=0,
number=1, 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),
_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),
_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),
_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),
_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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
_HOOK_EVENT,
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=75,
serialized_end=392,
)
_HOOK.fields_by_name['events'].enum_type = _HOOK_EVENT
_HOOK.fields_by_name['last_run'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_HOOK_EVENT.containing_type = _HOOK
DESCRIPTOR.message_types_by_name['Hook'] = _HOOK
Hook = _reflection.GeneratedProtocolMessageType('Hook', (_message.Message,), dict(
DESCRIPTOR = _HOOK,
__module__ = 'hapi.release.hook_pb2'
# @@protoc_insertion_point(class_scope:hapi.release.Hook)
))
_sym_db.RegisterMessage(Hook)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

109
hapi/release/info_pb2.py Normal file
View File

@ -0,0 +1,109 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/release/info.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
from hapi.release import status_pb2 as hapi_dot_release_dot_status__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/info.proto',
package='hapi.release',
syntax='proto3',
serialized_pb=_b('\n\x17hapi/release/info.proto\x12\x0chapi.release\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19hapi/release/status.proto\"\xc0\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.TimestampB\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,hapi_dot_release_dot_status__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_INFO = _descriptor.Descriptor(
name='Info',
full_name='hapi.release.Info',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='status', full_name='hapi.release.Info.status', index=0,
number=1, 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),
_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),
_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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=102,
serialized_end=294,
)
_INFO.fields_by_name['status'].message_type = hapi_dot_release_dot_status__pb2._STATUS
_INFO.fields_by_name['first_deployed'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_INFO.fields_by_name['last_deployed'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
_INFO.fields_by_name['deleted'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
DESCRIPTOR.message_types_by_name['Info'] = _INFO
Info = _reflection.GeneratedProtocolMessageType('Info', (_message.Message,), dict(
DESCRIPTOR = _INFO,
__module__ = 'hapi.release.info_pb2'
# @@protoc_insertion_point(class_scope:hapi.release.Info)
))
_sym_db.RegisterMessage(Info)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

139
hapi/release/release_pb2.py Normal file
View File

@ -0,0 +1,139 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/release/release.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
from hapi.release import hook_pb2 as hapi_dot_release_dot_hook__pb2
from hapi.release import info_pb2 as hapi_dot_release_dot_info__pb2
from hapi.chart import config_pb2 as hapi_dot_chart_dot_config__pb2
from hapi.chart import chart_pb2 as hapi_dot_chart_dot_chart__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/release.proto',
package='hapi.release',
syntax='proto3',
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,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_RELEASE = _descriptor.Descriptor(
name='Release',
full_name='hapi.release.Release',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='hapi.release.Release.name', index=0,
number=1, 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),
_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),
_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),
_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),
_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),
_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),
_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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=144,
serialized_end=360,
)
_RELEASE.fields_by_name['info'].message_type = hapi_dot_release_dot_info__pb2._INFO
_RELEASE.fields_by_name['chart'].message_type = hapi_dot_chart_dot_chart__pb2._CHART
_RELEASE.fields_by_name['config'].message_type = hapi_dot_chart_dot_config__pb2._CONFIG
_RELEASE.fields_by_name['hooks'].message_type = hapi_dot_release_dot_hook__pb2._HOOK
DESCRIPTOR.message_types_by_name['Release'] = _RELEASE
Release = _reflection.GeneratedProtocolMessageType('Release', (_message.Message,), dict(
DESCRIPTOR = _RELEASE,
__module__ = 'hapi.release.release_pb2'
# @@protoc_insertion_point(class_scope:hapi.release.Release)
))
_sym_db.RegisterMessage(Release)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

146
hapi/release/status_pb2.py Normal file
View File

@ -0,0 +1,146 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/release/status.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/release/status.proto',
package='hapi.release',
syntax='proto3',
serialized_pb=_b('\n\x19hapi/release/status.proto\x12\x0chapi.release\x1a\x19google/protobuf/any.proto\"\xd4\x01\n\x06Status\x12\'\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x19.hapi.release.Status.Code\x12%\n\x07\x64\x65tails\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\x12\x11\n\tresources\x18\x03 \x01(\t\x12\r\n\x05notes\x18\x04 \x01(\t\"X\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\x42\tZ\x07releaseb\x06proto3')
,
dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_STATUS_CODE = _descriptor.EnumDescriptor(
name='Code',
full_name='hapi.release.Status.Code',
filename=None,
file=DESCRIPTOR,
values=[
_descriptor.EnumValueDescriptor(
name='UNKNOWN', index=0, number=0,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DEPLOYED', index=1, number=1,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DELETED', index=2, number=2,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SUPERSEDED', index=3, number=3,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='FAILED', index=4, number=4,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='DELETING', index=5, number=5,
options=None,
type=None),
],
containing_type=None,
options=None,
serialized_start=195,
serialized_end=283,
)
_sym_db.RegisterEnumDescriptor(_STATUS_CODE)
_STATUS = _descriptor.Descriptor(
name='Status',
full_name='hapi.release.Status',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='code', full_name='hapi.release.Status.code', index=0,
number=1, 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),
_descriptor.FieldDescriptor(
name='details', full_name='hapi.release.Status.details', 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),
_descriptor.FieldDescriptor(
name='resources', full_name='hapi.release.Status.resources', 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),
_descriptor.FieldDescriptor(
name='notes', full_name='hapi.release.Status.notes', 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),
],
extensions=[
],
nested_types=[],
enum_types=[
_STATUS_CODE,
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=71,
serialized_end=283,
)
_STATUS.fields_by_name['code'].enum_type = _STATUS_CODE
_STATUS.fields_by_name['details'].message_type = google_dot_protobuf_dot_any__pb2._ANY
_STATUS_CODE.containing_type = _STATUS
DESCRIPTOR.message_types_by_name['Status'] = _STATUS
Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), dict(
DESCRIPTOR = _STATUS,
__module__ = 'hapi.release.status_pb2'
# @@protoc_insertion_point(class_scope:hapi.release.Status)
))
_sym_db.RegisterMessage(Status)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007release'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

View File

1472
hapi/services/tiller_pb2.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,213 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
import hapi.services.tiller_pb2 as hapi_dot_services_dot_tiller__pb2
class ReleaseServiceStub(object):
"""ReleaseService is the service that a helm application uses to mutate,
query, and manage releases.
Release: A named installation composed of a chart and
config. At any given time a release has one
chart and one config.
Config: A config is a YAML file that supplies values
to the parametrizable templates of a chart.
Chart: A chart is a helm package that contains
metadata, a default config, zero or more
optionally parameterizable templates, and
zero or more charts (dependencies).
"""
def __init__(self, channel):
"""Constructor.
Args:
channel: A grpc.Channel.
"""
self.ListReleases = channel.unary_stream(
'/hapi.services.tiller.ReleaseService/ListReleases',
request_serializer=hapi_dot_services_dot_tiller__pb2.ListReleasesRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.ListReleasesResponse.FromString,
)
self.GetReleaseStatus = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/GetReleaseStatus',
request_serializer=hapi_dot_services_dot_tiller__pb2.GetReleaseStatusRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.GetReleaseStatusResponse.FromString,
)
self.GetReleaseContent = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/GetReleaseContent',
request_serializer=hapi_dot_services_dot_tiller__pb2.GetReleaseContentRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.GetReleaseContentResponse.FromString,
)
self.UpdateRelease = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/UpdateRelease',
request_serializer=hapi_dot_services_dot_tiller__pb2.UpdateReleaseRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.UpdateReleaseResponse.FromString,
)
self.InstallRelease = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/InstallRelease',
request_serializer=hapi_dot_services_dot_tiller__pb2.InstallReleaseRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.InstallReleaseResponse.FromString,
)
self.UninstallRelease = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/UninstallRelease',
request_serializer=hapi_dot_services_dot_tiller__pb2.UninstallReleaseRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.UninstallReleaseResponse.FromString,
)
self.GetVersion = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/GetVersion',
request_serializer=hapi_dot_services_dot_tiller__pb2.GetVersionRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.GetVersionResponse.FromString,
)
self.RollbackRelease = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/RollbackRelease',
request_serializer=hapi_dot_services_dot_tiller__pb2.RollbackReleaseRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.RollbackReleaseResponse.FromString,
)
self.GetHistory = channel.unary_unary(
'/hapi.services.tiller.ReleaseService/GetHistory',
request_serializer=hapi_dot_services_dot_tiller__pb2.GetHistoryRequest.SerializeToString,
response_deserializer=hapi_dot_services_dot_tiller__pb2.GetHistoryResponse.FromString,
)
class ReleaseServiceServicer(object):
"""ReleaseService is the service that a helm application uses to mutate,
query, and manage releases.
Release: A named installation composed of a chart and
config. At any given time a release has one
chart and one config.
Config: A config is a YAML file that supplies values
to the parametrizable templates of a chart.
Chart: A chart is a helm package that contains
metadata, a default config, zero or more
optionally parameterizable templates, and
zero or more charts (dependencies).
"""
def ListReleases(self, request, context):
"""ListReleases retrieves release history.
TODO: Allow filtering the set of releases by
release status. By default, ListAllReleases returns the releases who
current status is "Active".
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def GetReleaseStatus(self, request, context):
"""GetReleasesStatus retrieves status information for the specified release.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def GetReleaseContent(self, request, context):
"""GetReleaseContent retrieves the release content (chart + value) for the specified release.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def UpdateRelease(self, request, context):
"""UpdateRelease updates release content.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def InstallRelease(self, request, context):
"""InstallRelease requests installation of a chart as a new release.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def UninstallRelease(self, request, context):
"""UninstallRelease requests deletion of a named release.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def GetVersion(self, request, context):
"""GetVersion returns the current version of the server.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def RollbackRelease(self, request, context):
"""RollbackRelease rolls back a release to a previous version.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def GetHistory(self, request, context):
"""ReleaseHistory retrieves a releasse's history.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def add_ReleaseServiceServicer_to_server(servicer, server):
rpc_method_handlers = {
'ListReleases': grpc.unary_stream_rpc_method_handler(
servicer.ListReleases,
request_deserializer=hapi_dot_services_dot_tiller__pb2.ListReleasesRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.ListReleasesResponse.SerializeToString,
),
'GetReleaseStatus': grpc.unary_unary_rpc_method_handler(
servicer.GetReleaseStatus,
request_deserializer=hapi_dot_services_dot_tiller__pb2.GetReleaseStatusRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.GetReleaseStatusResponse.SerializeToString,
),
'GetReleaseContent': grpc.unary_unary_rpc_method_handler(
servicer.GetReleaseContent,
request_deserializer=hapi_dot_services_dot_tiller__pb2.GetReleaseContentRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.GetReleaseContentResponse.SerializeToString,
),
'UpdateRelease': grpc.unary_unary_rpc_method_handler(
servicer.UpdateRelease,
request_deserializer=hapi_dot_services_dot_tiller__pb2.UpdateReleaseRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.UpdateReleaseResponse.SerializeToString,
),
'InstallRelease': grpc.unary_unary_rpc_method_handler(
servicer.InstallRelease,
request_deserializer=hapi_dot_services_dot_tiller__pb2.InstallReleaseRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.InstallReleaseResponse.SerializeToString,
),
'UninstallRelease': grpc.unary_unary_rpc_method_handler(
servicer.UninstallRelease,
request_deserializer=hapi_dot_services_dot_tiller__pb2.UninstallReleaseRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.UninstallReleaseResponse.SerializeToString,
),
'GetVersion': grpc.unary_unary_rpc_method_handler(
servicer.GetVersion,
request_deserializer=hapi_dot_services_dot_tiller__pb2.GetVersionRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.GetVersionResponse.SerializeToString,
),
'RollbackRelease': grpc.unary_unary_rpc_method_handler(
servicer.RollbackRelease,
request_deserializer=hapi_dot_services_dot_tiller__pb2.RollbackReleaseRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.RollbackReleaseResponse.SerializeToString,
),
'GetHistory': grpc.unary_unary_rpc_method_handler(
servicer.GetHistory,
request_deserializer=hapi_dot_services_dot_tiller__pb2.GetHistoryRequest.FromString,
response_serializer=hapi_dot_services_dot_tiller__pb2.GetHistoryResponse.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
'hapi.services.tiller.ReleaseService', rpc_method_handlers)
server.add_generic_rpc_handlers((generic_handler,))

0
hapi/version/__init__.py Normal file
View File

View File

@ -0,0 +1,95 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: hapi/version/version.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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()
DESCRIPTOR = _descriptor.FileDescriptor(
name='hapi/version/version.proto',
package='hapi.version',
syntax='proto3',
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')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_VERSION = _descriptor.Descriptor(
name='Version',
full_name='hapi.version.Version',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='sem_ver', full_name='hapi.version.Version.sem_ver', index=0,
number=1, 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),
_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),
_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),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=44,
serialized_end=114,
)
DESCRIPTOR.message_types_by_name['Version'] = _VERSION
Version = _reflection.GeneratedProtocolMessageType('Version', (_message.Message,), dict(
DESCRIPTOR = _VERSION,
__module__ = 'hapi.version.version_pb2'
# @@protoc_insertion_point(class_scope:hapi.version.Version)
))
_sym_db.RegisterMessage(Version)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\007version'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
except ImportError:
pass
# @@protoc_insertion_point(module_scope)

View File

@ -0,0 +1,5 @@
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities

7
requirements.txt Normal file
View File

@ -0,0 +1,7 @@
supermutes
grpc
pyyaml
grpcio
grpcio-tools
kubernetes
pygit2==0.24.0

45
scripts/armada Executable file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env python
import yaml
import tempfile
import sys
import os
import argparse
from supermutes.dot import dotify
from armada.armada import Armada
from armada.logutil import *
DESCRIPTION = "Armada"
def parse_args():
ap = argparse.ArgumentParser(description=DESCRIPTION)
ap.add_argument('--debug', action='store',
default=False, required=False, help='Enable debug logging')
ap.add_argument('-c', '--config', action='store',
required=True, help='Path to YAML File or Directory')
ap.add_argument('-d', '--dry-run', action='store',
default=False, required=False, help='Enable dry-run flag on all Tiller Calls')
return ap.parse_args()
def run(args):
armada = Armada(args)
armada.sync()
if __name__ == '__main__':
args = parse_args()
setup_logging(args)
try:
run(args)
sys.exit(0)
except Exception as err:
LOG.exception(err)
sys.exit(1)

15
setup.py Executable file
View File

@ -0,0 +1,15 @@
from setuptools import setup
setup(
name = 'armada',
version = '0.1.0',
description = 'Armada Helm Orchestrator',
packages = ['armada',
'hapi',
'hapi.chart',
'hapi.release',
'hapi.services',
'hapi.version'
],
scripts = ['scripts/armada']
)