Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
H
helm3
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
helm3
Commits
cc24e3f5
Commit
cc24e3f5
authored
Aug 29, 2016
by
Ville Aikas
Committed by
GitHub
Aug 29, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1090 from vaikas-google/nodes.txt
First cut of handling NOTES.txt file
parents
27480470
7c4cad5c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
204 additions
and
27 deletions
+204
-27
status.proto
_proto/hapi/release/status.proto
+4
-0
tiller.proto
_proto/hapi/services/tiller.proto
+3
-0
status.go
cmd/helm/status.go
+6
-1
release_server.go
cmd/tiller/release_server.go
+37
-8
release_server_test.go
cmd/tiller/release_server_test.go
+133
-0
engine.go
pkg/engine/engine.go
+1
-1
status.pb.go
pkg/proto/hapi/release/status.pb.go
+20
-17
tiller.pb.go
pkg/proto/hapi/services/tiller.pb.go
+0
-0
No files found.
_proto/hapi/release/status.proto
View file @
cc24e3f5
...
...
@@ -38,6 +38,10 @@ message Status {
Code
code
=
1
;
google.protobuf.Any
details
=
2
;
// Cluster resources as kubectl would print them.
string
resources
=
3
;
// Contains the rendered templates/NOTES.txt if available
string
notes
=
4
;
}
_proto/hapi/services/tiller.proto
View file @
cc24e3f5
...
...
@@ -142,6 +142,9 @@ message GetReleaseStatusResponse {
// Info contains information about the release.
hapi.release.Info
info
=
2
;
// Namesapce the release was released into
string
namespace
=
3
;
}
// GetReleaseContentRequest is a request to get the contents of a release.
...
...
cmd/helm/status.go
View file @
cc24e3f5
...
...
@@ -67,10 +67,15 @@ func (s *statusCmd) run() error {
}
fmt
.
Fprintf
(
s
.
out
,
"Last Deployed: %s
\n
"
,
timeconv
.
String
(
res
.
Info
.
LastDeployed
))
fmt
.
Fprintf
(
s
.
out
,
"Namespace: %s
\n
"
,
res
.
Namespace
)
fmt
.
Fprintf
(
s
.
out
,
"Status: %s
\n
"
,
res
.
Info
.
Status
.
Code
)
fmt
.
Fprintf
(
s
.
out
,
"Resources:
\n
%s
\n
"
,
res
.
Info
.
Status
.
Resources
)
if
res
.
Info
.
Status
.
Details
!=
nil
{
fmt
.
Fprintf
(
s
.
out
,
"Details: %s
\n
"
,
res
.
Info
.
Status
.
Details
)
}
fmt
.
Fprintf
(
s
.
out
,
"
\n
"
)
fmt
.
Fprintf
(
s
.
out
,
"Resources:
\n
%s
\n
"
,
res
.
Info
.
Status
.
Resources
)
if
len
(
res
.
Info
.
Status
.
Notes
)
>
0
{
fmt
.
Fprintf
(
s
.
out
,
"Notes:
\n
%s
\n
"
,
res
.
Info
.
Status
.
Notes
)
}
return
nil
}
cmd/tiller/release_server.go
View file @
cc24e3f5
...
...
@@ -23,6 +23,7 @@ import (
"log"
"regexp"
"sort"
"strings"
"github.com/ghodss/yaml"
"github.com/technosophos/moniker"
...
...
@@ -47,6 +48,12 @@ var srv *releaseServer
// characters in length. See https://github.com/kubernetes/helm/issues/1071
const
releaseNameMaxLen
=
14
// NOTESFILE_SUFFIX that we want to treat special. It goes through the templating engine
// but it's not a yaml file (resource) hence can't have hooks, etc. And the user actually
// wants to see this file after rendering in the status command. However, it must be a suffix
// since there can be filepath in front of it.
const
notesFileSuffix
=
"NOTES.txt"
func
init
()
{
srv
=
&
releaseServer
{
env
:
env
,
...
...
@@ -179,6 +186,9 @@ func (s *releaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease
if
rel
.
Info
==
nil
{
return
nil
,
errors
.
New
(
"release info is missing"
)
}
if
rel
.
Chart
==
nil
{
return
nil
,
errors
.
New
(
"release chart is missing"
)
}
// Ok, we got the status of the release as we had jotted down, now we need to match the
// manifest we stashed away with reality from the cluster.
...
...
@@ -190,7 +200,7 @@ func (s *releaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease
}
rel
.
Info
.
Status
.
Resources
=
resp
return
&
services
.
GetReleaseStatusResponse
{
Info
:
rel
.
Info
},
nil
return
&
services
.
GetReleaseStatusResponse
{
Info
:
rel
.
Info
,
Namespace
:
rel
.
Namespace
},
nil
}
func
(
s
*
releaseServer
)
GetReleaseContent
(
c
ctx
.
Context
,
req
*
services
.
GetReleaseContentRequest
)
(
*
services
.
GetReleaseContentResponse
,
error
)
{
...
...
@@ -281,7 +291,7 @@ func (s *releaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
return
nil
,
nil
,
err
}
hooks
,
manifestDoc
,
err
:=
s
.
renderResources
(
req
.
Chart
,
valuesToRender
)
hooks
,
manifestDoc
,
notesTxt
,
err
:=
s
.
renderResources
(
req
.
Chart
,
valuesToRender
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
...
...
@@ -302,6 +312,9 @@ func (s *releaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
Hooks
:
hooks
,
}
if
len
(
notesTxt
)
>
0
{
updatedRelease
.
Info
.
Status
.
Notes
=
notesTxt
}
return
currentRelease
,
updatedRelease
,
nil
}
...
...
@@ -389,7 +402,7 @@ func (s *releaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re
return
nil
,
err
}
hooks
,
manifestDoc
,
err
:=
s
.
renderResources
(
req
.
Chart
,
valuesToRender
)
hooks
,
manifestDoc
,
notesTxt
,
err
:=
s
.
renderResources
(
req
.
Chart
,
valuesToRender
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -409,6 +422,9 @@ func (s *releaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re
Hooks
:
hooks
,
Version
:
1
,
}
if
len
(
notesTxt
)
>
0
{
rel
.
Info
.
Status
.
Notes
=
notesTxt
}
return
rel
,
nil
}
...
...
@@ -437,11 +453,24 @@ func (s *releaseServer) getVersionSet() (versionSet, error) {
return
newVersionSet
(
versions
...
),
nil
}
func
(
s
*
releaseServer
)
renderResources
(
ch
*
chart
.
Chart
,
values
chartutil
.
Values
)
([]
*
release
.
Hook
,
*
bytes
.
Buffer
,
error
)
{
func
(
s
*
releaseServer
)
renderResources
(
ch
*
chart
.
Chart
,
values
chartutil
.
Values
)
([]
*
release
.
Hook
,
*
bytes
.
Buffer
,
string
,
error
)
{
renderer
:=
s
.
engine
(
ch
)
files
,
err
:=
renderer
.
Render
(
ch
,
values
)
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
""
,
err
}
// NOTES.txt gets rendered like all the other files, but because it's not a hook nor a resource,
// pull it out of here into a separate file so that we can actually use the output of the rendered
// text file. We have to spin through this map because the file contains path information, so we
// look for terminating NOTES.txt. We also remove it from the files so that we don't have to skip
// it in the sortHooks.
notes
:=
""
for
k
,
v
:=
range
files
{
if
strings
.
HasSuffix
(
k
,
notesFileSuffix
)
{
notes
=
v
delete
(
files
,
k
)
}
}
// Sort hooks, manifests, and partials. Only hooks and manifests are returned,
...
...
@@ -449,13 +478,13 @@ func (s *releaseServer) renderResources(ch *chart.Chart, values chartutil.Values
// removed here.
vs
,
err
:=
s
.
getVersionSet
()
if
err
!=
nil
{
return
nil
,
nil
,
fmt
.
Errorf
(
"Could not get apiVersions from Kubernetes: %s"
,
err
)
return
nil
,
nil
,
""
,
fmt
.
Errorf
(
"Could not get apiVersions from Kubernetes: %s"
,
err
)
}
hooks
,
manifests
,
err
:=
sortManifests
(
files
,
vs
)
if
err
!=
nil
{
// By catching parse errors here, we can prevent bogus releases from going
// to Kubernetes.
return
nil
,
nil
,
err
return
nil
,
nil
,
""
,
err
}
// Aggregate all valid manifests into one big doc.
...
...
@@ -465,7 +494,7 @@ func (s *releaseServer) renderResources(ch *chart.Chart, values chartutil.Values
b
.
WriteString
(
file
)
}
return
hooks
,
b
,
nil
return
hooks
,
b
,
n
otes
,
n
il
}
// validateYAML checks to see if YAML is well-formed.
...
...
cmd/tiller/release_server_test.go
View file @
cc24e3f5
...
...
@@ -35,6 +35,8 @@ import (
"k8s.io/helm/pkg/storage/driver"
)
const
notesText
=
"my notes here"
var
manifestWithHook
=
`apiVersion: v1
kind: ConfigMap
metadata:
...
...
@@ -230,6 +232,137 @@ func TestInstallRelease(t *testing.T) {
}
}
func
TestInstallReleaseWithNotes
(
t
*
testing
.
T
)
{
c
:=
context
.
Background
()
rs
:=
rsFixture
()
// TODO: Refactor this into a mock.
req
:=
&
services
.
InstallReleaseRequest
{
Namespace
:
"spaced"
,
Chart
:
&
chart
.
Chart
{
Metadata
:
&
chart
.
Metadata
{
Name
:
"hello"
},
Templates
:
[]
*
chart
.
Template
{
{
Name
:
"hello"
,
Data
:
[]
byte
(
"hello: world"
)},
{
Name
:
"hooks"
,
Data
:
[]
byte
(
manifestWithHook
)},
{
Name
:
"NOTES.txt"
,
Data
:
[]
byte
(
notesText
)},
},
},
}
res
,
err
:=
rs
.
InstallRelease
(
c
,
req
)
if
err
!=
nil
{
t
.
Errorf
(
"Failed install: %s"
,
err
)
}
if
res
.
Release
.
Name
==
""
{
t
.
Errorf
(
"Expected release name."
)
}
if
res
.
Release
.
Namespace
!=
"spaced"
{
t
.
Errorf
(
"Expected release namespace 'spaced', got '%s'."
,
res
.
Release
.
Namespace
)
}
rel
,
err
:=
rs
.
env
.
Releases
.
Get
(
res
.
Release
.
Name
)
if
err
!=
nil
{
t
.
Errorf
(
"Expected release for %s (%v)."
,
res
.
Release
.
Name
,
rs
.
env
.
Releases
)
}
t
.
Logf
(
"rel: %v"
,
rel
)
if
len
(
rel
.
Hooks
)
!=
1
{
t
.
Fatalf
(
"Expected 1 hook, got %d"
,
len
(
rel
.
Hooks
))
}
if
rel
.
Hooks
[
0
]
.
Manifest
!=
manifestWithHook
{
t
.
Errorf
(
"Unexpected manifest: %v"
,
rel
.
Hooks
[
0
]
.
Manifest
)
}
if
rel
.
Info
.
Status
.
Notes
!=
notesText
{
t
.
Fatalf
(
"Expected '%s', got '%s'"
,
notesText
,
rel
.
Info
.
Status
.
Notes
)
}
if
rel
.
Hooks
[
0
]
.
Events
[
0
]
!=
release
.
Hook_POST_INSTALL
{
t
.
Errorf
(
"Expected event 0 is post install"
)
}
if
rel
.
Hooks
[
0
]
.
Events
[
1
]
!=
release
.
Hook_PRE_DELETE
{
t
.
Errorf
(
"Expected event 0 is pre-delete"
)
}
if
len
(
res
.
Release
.
Manifest
)
==
0
{
t
.
Errorf
(
"No manifest returned: %v"
,
res
.
Release
)
}
if
len
(
rel
.
Manifest
)
==
0
{
t
.
Errorf
(
"Expected manifest in %v"
,
res
)
}
if
!
strings
.
Contains
(
rel
.
Manifest
,
"---
\n
# Source: hello/hello
\n
hello: world"
)
{
t
.
Errorf
(
"unexpected output: %s"
,
rel
.
Manifest
)
}
}
func
TestInstallReleaseWithNotesRendered
(
t
*
testing
.
T
)
{
c
:=
context
.
Background
()
rs
:=
rsFixture
()
// TODO: Refactor this into a mock.
req
:=
&
services
.
InstallReleaseRequest
{
Namespace
:
"spaced"
,
Chart
:
&
chart
.
Chart
{
Metadata
:
&
chart
.
Metadata
{
Name
:
"hello"
},
Templates
:
[]
*
chart
.
Template
{
{
Name
:
"hello"
,
Data
:
[]
byte
(
"hello: world"
)},
{
Name
:
"hooks"
,
Data
:
[]
byte
(
manifestWithHook
)},
{
Name
:
"NOTES.txt"
,
Data
:
[]
byte
(
notesText
+
" {{.Release.Name}}"
)},
},
},
}
res
,
err
:=
rs
.
InstallRelease
(
c
,
req
)
if
err
!=
nil
{
t
.
Errorf
(
"Failed install: %s"
,
err
)
}
if
res
.
Release
.
Name
==
""
{
t
.
Errorf
(
"Expected release name."
)
}
if
res
.
Release
.
Namespace
!=
"spaced"
{
t
.
Errorf
(
"Expected release namespace 'spaced', got '%s'."
,
res
.
Release
.
Namespace
)
}
rel
,
err
:=
rs
.
env
.
Releases
.
Get
(
res
.
Release
.
Name
)
if
err
!=
nil
{
t
.
Errorf
(
"Expected release for %s (%v)."
,
res
.
Release
.
Name
,
rs
.
env
.
Releases
)
}
t
.
Logf
(
"rel: %v"
,
rel
)
if
len
(
rel
.
Hooks
)
!=
1
{
t
.
Fatalf
(
"Expected 1 hook, got %d"
,
len
(
rel
.
Hooks
))
}
if
rel
.
Hooks
[
0
]
.
Manifest
!=
manifestWithHook
{
t
.
Errorf
(
"Unexpected manifest: %v"
,
rel
.
Hooks
[
0
]
.
Manifest
)
}
expectedNotes
:=
fmt
.
Sprintf
(
"%s %s"
,
notesText
,
res
.
Release
.
Name
)
if
rel
.
Info
.
Status
.
Notes
!=
expectedNotes
{
t
.
Fatalf
(
"Expected '%s', got '%s'"
,
expectedNotes
,
rel
.
Info
.
Status
.
Notes
)
}
if
rel
.
Hooks
[
0
]
.
Events
[
0
]
!=
release
.
Hook_POST_INSTALL
{
t
.
Errorf
(
"Expected event 0 is post install"
)
}
if
rel
.
Hooks
[
0
]
.
Events
[
1
]
!=
release
.
Hook_PRE_DELETE
{
t
.
Errorf
(
"Expected event 0 is pre-delete"
)
}
if
len
(
res
.
Release
.
Manifest
)
==
0
{
t
.
Errorf
(
"No manifest returned: %v"
,
res
.
Release
)
}
if
len
(
rel
.
Manifest
)
==
0
{
t
.
Errorf
(
"Expected manifest in %v"
,
res
)
}
if
!
strings
.
Contains
(
rel
.
Manifest
,
"---
\n
# Source: hello/hello
\n
hello: world"
)
{
t
.
Errorf
(
"unexpected output: %s"
,
rel
.
Manifest
)
}
}
func
TestInstallReleaseDryRun
(
t
*
testing
.
T
)
{
c
:=
context
.
Background
()
rs
:=
rsFixture
()
...
...
pkg/engine/engine.go
View file @
cc24e3f5
...
...
@@ -54,7 +54,7 @@ func New() *Engine {
}
}
// Render takes a chart, optional values, and value overrids, and attempts to render the Go templates.
// Render takes a chart, optional values, and value overrid
e
s, and attempts to render the Go templates.
//
// Render can be called repeatedly on the same engine.
//
...
...
pkg/proto/hapi/release/status.pb.go
View file @
cc24e3f5
...
...
@@ -55,6 +55,8 @@ type Status struct {
Details
*
google_protobuf1
.
Any
`protobuf:"bytes,2,opt,name=details" json:"details,omitempty"`
// Cluster resources as kubectl would print them.
Resources
string
`protobuf:"bytes,3,opt,name=resources" json:"resources,omitempty"`
// Contains the rendered templates/NOTES.txt if available
Notes
string
`protobuf:"bytes,4,opt,name=notes" json:"notes,omitempty"`
}
func
(
m
*
Status
)
Reset
()
{
*
m
=
Status
{}
}
...
...
@@ -75,21 +77,22 @@ func init() {
}
var
fileDescriptor3
=
[]
byte
{
// 247 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x09
,
0x6e
,
0x88
,
0x02
,
0xff
,
0xe2
,
0x92
,
0xcc
,
0x48
,
0x2c
,
0xc8
,
0xd4
,
0x2f
,
0x4a
,
0xcd
,
0x49
,
0x4d
,
0x2c
,
0x4e
,
0xd5
,
0x2f
,
0x2e
,
0x49
,
0x2c
,
0x29
,
0x2d
,
0xd6
,
0x2b
,
0x28
,
0xca
,
0x2f
,
0xc9
,
0x17
,
0xe2
,
0x01
,
0x49
,
0xe9
,
0x41
,
0xa5
,
0xa4
,
0x24
,
0xd3
,
0xf3
,
0xf3
,
0xd3
,
0x73
,
0x52
,
0xf5
,
0xc1
,
0x72
,
0x49
,
0xa5
,
0x69
,
0xfa
,
0x89
,
0x79
,
0x95
,
0x10
,
0x85
,
0x4a
,
0x17
,
0x19
,
0xb9
,
0xd8
,
0x82
,
0xc1
,
0x3a
,
0x85
,
0x74
,
0xb9
,
0x58
,
0x92
,
0xf3
,
0x53
,
0x52
,
0x25
,
0x18
,
0x15
,
0x18
,
0x35
,
0xf8
,
0x8c
,
0x24
,
0xf5
,
0x90
,
0x8d
,
0xd0
,
0x83
,
0xa8
,
0xd1
,
0x73
,
0x06
,
0x2a
,
0x08
,
0x02
,
0x2b
,
0x13
,
0xd2
,
0xe3
,
0x62
,
0x4f
,
0x49
,
0x2d
,
0x49
,
0xcc
,
0xcc
,
0x29
,
0x96
,
0x60
,
0x02
,
0xea
,
0xe0
,
0x36
,
0x12
,
0xd1
,
0x83
,
0x58
,
0xa3
,
0x07
,
0xb3
,
0x46
,
0xcf
,
0x31
,
0xaf
,
0x32
,
0x08
,
0xa6
,
0x48
,
0x48
,
0x86
,
0x8b
,
0xb3
,
0x28
,
0xb5
,
0x38
,
0xbf
,
0xb4
,
0x28
,
0x39
,
0xb5
,
0x58
,
0x82
,
0x19
,
0xa8
,
0x83
,
0x33
,
0x08
,
0x21
,
0xa0
,
0xe4
,
0xc5
,
0xc5
,
0x02
,
0x32
,
0x5b
,
0x88
,
0x9b
,
0x8b
,
0x3d
,
0xd4
,
0xcf
,
0xdb
,
0xcf
,
0x3f
,
0xdc
,
0x4f
,
0x80
,
0x41
,
0x88
,
0x87
,
0x8b
,
0xc3
,
0xc5
,
0x35
,
0xc0
,
0xc7
,
0x3f
,
0xd2
,
0xd5
,
0x45
,
0x80
,
0x11
,
0x24
,
0xe5
,
0xe2
,
0xea
,
0xe3
,
0x1a
,
0x02
,
0xe4
,
0x30
,
0x09
,
0xf1
,
0x71
,
0x71
,
0x05
,
0x87
,
0x06
,
0xb8
,
0x06
,
0x05
,
0xbb
,
0xba
,
0x00
,
0xf9
,
0xcc
,
0x42
,
0x5c
,
0x5c
,
0x6c
,
0x6e
,
0x8e
,
0x9e
,
0x3e
,
0x40
,
0x36
,
0x8b
,
0x13
,
0x67
,
0x14
,
0x3b
,
0xd4
,
0xd9
,
0x49
,
0x6c
,
0x60
,
0xb7
,
0x18
,
0x03
,
0x02
,
0x00
,
0x00
,
0xff
,
0xff
,
0xd1
,
0xc3
,
0xbf
,
0x50
,
0x2b
,
0x01
,
0x00
,
0x00
,
// 259 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x09
,
0x6e
,
0x88
,
0x02
,
0xff
,
0x4c
,
0x8f
,
0xc1
,
0x4e
,
0xf2
,
0x40
,
0x14
,
0x85
,
0xff
,
0x42
,
0xff
,
0xd6
,
0x5e
,
0x08
,
0x21
,
0x37
,
0x2c
,
0x5a
,
0xe3
,
0xc2
,
0xb0
,
0x72
,
0xe3
,
0x6d
,
0x82
,
0x4f
,
0x80
,
0x76
,
0x4c
,
0xd4
,
0xa6
,
0x90
,
0x56
,
0x62
,
0x74
,
0x37
,
0xc0
,
0x88
,
0x24
,
0x4d
,
0x87
,
0x74
,
0xa6
,
0x0b
,
0x9e
,
0xd8
,
0xd7
,
0x70
,
0x3a
,
0x85
,
0xe8
,
0xae
,
0xa7
,
0xdf
,
0x77
,
0xe6
,
0xcc
,
0x40
,
0xf4
,
0xc5
,
0x0f
,
0xfb
,
0xb8
,
0x16
,
0xa5
,
0xe0
,
0x4a
,
0xc4
,
0x4a
,
0x73
,
0xdd
,
0x28
,
0x3a
,
0xd4
,
0x52
,
0x4b
,
0x1c
,
0xb6
,
0x88
,
0x4e
,
0xe8
,
0x32
,
0xda
,
0x49
,
0xb9
,
0x2b
,
0x45
,
0x6c
,
0xd9
,
0xba
,
0xf9
,
0x8c
,
0x79
,
0x75
,
0xec
,
0xc4
,
0xe9
,
0xb7
,
0x03
,
0x5e
,
0x61
,
0x9b
,
0x78
,
0x0b
,
0xee
,
0x46
,
0x6e
,
0x45
,
0xe8
,
0x5c
,
0x3b
,
0x37
,
0xa3
,
0x59
,
0x44
,
0x7f
,
0x8f
,
0xa0
,
0xce
,
0xa1
,
0x07
,
0x23
,
0xe4
,
0x56
,
0x43
,
0x02
,
0x7f
,
0x2b
,
0x34
,
0xdf
,
0x97
,
0x2a
,
0xec
,
0x99
,
0xc6
,
0x60
,
0x36
,
0xa1
,
0x6e
,
0x86
,
0xce
,
0x33
,
0x34
,
0xaf
,
0x8e
,
0xf9
,
0x59
,
0xc2
,
0x2b
,
0x08
,
0x6a
,
0xa1
,
0x64
,
0x53
,
0x6f
,
0x84
,
0x0a
,
0xfb
,
0xa6
,
0x11
,
0xe4
,
0xbf
,
0x3f
,
0x70
,
0x02
,
0xff
,
0x2b
,
0xa9
,
0x0d
,
0x71
,
0x2d
,
0xe9
,
0xc2
,
0xf4
,
0x19
,
0xdc
,
0x76
,
0x11
,
0x07
,
0xe0
,
0xaf
,
0xb2
,
0x97
,
0x6c
,
0xf1
,
0x96
,
0x8d
,
0xff
,
0xe1
,
0x10
,
0x2e
,
0x12
,
0xb6
,
0x4c
,
0x17
,
0xef
,
0x2c
,
0x19
,
0x3b
,
0x2d
,
0x4a
,
0x58
,
0xca
,
0x5e
,
0x4d
,
0xe8
,
0xe1
,
0x08
,
0xa0
,
0x58
,
0x2d
,
0x59
,
0x5e
,
0xb0
,
0xc4
,
0xe4
,
0x3e
,
0x02
,
0x78
,
0x8f
,
0xf3
,
0xa7
,
0xd4
,
0x7c
,
0xbb
,
0xf7
,
0xc1
,
0x87
,
0x7f
,
0x7a
,
0xcc
,
0xda
,
0xb3
,
0x37
,
0xbc
,
0xfb
,
0x09
,
0x00
,
0x00
,
0xff
,
0xff
,
0xae
,
0x07
,
0x47
,
0x1f
,
0x41
,
0x01
,
0x00
,
0x00
,
}
pkg/proto/hapi/services/tiller.pb.go
View file @
cc24e3f5
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment