Git Product home page Git Product logo

pyhelm's Introduction

PyHelm

Python bindings for the Helm package manager

How to use PyHelm

In order to install a Helm chart using PyHelm, you can perform the following steps:

Loading a chart using ChartBuilder

from pyhelm.chartbuilder import ChartBuilder

chart = ChartBuilder({"name": "nginx-ingress", "source": {"type": "repo", "location": "https://kubernetes-charts.storage.googleapis.com"}})

This will cause the chart to cloned locally, and any additional use of chart will reference the local copy. You can also used a local chart by using "type": "directory", as well as cloning from a git repo using "type": "git"

Installing a chart

from pyhelm.chartbuilder import ChartBuilder
from pyhelm.tiller import Tiller

tiller = Tiller(TILLER_HOST)
chart = ChartBuilder({"name": "nginx-ingress", "source": {"type": "repo", "location": "https://kubernetes-charts.storage.googleapis.com"}})
tiller.install_release(chart.get_helm_chart(), dry_run=False, namespace='default')

This snippet will install the nginx-ingress chart on a Kubernetes cluster where Tiller is installed (assuming TILLER_HOST points to a live Tiller instance). Take note that in most Helm installations Tiller isn't accessible in such a manner, and you will need to perform a Kubernetes port-forward operation to access Tiller. The Tiller class supports other operations other than installation, including release listing, release updating, release uninstallation and getting release contents.

Package versions

In order to support multiple versions of Helm versions, which in turn require different gRPC prototypes, we maintain different PyHelm package versions.

Helm version PyHelm dependency version
2.11 (and lower) pyhelm>=2.11,<2.12
2.14 pyhelm>=2.14,<2.15

Additional Helm versions can be supported as shown in the following section.

Helm gRPC

The helm gRPC libraries are located in the hapi directory. They were generated with the grpc_tools.protoc utility against Helm 2.14. 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=. _proto/hapi/chart/*
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. _proto/hapi/services/*
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. _proto/hapi/release/*
python -m grpc_tools.protoc -I helm/_proto --python_out=. --grpc_python_out=. _proto/hapi/version/*

pyhelm's People

Contributors

aciduck avatar akasurde avatar alanmeadows avatar alop avatar avorima avatar bart613 avatar bryanlarsen avatar dominick1993 avatar dpgaspar avatar flaper87 avatar gardlt avatar iced-duck avatar justinturpin avatar killmeplz avatar ljakimczuk avatar lubo avatar mattandes avatar miff2000 avatar psychopenguin avatar redlinkk avatar rmk-celect avatar v1k0d3n avatar wknapik avatar yanivoliver avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pyhelm's Issues

Add API Documentation

The documentation in the README is very basic. It would be nice to have the API documentation for users to get started quickly.

Post-install hooks runs almost along with the charts

With pyhelm Post-install hooks runs almost along with the charts and its dependent charts. But actual helm waits for atleast one container to be running for a pod before proceeding to post-install hook. How do we get around this?

Missing pyyaml dependency

There are various import yaml statements in pyhelm, but the pyhelm package doesn't declare pyyaml as a dependency.

how to pass argument value as set to helm chart

servers:

  • name: foo
    port: 80
  • name: bar
    port: 81

The above cannot be expressed with --set in Helm <=2.4. In Helm 2.5, the accessing the port on foo is --set servers[0].port=80. Not only is it harder for the user to figure out, but it is prone to errors if at some later time the order of the servers is changed.

Similar thing i want to pass --set with value from pyhelm. How to do that ?

Please provide examples on how to determine Tiller host in README

I am trying to follow your StackOverflow answer here:

https://stackoverflow.com/questions/49311795/code-sample-to-deploy-a-helm-chart-via-api

  1. Can this example be added to the README.md for people who find this repo first?
  2. What is missing from the example is instantiating the Tiller class. To instantiate a Tiller you need to provide the host parameter. However, it's not at all clear how you determine what this should be from an existing command-line helm installation. Help!

Add support for Python 3

Considering that Python 2 is nearing its EOL, this project should be able to run on Python 3.

Error during processing $.Template.Basepath

Trying to install stable/minio with default values.

grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.UNKNOWN, render error in "minio/configmap.yaml": template: minio/configmap.yaml:12:3: executing "minio/configmap.yaml" at <include (print $.Tem...>: error calling include: template: no template "minio/templates/_helper_create_bucket.txt" associated with template "gotpl")>

I assume that the problem should be with the path. Am i doing something wrong?

Tests fail with Python3.5

When tests are run in Tox against Python 3.5, many of the tests fail with this error:

________________________________________________________________________________________ TestChartBuilder.test_no_type _________________________________________________________________________________________

self = <test_chartbuilder.TestChartBuilder testMethod=test_no_type>

    def test_no_type(self):
        cb = ChartBuilder({'name': '', 'source': {}})
        self.assertIsNone(cb.source_directory)
>       cb._logger.exception.assert_called()

tests/test_chartbuilder.py:60:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Mock name='mock.exception' id='139794621542528'>, name = 'assert_called'

    def __getattr__(self, name):
        if name in {'_mock_methods', '_mock_unsafe'}:
            raise AttributeError(name)
        elif self._mock_methods is not None:
            if name not in self._mock_methods or name in _all_magics:
                raise AttributeError("Mock object has no attribute %r" % name)
        elif _is_magic(name):
            raise AttributeError(name)
        if not self._mock_unsafe:
            if name.startswith(('assert', 'assret')):
>               raise AttributeError(name)
E               AttributeError: assert_called

/.pyenv/versions/3.5.6/lib/python3.5/unittest/mock.py:585: AttributeError

This is due to method assert_called() not being present in Python 3.5. It was introduced in Python 3.6 it seems:
https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_called

The question is, how should this be dealt with? Should we drop Python 3.5 off the version list in tox.ini?

Received message larger than max

Hi there,

I am using latest module version of pyhelm (0.1.5) and trying to get a list of all releases that available on the cluster. However, I always get this error:

Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python3.7/site-packages/pyhelm/tiller.py", line 99, in list_releases
for y in release_list:
File "/usr/local/lib/python3.7/site-packages/grpc/_channel.py", line 364, in next
return self._next()
File "/usr/local/lib/python3.7/site-packages/grpc/_channel.py", line 358, in _next
raise self
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
status = StatusCode.RESOURCE_EXHAUSTED
details = "Received message larger than max (5202167 vs. 4194304)"
debug_error_string = "{"created":"@1563880993.981572966","description":"Received message larger than max (5202167 vs. 4194304)","file":"src/core/ext/filters/message_size/message_size_filter.cc","file_line":190,"grpc_status":8}"

Is there a workaround for it?

TypeError on get_files and get_templates

It seems the protobuf based objects - Template and Any - expect to receive it's data contents as bytesbut string is being passed, resulting in a TypeError exception when calling get_files and get_templates methods for a Chart object.

Here is an example on how to reproduce:

>>> from pyhelm import chartbuilder
>>> chart = {"name": "nginx-ingress", "source": {"type": "repo", "location": "https://kubernetes-charts.storage.googleapis.com"}}
>>> c = chartbuilder.ChartBuilder(chart)
2019-03-27 11:25:43,613 - ChartBuilder - INFO - Cloning https://kubernetescharts.storage.googleapis.com/ for release nginx-ingress
>>> c.get_templates()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/fabio/.local/lib/python3.7/site-packages/pyhelm/chartbuilder.py", line 200, in get_templates
    'r').read()))
TypeError: '{{- if .Values.udp }}\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  labels:\n    app: {{ template  has type str, but expected one of: bytes
>>> c.get_files()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/fabio/.local/lib/python3.7/site-packages/pyhelm/chartbuilder.py", line 152, in get_files
    chart_files.append(Any(type_url=filename, value=fd.read()))
TypeError: '# nginx-ingress\n\n[nginx-ingress](https://github.com/kubernetes/ingress-nginx) is an Ingress contr has type str, but expected one of: bytes

Question?

The docs are unclear, probably needs an about section as I am not sure what problem this solves. Does this generate a helm chart?

Tests are failing because of missing dependencies

Running tox fails with the following error message:

$ tox -q
WARNING: test command found but not installed in testenv
  cmd: /usr/bin/sh
  env: /home/mv/Projects/pyhelm/.tox/py27
Maybe you forgot to specify a dependency? See also the whitelist_externals envconfig setting.
/usr/bin/sh: /home/mv/Projects/pyhelm/scripts/libgit2.sh: No such file or directory
ERROR: InvocationError for command '/usr/bin/sh /home/mv/Projects/pyhelm/scripts/libgit2.sh' (exited with code 127)
_____________________________________________________________________________________________________ summary _____________________________________________________________________________________________________
ERROR:   py27: commands failed

To ensure that changes can be tested and maybe even make use of tools like travis-ci, there should be a working tox setup.

pip3 install pyhelm issue

# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
# python3 -V
Python 3.6.8

Full log:

# pip3 install pyhelm
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting pyhelm
  Using cached https://files.pythonhosted.org/packages/fc/43/7d3b9e536ca3175f3dc2cc4f1760d4dea5711508fe0129cf11c500189260/pyhelm-2.14.5.tar.gz
Requirement already satisfied: gitpython in /usr/local/lib64/python3.6/site-packages (from pyhelm)
Collecting grpcio (from pyhelm)
  Using cached https://files.pythonhosted.org/packages/0c/c5/f38a7ec5966b2d3b38488494213deaeec421aeef0ba6559e15f58286416c/grpcio-1.37.0.tar.gz
Collecting grpcio-tools (from pyhelm)
  Using cached https://files.pythonhosted.org/packages/fa/1f/11c0b2b27e426314bcb1f90ad854b3be76eedc2a8d34026972cfcabe30e3/grpcio-tools-1.37.0.tar.gz
Collecting protobuf (from pyhelm)
  Using cached https://files.pythonhosted.org/packages/8c/78/3bccd7f228179b382441644f1692cdce6e0f46b0422e61a39915c98b3287/protobuf-3.15.8-cp36-cp36m-manylinux1_x86_64.whl
Collecting supermutes (from pyhelm)
  Using cached https://files.pythonhosted.org/packages/3f/dd/e392bad8476734ec489278c24047c19feaf3ba8e04a7219b5520e6112b1b/supermutes-0.2.5.tar.gz
Requirement already satisfied: requests in /usr/lib/python3.6/site-packages (from pyhelm)
Requirement already satisfied: PyYAML in /usr/lib64/python3.6/site-packages (from pyhelm)
Collecting boto3 (from pyhelm)
  Using cached https://files.pythonhosted.org/packages/62/b3/8c889dd3d5ae47a9c4468cc20ef980adc4a16f06f0937ab33f78b58b5eda/boto3-1.17.53-py2.py3-none-any.whl
Collecting botocore (from pyhelm)
  Using cached https://files.pythonhosted.org/packages/92/4e/232e261b739534e216f28d935a06c44840221c3476ebcdb411cd0fc2bf16/botocore-1.20.53-py2.py3-none-any.whl
Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.6/site-packages (from gitpython->pyhelm)
Requirement already satisfied: six>=1.5.2 in /usr/lib/python3.6/site-packages (from grpcio->pyhelm)
Requirement already satisfied: setuptools in /usr/lib/python3.6/site-packages (from grpcio-tools->pyhelm)
Requirement already satisfied: urllib3>=1.21.1 in /usr/lib/python3.6/site-packages (from requests->pyhelm)
Collecting s3transfer<0.4.0,>=0.3.0 (from boto3->pyhelm)
  Using cached https://files.pythonhosted.org/packages/00/89/0cb4e92c239e6425b9b0035227b8cdf9d3d098a5c9e95632c3815df63a09/s3transfer-0.3.7-py2.py3-none-any.whl
Collecting jmespath<1.0.0,>=0.7.1 (from boto3->pyhelm)
  Using cached https://files.pythonhosted.org/packages/07/cb/5f001272b6faeb23c1c9e0acc04d48eaaf5c862c17709d20e3469c6e0139/jmespath-0.10.0-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore->pyhelm)
  Using cached https://files.pythonhosted.org/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl
Requirement already satisfied: smmap<5,>=3.0.1 in /usr/local/lib/python3.6/site-packages (from gitdb<5,>=4.0.1->gitpython->pyhelm)
Installing collected packages: grpcio, protobuf, grpcio-tools, supermutes, jmespath, python-dateutil, botocore, s3transfer, boto3, pyhelm
  Running setup.py install for grpcio ... error
    Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-t3ikcv1w/grpcio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-7m4ntadb-record/install-record.txt --single-version-externally-managed --compile:
    Found cython-generated files...
    running install
    running build
    running build_py
    running build_project_metadata
    creating python_build
    creating python_build/lib.linux-x86_64-3.6
    creating python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_compression.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_channel.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_common.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_utilities.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_simple_stubs.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_plugin_wrapping.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_interceptor.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_grpcio_metadata.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_server.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_runtime_protos.py -> python_build/lib.linux-x86_64-3.6/grpc
    copying src/python/grpcio/grpc/_auth.py -> python_build/lib.linux-x86_64-3.6/grpc
    creating python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/_server_adaptations.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/interfaces.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/_metadata.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/utilities.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/implementations.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    copying src/python/grpcio/grpc/beta/_client_adaptations.py -> python_build/lib.linux-x86_64-3.6/grpc/beta
    creating python_build/lib.linux-x86_64-3.6/grpc/experimental
    copying src/python/grpcio/grpc/experimental/gevent.py -> python_build/lib.linux-x86_64-3.6/grpc/experimental
    copying src/python/grpcio/grpc/experimental/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/experimental
    copying src/python/grpcio/grpc/experimental/session_cache.py -> python_build/lib.linux-x86_64-3.6/grpc/experimental
    creating python_build/lib.linux-x86_64-3.6/grpc/framework
    copying src/python/grpcio/grpc/framework/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/framework
    creating python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_base_server.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_metadata.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_typing.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_call.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_channel.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_base_channel.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_interceptor.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_server.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_base_call.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    copying src/python/grpcio/grpc/aio/_utils.py -> python_build/lib.linux-x86_64-3.6/grpc/aio
    creating python_build/lib.linux-x86_64-3.6/grpc/_cython
    copying src/python/grpcio/grpc/_cython/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/_cython
    creating python_build/lib.linux-x86_64-3.6/grpc/experimental/aio
    copying src/python/grpcio/grpc/experimental/aio/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/experimental/aio
    creating python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/callable_util.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/abandonment.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/stream.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/stream_util.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/future.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    copying src/python/grpcio/grpc/framework/foundation/logging_pool.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/foundation
    creating python_build/lib.linux-x86_64-3.6/grpc/framework/common
    copying src/python/grpcio/grpc/framework/common/style.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/common
    copying src/python/grpcio/grpc/framework/common/cardinality.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/common
    copying src/python/grpcio/grpc/framework/common/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/common
    creating python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces
    copying src/python/grpcio/grpc/framework/interfaces/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces
    creating python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/face
    copying src/python/grpcio/grpc/framework/interfaces/face/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/face
    copying src/python/grpcio/grpc/framework/interfaces/face/utilities.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/face
    copying src/python/grpcio/grpc/framework/interfaces/face/face.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/face
    creating python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/base
    copying src/python/grpcio/grpc/framework/interfaces/base/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/base
    copying src/python/grpcio/grpc/framework/interfaces/base/utilities.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/base
    copying src/python/grpcio/grpc/framework/interfaces/base/base.py -> python_build/lib.linux-x86_64-3.6/grpc/framework/interfaces/base
    creating python_build/lib.linux-x86_64-3.6/grpc/_cython/_cygrpc
    copying src/python/grpcio/grpc/_cython/_cygrpc/__init__.py -> python_build/lib.linux-x86_64-3.6/grpc/_cython/_cygrpc
    creating python_build/lib.linux-x86_64-3.6/grpc/_cython/_credentials
    copying src/python/grpcio/grpc/_cython/_credentials/roots.pem -> python_build/lib.linux-x86_64-3.6/grpc/_cython/_credentials
    running build_ext
    Found cython-generated files...
    building 'grpc._cython.cygrpc' extension
    creating python_build/temp.linux-x86_64-3.6
    creating python_build/temp.linux-x86_64-3.6/src
    creating python_build/temp.linux-x86_64-3.6/src/python
    creating python_build/temp.linux-x86_64-3.6/src/python/grpcio
    creating python_build/temp.linux-x86_64-3.6/src/python/grpcio/grpc
    creating python_build/temp.linux-x86_64-3.6/src/python/grpcio/grpc/_cython
    creating python_build/temp.linux-x86_64-3.6/src/core
    creating python_build/temp.linux-x86_64-3.6/src/core/ext
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/census
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/health
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/grpclb
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/pick_first
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/priority
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/ring_hash
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/round_robin
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/weighted_target
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/lb_policy/xds
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/dns
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/dns/c_ares
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/dns/native
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/fake
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/google_c2p
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/sockaddr
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/resolver/xds
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_idle
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/deadline
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/fault_injection
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/http
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/http/client
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/http/message_compress
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/http/server
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/max_age
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/message_size
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/filters/workarounds
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/alpn
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/client
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/client/insecure
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/client/secure
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/server
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/server/insecure
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/server/secure
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/chttp2/transport
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/transport/inproc
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/admin
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/admin/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/annotations
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/accesslog
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/accesslog/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/bootstrap
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/bootstrap/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/cluster
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/cluster/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/core
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/core/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/endpoint
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/endpoint/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/listener
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/listener/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/metrics
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/metrics/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/overload
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/overload/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/rbac
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/rbac/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/route
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/route/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/trace
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/config/trace/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/clusters
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/common
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/common/fault
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/http
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/http/fault
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/http/router
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/network
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/transport_sockets
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/cluster
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/cluster/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/discovery
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/discovery/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/endpoint
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/endpoint/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/listener
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/listener/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/load_stats
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/load_stats/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/route
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/route/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/status
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/service/status/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/matcher
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/matcher/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/metadata
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/metadata/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/tracing
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/tracing/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/envoy/type/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/google
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/google/api
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/google/api/expr
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/google/api/expr/v1alpha1
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/google/protobuf
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/google/rpc
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto/grpc
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto/grpc/gcp
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto/grpc/health
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto/grpc/health/v1
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto/grpc/lb
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/src/proto/grpc/lb/v1
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa/annotations
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa/data
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa/data/orca
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa/data/orca/v1
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa/type
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/udpa/type/v1
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/validate
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/xds
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/xds/core
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upb-generated/xds/core/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/admin
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/admin/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/annotations
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/accesslog
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/bootstrap
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/cluster
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/cluster/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/core
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/core/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/endpoint
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/listener
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/listener/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/metrics
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/metrics/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/overload
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/overload/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/route
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/route/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/trace
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/config/trace/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/clusters
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/common
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/http
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/network
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/cluster
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/cluster/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/discovery
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/discovery/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/endpoint
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/listener
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/listener/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/load_stats
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/route
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/route/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/status
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/service/status/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/matcher
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/matcher/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/metadata
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/metadata/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/tracing
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/tracing/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/envoy/type/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/google
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/google/api
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/google/protobuf
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/google/rpc
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/udpa
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/udpa/annotations
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/udpa/type
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/udpa/type/v1
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/validate
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/xds
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/xds/core
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/upbdefs-generated/xds/core/v3
    creating python_build/temp.linux-x86_64-3.6/src/core/ext/xds
    creating python_build/temp.linux-x86_64-3.6/src/core/lib
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/avl
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/backoff
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/channel
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/compression
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/debug
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/gpr
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/gprpp
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/http
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/iomgr
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/iomgr/executor
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/iomgr/poller
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/json
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/matchers
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/profiling
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/context
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/alts
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/composite
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/external
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/fake
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/google_default
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/iam
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/insecure
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/jwt
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/local
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/oauth2
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/plugin
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/ssl
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/tls
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/credentials/xds
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector/alts
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector/fake
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector/insecure
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector/local
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector/ssl
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/security_connector/tls
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/transport
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/security/util
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/slice
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/surface
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/transport
    creating python_build/temp.linux-x86_64-3.6/src/core/lib/uri
    creating python_build/temp.linux-x86_64-3.6/src/core/plugin_registry
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/alts
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/alts/crypt
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/alts/frame_protector
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/alts/handshaker
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/alts/zero_copy_frame_protector
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/ssl
    creating python_build/temp.linux-x86_64-3.6/src/core/tsi/ssl/session_cache
    creating python_build/temp.linux-x86_64-3.6/third_party
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/base
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/base/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/container
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/container/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/debugging
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/debugging/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/hash
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/hash/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/numeric
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/status
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/strings
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/strings/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/strings/internal/str_format
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/synchronization
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/synchronization/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/time
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/time/internal
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/time/internal/cctz
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/time/internal/cctz/src
    creating python_build/temp.linux-x86_64-3.6/third_party/abseil-cpp/absl/types
    creating python_build/temp.linux-x86_64-3.6/third_party/address_sorting
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/asn1
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/base64
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/bio
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/blake2
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/bn_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/buf
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/bytestring
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/chacha
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/cipher_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/cmac
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/conf
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/curve25519
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/dh_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/digest_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/dsa
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/ec_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/ecdh_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/engine
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/err
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/evp
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/fipsmodule
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/hkdf
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/hpke
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/hrss
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/lhash
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/obj
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/pem
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/pkcs7
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/pkcs8
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/poly1305
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/pool
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/rand_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/rc4
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/rsa_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/siphash
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/stack
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/trust_token
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/x509
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/x509v3
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/ssl
    creating python_build/temp.linux-x86_64-3.6/third_party/cares
    creating python_build/temp.linux-x86_64-3.6/third_party/cares/cares
    creating python_build/temp.linux-x86_64-3.6/third_party/re2
    creating python_build/temp.linux-x86_64-3.6/third_party/re2/re2
    creating python_build/temp.linux-x86_64-3.6/third_party/re2/util
    creating python_build/temp.linux-x86_64-3.6/third_party/upb
    creating python_build/temp.linux-x86_64-3.6/third_party/upb/upb
    creating python_build/temp.linux-x86_64-3.6/third_party/zlib
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/linux-x86_64
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/linux-x86_64/crypto
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/linux-x86_64/crypto/chacha
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/linux-x86_64/crypto/cipher_extra
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/linux-x86_64/crypto/fipsmodule
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/linux-x86_64/crypto/test
    creating python_build/temp.linux-x86_64-3.6/third_party/boringssl-with-bazel/src/crypto/hrss/asm
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -D_WIN32_WINNT=1536 -DGPR_BACKWARDS_COMPATIBILITY_MODE=1 -DHAVE_CONFIG_H=1 -DGRPC_ENABLE_FORK_SUPPORT=1 -DPyMODINIT_FUNC=extern "C" __attribute__((visibility ("default"))) PyObject* -DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1 -Isrc/python/grpcio -Iinclude -I. -Ithird_party/abseil-cpp -Ithird_party/address_sorting/include -Ithird_party/cares -Ithird_party/cares/cares -Ithird_party/cares/config_linux -Ithird_party/re2 -Ithird_party/boringssl-with-bazel/src/include -Ithird_party/upb -Isrc/core/ext/upb-generated -Isrc/core/ext/upbdefs-generated -Ithird_party/xxhash -Ithird_party/zlib -I/usr/include/python3.6m -c src/python/grpcio/grpc/_cython/cygrpc.cpp -o python_build/temp.linux-x86_64-3.6/src/python/grpcio/grpc/_cython/cygrpc.o -std=c++11 -std=gnu99 -fvisibility=hidden -fno-wrapv -fno-exceptions -pthread
    cc1plus: warning: command line option โ€˜-std=gnu99โ€™ is valid for C/ObjC but not for C++ [enabled by default]
    src/python/grpcio/grpc/_cython/cygrpc.cpp: In function โ€˜PyObject* __pyx_pw_4grpc_7_cython_6cygrpc_7Channel_9segregated_call(PyObject*, PyObject*, PyObject*)โ€™:
    src/python/grpcio/grpc/_cython/cygrpc.cpp:19131:76: warning: โ€˜__pyx_v_c_completion_queueโ€™ may be used uninitialized in this function [-Wmaybe-uninitialized]
       __pyx_v_segregated_call->_c_completion_queue = __pyx_v_c_completion_queue;
                                                                                ^
    src/python/grpcio/grpc/_cython/cygrpc.cpp:18771:26: note: โ€˜__pyx_v_c_completion_queueโ€™ was declared here
       grpc_completion_queue *__pyx_v_c_completion_queue;
                              ^
    src/python/grpcio/grpc/_cython/cygrpc.cpp: At global scope:
    src/python/grpcio/grpc/_cython/cygrpc.cpp:150516:1: warning: โ€˜void __Pyx_PyAsyncGen_Fini()โ€™ defined but not used [-Wunused-function]
     __Pyx_PyAsyncGen_Fini(void)
     ^
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -D_WIN32_WINNT=1536 -DGPR_BACKWARDS_COMPATIBILITY_MODE=1 -DHAVE_CONFIG_H=1 -DGRPC_ENABLE_FORK_SUPPORT=1 -DPyMODINIT_FUNC=extern "C" __attribute__((visibility ("default"))) PyObject* -DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1 -Isrc/python/grpcio -Iinclude -I. -Ithird_party/abseil-cpp -Ithird_party/address_sorting/include -Ithird_party/cares -Ithird_party/cares/cares -Ithird_party/cares/config_linux -Ithird_party/re2 -Ithird_party/boringssl-with-bazel/src/include -Ithird_party/upb -Isrc/core/ext/upb-generated -Isrc/core/ext/upbdefs-generated -Ithird_party/xxhash -Ithird_party/zlib -I/usr/include/python3.6m -c src/core/ext/filters/census/grpc_context.cc -o python_build/temp.linux-x86_64-3.6/src/core/ext/filters/census/grpc_context.o -std=c++11 -std=gnu99 -fvisibility=hidden -fno-wrapv -fno-exceptions -pthread
    cc1plus: warning: command line option โ€˜-std=gnu99โ€™ is valid for C/ObjC but not for C++ [enabled by default]
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -D_WIN32_WINNT=1536 -DGPR_BACKWARDS_COMPATIBILITY_MODE=1 -DHAVE_CONFIG_H=1 -DGRPC_ENABLE_FORK_SUPPORT=1 -DPyMODINIT_FUNC=extern "C" __attribute__((visibility ("default"))) PyObject* -DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1 -Isrc/python/grpcio -Iinclude -I. -Ithird_party/abseil-cpp -Ithird_party/address_sorting/include -Ithird_party/cares -Ithird_party/cares/cares -Ithird_party/cares/config_linux -Ithird_party/re2 -Ithird_party/boringssl-with-bazel/src/include -Ithird_party/upb -Isrc/core/ext/upb-generated -Isrc/core/ext/upbdefs-generated -Ithird_party/xxhash -Ithird_party/zlib -I/usr/include/python3.6m -c src/core/ext/filters/client_channel/backend_metric.cc -o python_build/temp.linux-x86_64-3.6/src/core/ext/filters/client_channel/backend_metric.o -std=c++11 -std=gnu99 -fvisibility=hidden -fno-wrapv -fno-exceptions -pthread
    cc1plus: warning: command line option โ€˜-std=gnu99โ€™ is valid for C/ObjC but not for C++ [enabled by default]
    In file included from ./src/core/ext/filters/client_channel/lb_policy.h:30:0,
                     from ./src/core/ext/filters/client_channel/backend_metric.h:24,
                     from src/core/ext/filters/client_channel/backend_metric.cc:19:
    ./src/core/ext/filters/client_channel/server_address.h: In member function โ€˜virtual std::string grpc_core::ServerAddressWeightAttribute::ToString() constโ€™:
    ./src/core/ext/filters/client_channel/server_address.h:135:41: error: no matching function for call to โ€˜StrFormat(const char [3], const uint32_t&)โ€™
         return absl::StrFormat("%d", weight_);
                                             ^
    ./src/core/ext/filters/client_channel/server_address.h:135:41: note: candidate is:
    In file included from ./src/core/ext/filters/client_channel/server_address.h:28:0,
                     from ./src/core/ext/filters/client_channel/lb_policy.h:30,
                     from ./src/core/ext/filters/client_channel/backend_metric.h:24,
                     from src/core/ext/filters/client_channel/backend_metric.cc:19:
    third_party/abseil-cpp/absl/strings/str_format.h:338:34: note: template<class ... Args> std::string absl::lts_2020_09_23::StrFormat(absl::lts_2020_09_23::FormatSpec<Args ...>&, const Args& ...)
     ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec<Args...>& format,
                                      ^
    third_party/abseil-cpp/absl/strings/str_format.h:338:34: note:   template argument deduction/substitution failed:
    In file included from ./src/core/ext/filters/client_channel/lb_policy.h:30:0,
                     from ./src/core/ext/filters/client_channel/backend_metric.h:24,
                     from src/core/ext/filters/client_channel/backend_metric.cc:19:
    ./src/core/ext/filters/client_channel/server_address.h:135:41: note:   mismatched types โ€˜absl::lts_2020_09_23::FormatSpec<Args ...>โ€™ and โ€˜const char [3]โ€™
         return absl::StrFormat("%d", weight_);
                                             ^
    ./src/core/ext/filters/client_channel/server_address.h:136:3: warning: control reaches end of non-void function [-Wreturn-type]
       }
       ^
    creating tmp
    creating tmp/tmpbc_66654
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.6m -c /tmp/tmpbc_66654/a.c -o tmp/tmpbc_66654/a.o
    Traceback (most recent call last):
      File "/usr/lib64/python3.6/distutils/unixccompiler.py", line 127, in _compile
        extra_postargs)
      File "/tmp/pip-build-t3ikcv1w/grpcio/src/python/grpcio/_spawn_patch.py", line 54, in _commandfile_spawn
        _classic_spawn(self, command)
      File "/usr/lib64/python3.6/distutils/ccompiler.py", line 909, in spawn
        spawn(cmd, dry_run=self.dry_run)
      File "/usr/lib64/python3.6/distutils/spawn.py", line 36, in spawn
        _spawn_posix(cmd, search_path, dry_run=dry_run)
      File "/usr/lib64/python3.6/distutils/spawn.py", line 159, in _spawn_posix
        % (cmd, exit_status))
    distutils.errors.DistutilsExecError: command 'gcc' failed with exit status 1

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/tmp/pip-build-t3ikcv1w/grpcio/src/python/grpcio/commands.py", line 282, in build_extensions
        build_ext.build_ext.build_extensions(self)
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 448, in build_extensions
        self._build_extensions_serial()
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 473, in _build_extensions_serial
        self.build_extension(ext)
      File "/usr/lib/python3.6/site-packages/setuptools/command/build_ext.py", line 199, in build_extension
        _build_ext.build_extension(self, ext)
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 533, in build_extension
        depends=ext.depends)
      File "/usr/lib64/python3.6/distutils/ccompiler.py", line 574, in compile
        self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
      File "/usr/lib64/python3.6/distutils/unixccompiler.py", line 129, in _compile
        raise CompileError(msg)
    distutils.errors.CompileError: command 'gcc' failed with exit status 1

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-t3ikcv1w/grpcio/setup.py", line 525, in <module>
        cmdclass=COMMAND_CLASS,
      File "/usr/lib/python3.6/site-packages/setuptools/__init__.py", line 129, in setup
        return distutils.core.setup(**attrs)
      File "/usr/lib64/python3.6/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/lib64/python3.6/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/lib/python3.6/site-packages/setuptools/command/install.py", line 61, in run
        return orig.install.run(self)
      File "/usr/lib64/python3.6/distutils/command/install.py", line 556, in run
        self.run_command('build')
      File "/usr/lib64/python3.6/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/lib64/python3.6/distutils/command/build.py", line 135, in run
        self.run_command(cmd_name)
      File "/usr/lib64/python3.6/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/lib/python3.6/site-packages/setuptools/command/build_ext.py", line 78, in run
        _build_ext.run(self)
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 339, in run
        self.build_extensions()
      File "/tmp/pip-build-t3ikcv1w/grpcio/src/python/grpcio/commands.py", line 287, in build_extensions
        "Failed `build_ext` step:\n{}".format(formatted_exception))
    commands.CommandError: Failed `build_ext` step:
    Traceback (most recent call last):
      File "/usr/lib64/python3.6/distutils/unixccompiler.py", line 127, in _compile
        extra_postargs)
      File "/tmp/pip-build-t3ikcv1w/grpcio/src/python/grpcio/_spawn_patch.py", line 54, in _commandfile_spawn
        _classic_spawn(self, command)
      File "/usr/lib64/python3.6/distutils/ccompiler.py", line 909, in spawn
        spawn(cmd, dry_run=self.dry_run)
      File "/usr/lib64/python3.6/distutils/spawn.py", line 36, in spawn
        _spawn_posix(cmd, search_path, dry_run=dry_run)
      File "/usr/lib64/python3.6/distutils/spawn.py", line 159, in _spawn_posix
        % (cmd, exit_status))
    distutils.errors.DistutilsExecError: command 'gcc' failed with exit status 1

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/tmp/pip-build-t3ikcv1w/grpcio/src/python/grpcio/commands.py", line 282, in build_extensions
        build_ext.build_ext.build_extensions(self)
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 448, in build_extensions
        self._build_extensions_serial()
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 473, in _build_extensions_serial
        self.build_extension(ext)
      File "/usr/lib/python3.6/site-packages/setuptools/command/build_ext.py", line 199, in build_extension
        _build_ext.build_extension(self, ext)
      File "/usr/lib64/python3.6/distutils/command/build_ext.py", line 533, in build_extension
        depends=ext.depends)
      File "/usr/lib64/python3.6/distutils/ccompiler.py", line 574, in compile
        self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
      File "/usr/lib64/python3.6/distutils/unixccompiler.py", line 129, in _compile
        raise CompileError(msg)
    distutils.errors.CompileError: command 'gcc' failed with exit status 1


    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-t3ikcv1w/grpcio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-7m4ntadb-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-t3ikcv1w/grpcio/

how to give chart version ?

from pyhelm.chartbuilder import ChartBuilder

chart = ChartBuilder({"name": "xyz", "source": {"type": "repo", "location": #"eee"}})

install failed on mac

I'm using python3 on mac OS

$ pip3 install pyhelm
Collecting pyhelm
  Using cached pyhelm-0.0.1.dev33.tar.gz
Collecting grpc==0.3.post19 (from pyhelm)
  Using cached grpc-0.3-19.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/x0/0fb1ckx53f58_t_yh8shttm80000gp/T/pip-build-71bgup46/grpc/setup.py", line 7, in <module>
        version_tuple = __import__('grpc').VERSION
      File "/private/var/folders/x0/0fb1ckx53f58_t_yh8shttm80000gp/T/pip-build-71bgup46/grpc/grpc/__init__.py", line 6, in <module>
        from .rpc import *
      File "/private/var/folders/x0/0fb1ckx53f58_t_yh8shttm80000gp/T/pip-build-71bgup46/grpc/grpc/rpc.py", line 141
        except OSError, ex:
                      ^
    SyntaxError: invalid syntax

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/x0/0fb1ckx53f58_t_yh8shttm80000gp/T/pip-build-71bgup46/grpc/

Any ideas?
Thx

APP VERSION missing when charts loaded using via Ansible

When using Ansible to deploy a new chart into Kubernetes, using PyHelm, the resulting chart doesn't have the APP VERSION column populated. Deploying the chart using helm itself doesn't have this issue.

A correct deployment, run using this command:

helm install --name nginx-ingress --namespace nginx-ingress -f helm/nginx-ingress/values.yml stable/nginx-ingress

looks like this:

$ helm list
NAME            REVISION        UPDATED                         STATUS          CHART                   APP VERSION     NAMESPACE
gitlab-runner   4               Tue Apr 16 11:45:32 2019        DEPLOYED        gitlab-runner-0.3.0     11.9.0          gitlab-runners
ingress-nginx   1               Thu May  9 06:50:50 2019        DEPLOYED        nginx-ingress-1.6.0     0.24.1          ingress-nginx

The deployment done via Ansible, using this play:

- name: Deploy NGiNX Ingress 
  helm:
    host: tiller-host
    chart:
      name: nginx-ingress
      version: 1.6.0
      source:
        type: repo
        location: https://kubernetes-charts.storage.googleapis.com
      values: "{{ lookup('file', 'helm/nginx-ingress/values.yml') }}"
    state: present
    name: ingress-nginx
    namespace: ingress-nginx
  delegate_to: "{{ groups['kube-master'][0] }}"
  tags: helm_charts

Yields the incorrect release, missing the APP VERSION of 0.24.1

$ helm list
NAME            REVISION        UPDATED                         STATUS          CHART                   APP VERSION     NAMESPACE
gitlab-runner   4               Tue Apr 16 11:45:32 2019        DEPLOYED        gitlab-runner-0.3.0     11.9.0          gitlab-runners
ingress-nginx   1               Fri May 10 16:03:29 2019        DEPLOYED        nginx-ingress-1.6.0                     ingress-nginx

This APP VERSION is read from the value appVersion here

Bug, list_releases exception StatusCode.RESOURCE_EXHAUSTED

Hi,

On an environment with around 47 helm releases I'm getting the posted error when calling list_releases()

This happens with pyhelm version: 0.15 and 2.11.3

Exception when calling Tiller helm_release_names: <_Rendezvous of RPC that terminated with:
	status = StatusCode.RESOURCE_EXHAUSTED
	details = "Received message larger than max (5017684 vs. 4194304)"
	debug_error_string = "{"created":"@1568384219.808096928","description":"Received message larger than max (5017684 vs. 4194304)","file":"src/core/ext/filters/message_size/message_size_filter.cc","file_line":190,"grpc_status":8}"

Can you please help?

HTTP(S) repository authentication

It doesn't appear that this supports authenticated helm repositories (i.e. Artifactory). I'm using the library via the Ansible provider currently, it's looking like I'm going to have to fall back to using helm with command: or shell:

Deployment Metadata

Is there a way to get metadata about a deployed chart?

If I use PyHelm to deploy a chart containing a pod and service - can I get the port the service is listening on (and other data about the pod, etc)? This would allow writing a client that can immediately make use of a deployment.

@muralikarthikk

Is there a way to connect to Tiller using TLS?

I am thinking on securing my Helm installation by using TLS towards my Tiller deployment (--tls option). As far as I see the only options I can use to connect to Tiller using pyhelm are "host" and "port", is there a way to provide the TLS certificates to be used?

Thanks!

Unable to install cert-manager using pyhelm

Hi,

I am trying to install cert-manager using PyHelm

> helm search cert-manager
NAME               	CHART VERSION	APP VERSION	DESCRIPTION                  
stable/cert-manager	v0.5.2       	v0.5.2     	A Helm chart for cert-manager

When I try to instantiate the ChartBuilder with the chart information like following:

from pyhelm import chartbuilder
chart = { "name": "cert-manager", "version": "v0.5.2", "source": { "type": "repo", "location": "https://kubernetes-charts.storage.googleapis.com" }}
chartb = chartbuilder.ChartBuilder(chart)

I get the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/pyhelm/chartbuilder.py", line 47, in __init__
    self.source_directory = self.source_clone()
  File "/usr/local/lib/python2.7/site-packages/pyhelm/chartbuilder.py", line 90, in source_clone
    self.chart.source.headers)
  File "/usr/local/lib/python2.7/site-packages/pyhelm/repo.py", line 131, in from_repo
    metadata = sorted(versions, key=_semver_sorter)[-1]
  File "/usr/local/lib/python2.7/site-packages/pyhelm/repo.py", line 37, in _semver_sorter
    return list(map(int, x['version'].split('.')))
ValueError: invalid literal for int() with base 10: 'v0'

The installation using helm command line is working properly.

> helm install stable/cert-manager --version v0.5.2 --set rbac.create=true
NAME:   illmannered-kudu
LAST DEPLOYED: Mon Jan 14 08:07:58 2019
NAMESPACE: default
STATUS: DEPLOYED

Best,

from_repo hides errors

I have a chartmuseum where the charts are stored under <url>/charts/. When I run the following:

from_repo(<url>, 'mychart')

I get no error, but the result is None. This means that consecutive actions on that result will fail.

grpcio vs grpc dependency

The pyhelm package takes a depedency on both the grpc and grpcio Python packages.

I'm a bit confused about the dependency on grpc, which was introduced in #22. It seems this may be unintential, since the grpc package is not related to grpcio (see eg grpc/grpc#4100).

grpc doesn't work on Python 3, hence it would be great if this dependency could be lifted.

/cc @gardlt

Provide support for listing all helm releases

This piece of code:

    def list_releases(self):
        """
        List Helm Releases
        """
        releases = []

        offset = None
        stub = ReleaseServiceStub(self._channel)

        while True:
            req = ListReleasesRequest(limit=RELEASE_LIMIT, offset=offset)
            release_list = stub.ListReleases(req, self._timeout,
                                             metadata=self.metadata)

currently lists only the helm releases in DEPLOYED state.

See related code - https://github.com/helm/helm/blob/master/pkg/tiller/release_list.go#L31, https://github.com/helm/helm/blob/master/_proto/hapi/release/status.proto.

Would it be possible to make a support for listing ALL or selected statuses in pyhelm client?

Thank you in advance.

Context:

  • we are using the pyhelm inside our garbage-collector tool running as k8s cronjob and we need to garbage all helm releases which are not needed anymore (incl. failed and other statuses)

Receive message max size & RELEASE_LIMIT

Hi! I'd like to ask for the expertise :)

I've encountered the "Received message larger than max" problem:

grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.INVALID_ARGUMENT, Received message larger than max (6147341 vs. 4194304))

This is the result from the environment with hundreds of releases and with some of them having more than 200 revisions, so I guess I kind of brought this on myself, but wouldn't it make sense to add options to the insecure_channel and leave the max size opened for configuration, e.g., like the RELEASE_LIMIT? Speaking of which, I hit the problem when trying to increase this limit. It's current value is too small for me and I didn't spotted any other way of getting the complete list of deployed stuff than to tweak it. And this is how I got to the the max size changing idea and although it works, it does not seem really transparent nor long-term approach. I guess, except really high values, it would be just postponing the inevitable. Does it make sense?

Eventually, I thought of using the offset in the request and even decreasing the current release limit, so in result of getting the complete list of releases, but in smaller chunks. Does not need to know the current and most importantly the possible maximum message's size and returns the whole list at the end.

Here is what I've changed in order to push my use-case through:

--- a/pyhelm/tiller.py
+++ b/pyhelm/tiller.py
@@ -12,6 +12,7 @@ TILLER_PORT = 44134
 TILLER_VERSION = b'2.9.1'
 TILLER_TIMEOUT = 300
 RELEASE_LIMIT = 64
+RECEIVED_MSG_MAX = 4194304
 
 
 class Tiller(object):
@@ -43,7 +44,10 @@ class Tiller(object):
         '''
         Return a tiller channel
         '''
-        return grpc.insecure_channel('%s:%s' % (self._host, self._port))
+        return grpc.insecure_channel('%s:%s' % (self._host, self._port),
+                                    options=[
+                                        ('grpc.max_receive_message_length', RECEIVED_MSG_MAX),
+                                    ])
 
     def tiller_status(self):
         '''
@@ -59,12 +63,20 @@ class Tiller(object):
         List Helm Releases
         '''
         releases = []
+
+        offset = None
         stub = ReleaseServiceStub(self.channel)
-        req = ListReleasesRequest(limit=RELEASE_LIMIT)
-        release_list = stub.ListReleases(req, self.timeout,
-                                         metadata=self.metadata)
-        for y in release_list:
-            releases.extend(y.releases)
+
+        while (offset is None or len(offset) > 0):
+
+            req = ListReleasesRequest(limit=RELEASE_LIMIT,offset=offset)
+            release_list = stub.ListReleases(req, self.timeout,
+                                            metadata=self.metadata)
+        
+            for y in release_list:
+                offset = str(y.next)
+                releases.extend(y.releases)
+        
         return releases

DNS resolution failed

Hi,
I think I'm incorrectly setting TILLER_HOST. Please let me know what I'm doing wrong. Here is what I am doing:

> tiller_pod=pod/tiller-deploy-69f6c9d555-j6drx
> kubectl port-forward $tiller_pod 44134 -n kube-system

In my Python script

tiller_host = 'http://localhost:44134'
tiller = Tiller(tiller_host)
chart = ChartBuilder({"name": "nginx-ingress",
                           "source": {"type": "repo", "location": "https://kubernetes-charts.storage.googleapis.com"}})
tiller.install_release(chart.get_helm_chart(), dry_run=False, namespace='nginx-ingress') 

The error I get is:


/Users/rabraham/Documents/dev/fifteenrock/deployment/venv/bin/python /Users/rabraham/Documents/dev/fifteenrock/deployment/scripts/main.py
2019-06-15 21:03:58,563 - ChartBuilder - INFO - Cloning https://kubernetes-charts.storage.googleapis.com/ for release nginx-ingress
Traceback (most recent call last):
..
    tiller.install_release(chart.get_helm_chart(), dry_run=False, namespace='nginx-ingress')
  File "/Users/rabraham/Documents/dev/fifteenrock/deployment/venv/lib/python3.6/site-packages/pyhelm/tiller.py", line 201, in install_release
    metadata=self.metadata)
  File "/Users/rabraham/Documents/dev/fifteenrock/deployment/venv/lib/python3.6/site-packages/grpc/_channel.py", line 562, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "/Users/rabraham/Documents/dev/fifteenrock/deployment/venv/lib/python3.6/site-packages/grpc/_channel.py", line 466, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
	status = StatusCode.UNAVAILABLE
	details = "DNS resolution failed"
	debug_error_string = "{"created":"@1560647079.805992000","description":"Failed to create subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":2715,"referenced_errors":[{"created":"@1560647079.805986000","description":"Resolver transient failure","file":"src/core/ext/filters/client_channel/resolving_lb_policy.cc","file_line":335,"referenced_errors":[{"created":"@1560647079.805985000","description":"DNS resolution failed","file":"src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc","file_line":327,"grpc_status":14,"referenced_errors":[{"created":"@1560647079.805897000","description":"C-ares status is not ARES_SUCCESS: Domain name not found","file":"src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc","file_line":240,"referenced_errors":[{"created":"@1560647079.793972000","description":"C-ares status is not ARES_SUCCESS: Domain name not found","file":"src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc","file_line":240}]}]}]}]}"
>



tiller.install_release issues

Hi All,

I am trying to use tiller.install_release to automate helm install charts. but somehow chart shows deployed. but there are no deployments available. my test app deployment is having one pod and two container inside that pod. below is the code i am using.

src = "/opt/testapp"
chart = ChartBuilder({'name': 'testApp', 'source': {'type': 'directory', 'location': src}})
tiller.install_release( chart.get_helm_chart(),
dry_run=False,
namespace='default',
name='testApp')

above code is only creating the namespace and config map service.
but the same chart location if i use with command line "helm install -n testApp /opt/testapp" deployment get successful and pod is deployed and running.

can you please help what is the issue here in my code, why "tiller.install_release" is not working as expected?

Issues with logging

Please merge #4. Until logging in tiller.py is fixed, I can't submit my pull request for the ansible module.

unable to install pyhelm - error in pygit

Hi,

trying to install pyhelm produces the following issue:

[root@QA-Machine orion]# pipenv install pyhelm
Installing pyhelm?
Looking in indexes: http://aeenexus3:8081/repository/PyPi-All/simple
Collecting pyhelm
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/c1/53/bd8bf05de4cfdf4b7654b1651e697657e0a14fa428bb872f59d5f20aebef/pyhelm-0.0.1.dev39-py2-none-any.whl
Collecting grpcio-tools==1.1.3 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/43/3c/3778dd957253e7f4ff7da02efd9bdf1bfd5f809170245430b8613cc377c3/grpcio_tools-1.1.3-cp27-cp27m-manylinux1_x86_64.whl (19.3MB)
Collecting pygit2>=0.24.2 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/fe/48/f85a605b7337b5562dff902ba1a50d8f22d399e0b623d0c48363dc84fa81/pygit2-0.27.1.tar.gz (477kB)
Collecting protobuf==3.2.0 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/43/16/cdfe80080683b5a76ea489a516bb5859f1550476fdec9b20260987fa42c6/protobuf-3.2.0-py2.py3-none-any.whl (360kB)
Collecting requests==2.14.2 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/e4/b0/286e8a936158e5cc5791d5fa3bc4b1d5a7e1ff4e5b3f3766b63d8e97708a/requests-2.14.2-py2.py3-none-any.whl (560kB)
Collecting supermutes==0.2.5 (from pyhelm)
Collecting PyYAML==3.12 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz (253kB)
Collecting grpcio==1.1.3 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/ab/ca/ce0784be137d4ac2ca3ba6a8760190d007487f13fd70b1b0a0cab54e39d5/grpcio-1.1.3-cp27-cp27m-manylinux1_x86_64.whl (5.0MB)
Requirement already satisfied: cffi in ./.venv/lib/python2.7/site-packages (from pygit2>=0.24.2->pyhelm) (1.11.5)
Requirement already satisfied: six in ./.venv/lib/python2.7/site-packages (from pygit2>=0.24.2->pyhelm) (1.11.0)
Requirement already satisfied: setuptools in ./.venv/lib/python2.7/site-packages (from protobuf==3.2.0->pyhelm) (40.0.0)
Collecting futures>=2.2.0 (from grpcio==1.1.3->pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/2d/99/b2c4e9d5a30f6471e410a146232b4118e697fa3ffc06d6a65efde84debd0/futures-3.2.0-py2-none-any.whl
Requirement already satisfied: enum34>=1.0.4 in ./.venv/lib/python2.7/site-packages (from grpcio==1.1.3->pyhelm) (1.1.6)
Requirement already satisfied: pycparser in ./.venv/lib/python2.7/site-packages (from cffi->pygit2>=0.24.2->pyhelm) (2.18)
Building wheels for collected packages: pygit2, PyYAML
Running setup.py bdist_wheel for pygit2: started
Running setup.py bdist_wheel for pygit2: finished with status 'error'
Running setup.py clean for pygit2
Running setup.py bdist_wheel for PyYAML: started
Running setup.py bdist_wheel for PyYAML: finished with status 'done'
Stored in directory: /root/.cache/pip/wheels/77/46/55/9c2501fdc1914400fbda88b72293ca0822364f9f1a9e313c38
Successfully built PyYAML
Failed to build pygit2
Installing collected packages: futures, protobuf, grpcio, grpcio-tools, pygit2, requests, supermutes, PyYAML, pyhelm
Running setup.py install for pygit2: started
Running setup.py install for pygit2: finished with status 'error'

Error: An error occurred while installing pyhelm!
Failed building wheel for pygit2
Command "/root/PycharmProjects/orion/.venv/bin/python2.7 -u -c "import setuptools, tokenize;file='/tmp/pip-install-84J42Y/pygit2/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-record-zzCLTo/install-record.txt --single-version-externally-managed --compile --install-headers /root/PycharmProjects/orion/.venv/include/site/python2.7/pygit2" failed with error code 1 in /tmp/pip-install-84J42Y/pygit2/

[root@QA-Machine orion]# pipenv install pyhelm

Installing pyhelm?
Looking in indexes: http://aeenexus3:8081/repository/PyPi-All/simple
Collecting pyhelm
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/c1/53/bd8bf05de4cfdf4b7654b1651e697657e0a14fa428bb872f59d5f20aebef/pyhelm-0.0.1.dev39-py2-none-any.whl
Requirement already satisfied: grpcio-tools==1.1.3 in ./.venv/lib/python2.7/site-packages (from pyhelm) (1.1.3)
Collecting pygit2>=0.24.2 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/fe/48/f85a605b7337b5562dff902ba1a50d8f22d399e0b623d0c48363dc84fa81/pygit2-0.27.1.tar.gz (477kB)
Requirement already satisfied: protobuf==3.2.0 in ./.venv/lib/python2.7/site-packages (from pyhelm) (3.2.0)
Collecting requests==2.14.2 (from pyhelm)
Downloading http://aeenexus3:8081/repository/PyPi-All/packages/e4/b0/286e8a936158e5cc5791d5fa3bc4b1d5a7e1ff4e5b3f3766b63d8e97708a/requests-2.14.2-py2.py3-none-any.whl (560kB)
Collecting supermutes==0.2.5 (from pyhelm)
Collecting PyYAML==3.12 (from pyhelm)
Requirement already satisfied: grpcio==1.1.3 in ./.venv/lib/python2.7/site-packages (from pyhelm) (1.1.3)
Requirement already satisfied: cffi in ./.venv/lib/python2.7/site-packages (from pygit2>=0.24.2->pyhelm) (1.11.5)
Requirement already satisfied: six in ./.venv/lib/python2.7/site-packages (from pygit2>=0.24.2->pyhelm) (1.11.0)
Requirement already satisfied: setuptools in ./.venv/lib/python2.7/site-packages (from protobuf==3.2.0->pyhelm) (40.0.0)
Requirement already satisfied: futures>=2.2.0 in ./.venv/lib/python2.7/site-packages (from grpcio==1.1.3->pyhelm) (3.2.0)
Requirement already satisfied: enum34>=1.0.4 in ./.venv/lib/python2.7/site-packages (from grpcio==1.1.3->pyhelm) (1.1.6)
Requirement already satisfied: pycparser in ./.venv/lib/python2.7/site-packages (from cffi->pygit2>=0.24.2->pyhelm) (2.18)
Building wheels for collected packages: pygit2
Running setup.py bdist_wheel for pygit2: started
Running setup.py bdist_wheel for pygit2: finished with status 'error'
Running setup.py clean for pygit2
Failed to build pygit2
Installing collected packages: pygit2, requests, supermutes, PyYAML, pyhelm
Running setup.py install for pygit2: started
Running setup.py install for pygit2: finished with status 'error'

Error: An error occurred while installing pyhelm!
Failed building wheel for pygit2
Command "/root/PycharmProjects/orion/.venv/bin/python2.7 -u -c "import setuptools, tokenize;file='/tmp/pip-install-DB_5PQ/pygit2/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-record-wmTDT9/install-record.txt --single-version-externally-managed --compile --install-headers /root/PycharmProjects/orion/.venv/include/site/python2.7/pygit2" failed with error code 1 in /tmp/pip-install-DB_5PQ/pygit2/

How to get rendered charts?

I tried running chart.get_helm_chart() and chart.dump() but none of them gives rendered charts. They still have gotemplate syntax. How do I get rendered charts?

Character encoding error when trying to deploy stable/metallb

When I try to deploy stable/metallb using Ansible, I get a weird error back about character encoding. I am not passing in any values at all, so this is using the chart's defaults.

The error I see is this:

TASK [build-namespaces : Deploy MetalLB] *********************************************************************************************************************************************************************************************************************************************************************************************************************************fatal: [localhost -> 172.31.50.3]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 172.31.50.3 closed.\r\n", "module_stdout": "2019-05-10 13:49:24,287 - ChartBuilder - INFO - Cloning https://kubernetes-charts.storage.googleapis.com/ for release metallb\r\n2019-05-10 13:49:48,375 - ChartBuilder - INFO - File:README.md\r\nTraceback (most recent call last):\r\n  File \"/root/.ansible/tmp/ansible-tmp-1557492564.6152759-11505359592173/AnsiballZ_helm.py\", line 113, in \r\n    _ansiballz_main()\r\n  File \"/root/.ansible/tmp/ansible-tmp-1557492564.6152759-11505359592173/AnsiballZ_helm.py\", line 105, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/root/.ansible/tmp/ansible-tmp-1557492564.6152759-11505359592173/AnsiballZ_helm.py\", line 48, in invoke_module\r\n    imp.load_module('__main__', mod, module, MOD_DESC)\r\n  File \"/tmp/ansible_helm_payload_mXW8k6/__main__.py\", line 184, in \r\n  File \"/tmp/ansible_helm_payload_mXW8k6/__main__.py\", line 172, in main\r\n  File \"/tmp/ansible_helm_payload_mXW8k6/__main__.py\", line 113, in install\r\n  File \"/usr/lib/python2.7/site-packages/pyhelm/chartbuilder.py\", line 224, in get_helm_chart\r\n    files=self.get_files(),\r\n  File \"/usr/lib/python2.7/site-packages/pyhelm/chartbuilder.py\", line 153, in get_files\r\n    chart_files.append(Any(type_url=filename, value=fd.read().encode()))\r\nUnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1358: ordinal not in range(128)\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

Made prettier, the important error seems to be:

File "/usr/lib/python2.7/site-packages/pyhelm/chartbuilder.py", line 152, in get_files\r\n chart_files.append(Any(type_url=filename, value=fd.read().encode()))\r\nUnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1358: ordinal not in range(128)

Tiller list_releases exhausted resource

Hi, we've experienced an issue where we would get RESOURCE_EXHAUSTED from list_releases() execution. It seems like we've exceeded the default 4MB send message size. Our fix involved raising the maximum send message size to 20MB (matching the size from Helm Tiller server (https://github.com/helm/helm/blob/8a3df19ec44bc7a19b3862ede93ce1e0d4a37c1f/pkg/tiller/server.go#L34), which seems to have resolved the issue.

Log from our failed execution on 2.14.4 release :

File "/usr/local/lib/python3.6/site-packages/pyhelm/tiller.py", line 99, in list_releases\n","stream":"stderr","time":"2019-10-01T12:34:27.425427761Z"
for y in release_list:\n","stream":"stderr","time":"2019-10-01T12:34:27.425431752Z"
File "/usr/local/lib64/python3.6/site-packages/grpc/_channel.py", line 364, in next\n","stream":"stderr","time":"2019-10-01T12:34:27.425435311Z"
return self._next()\n","stream":"stderr","time":"2019-10-01T12:34:27.425439196Z"
File "/usr/local/lib64/python3.6/site-packages/grpc/_channel.py", line 358, in _next\n","stream":"stderr","time":"2019-10-01T12:34:27.425442997Z"
raise self\n","stream":"stderr","time":"2019-10-01T12:34:27.425447204Z"
grpc._channel._Rendezvous: \u003c_Rendezvous of RPC that terminated with:\n","stream":"stderr","time":"2019-10-01T12:34:27.425450952Z"
\u0009status = StatusCode.RESOURCE_EXHAUSTED\n","stream":"stderr","time":"2019-10-01T12:34:27.425454939Z"
\u0009details = "Received message larger than max (4246828 vs. 4194304)"\n","stream":"stderr","time":"2019-10-01T12:34:27.42545877Z"
\u0009debug_error_string = "{"created":"@1569933267.423252219","description":"Received message larger than max (4246828 vs. 4194304)","file":"src/core/ext/filters/message_size/message_size_filter.cc","file_line":190,"grpc_status":8}"\n","stream":"stderr","time":"2019-10-01T12:34:27.425462981Z"
\u003e\n","stream":"stderr","time":"2019-10-01T12:34:27.42547066Z"

Our fix is part of #86.

from_repo fails with FileNotFoundError on Windows + git bash

Environment:

Windows 10 Pro v1803
git version 2.15.1.windows.2

Steps to reproduce:

Run the following comnands from git bash:

winpty python
from pyhelm.repo import from_repo
chart_path = from_repo('https://kubernetes-charts.storage.googleapis.com/', 'mariadb')

Stack trace:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Python36-32\lib\site-packages\pyhelm\repo.py", line 24, in from_repo
    _tmp_dir = tempfile.mkdtemp(prefix='pyhelm-', dir='/tmp')
  File "C:\Program Files (x86)\Python36-32\lib\tempfile.py", line 368, in mkdtemp
    _os.mkdir(file, 0o700)
FileNotFoundError: [WinError 3] The system cannot find the path specified: '/tmp\\pyhelm-y_fem3le'

Allow empty values for charts of type repo

When I invoke Chartbuilder.__init__ with a chart that's of type repo and doesn't contain version or source['headers'], I get an error message like:

KeyError: 'version'"

Providing these values should not be necessary, because the from_repo function doesn't require them.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.