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
bbae86e0
Unverified
Commit
bbae86e0
authored
Apr 23, 2019
by
Matthew Fisher
Committed by
GitHub
Apr 23, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5620 from ecv/ecv/no-forced-chirpiness
remove snowflake-emoji 'Happy Helming!'
parents
e562a2ee
f602c232
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
20 additions
and
22 deletions
+20
-22
init.go
cmd/helm/init.go
+0
-1
repo_update.go
cmd/helm/repo_update.go
+1
-1
rollback.go
cmd/helm/rollback.go
+1
-1
rollback_test.go
cmd/helm/rollback_test.go
+4
-4
upgrade.go
cmd/helm/upgrade.go
+1
-1
upgrade_test.go
cmd/helm/upgrade_test.go
+10
-10
charts.md
docs/charts.md
+1
-1
rbac.md
docs/rbac.md
+0
-1
using_helm.md
docs/using_helm.md
+1
-1
manager.go
pkg/downloader/manager.go
+1
-1
No files found.
cmd/helm/init.go
View file @
bbae86e0
...
@@ -310,7 +310,6 @@ func (i *initCmd) run() error {
...
@@ -310,7 +310,6 @@ func (i *initCmd) run() error {
"$ helm init --tiller-image gcr.io/kubernetes-helm/tiller:v2.8.2
\n\n
"
)
"$ helm init --tiller-image gcr.io/kubernetes-helm/tiller:v2.8.2
\n\n
"
)
}
}
fmt
.
Fprintln
(
i
.
out
,
"Happy Helming!"
)
return
nil
return
nil
}
}
...
...
cmd/helm/repo_update.go
View file @
bbae86e0
...
@@ -125,6 +125,6 @@ func updateCharts(repos []*repo.ChartRepository, out io.Writer, home helmpath.Ho
...
@@ -125,6 +125,6 @@ func updateCharts(repos []*repo.ChartRepository, out io.Writer, home helmpath.Ho
return
errors
.
New
(
"Update Failed. Check log for details"
)
return
errors
.
New
(
"Update Failed. Check log for details"
)
}
}
fmt
.
Fprintln
(
out
,
"Update Complete.
⎈ Happy Helming! ⎈
"
)
fmt
.
Fprintln
(
out
,
"Update Complete."
)
return
nil
return
nil
}
}
cmd/helm/rollback.go
View file @
bbae86e0
...
@@ -112,7 +112,7 @@ func (r *rollbackCmd) run() error {
...
@@ -112,7 +112,7 @@ func (r *rollbackCmd) run() error {
return
prettyError
(
err
)
return
prettyError
(
err
)
}
}
fmt
.
Fprintf
(
r
.
out
,
"Rollback was a success
! Happy Helming!
\n
"
)
fmt
.
Fprintf
(
r
.
out
,
"Rollback was a success
.
\n
"
)
return
nil
return
nil
}
}
cmd/helm/rollback_test.go
View file @
bbae86e0
...
@@ -31,25 +31,25 @@ func TestRollbackCmd(t *testing.T) {
...
@@ -31,25 +31,25 @@ func TestRollbackCmd(t *testing.T) {
{
{
name
:
"rollback a release"
,
name
:
"rollback a release"
,
args
:
[]
string
{
"funny-honey"
,
"1"
},
args
:
[]
string
{
"funny-honey"
,
"1"
},
expected
:
"Rollback was a success
! Happy Helming!
"
,
expected
:
"Rollback was a success
.
"
,
},
},
{
{
name
:
"rollback a release with timeout"
,
name
:
"rollback a release with timeout"
,
args
:
[]
string
{
"funny-honey"
,
"1"
},
args
:
[]
string
{
"funny-honey"
,
"1"
},
flags
:
[]
string
{
"--timeout"
,
"120"
},
flags
:
[]
string
{
"--timeout"
,
"120"
},
expected
:
"Rollback was a success
! Happy Helming!
"
,
expected
:
"Rollback was a success
.
"
,
},
},
{
{
name
:
"rollback a release with wait"
,
name
:
"rollback a release with wait"
,
args
:
[]
string
{
"funny-honey"
,
"1"
},
args
:
[]
string
{
"funny-honey"
,
"1"
},
flags
:
[]
string
{
"--wait"
},
flags
:
[]
string
{
"--wait"
},
expected
:
"Rollback was a success
! Happy Helming!
"
,
expected
:
"Rollback was a success
.
"
,
},
},
{
{
name
:
"rollback a release with description"
,
name
:
"rollback a release with description"
,
args
:
[]
string
{
"funny-honey"
,
"1"
},
args
:
[]
string
{
"funny-honey"
,
"1"
},
flags
:
[]
string
{
"--description"
,
"foo"
},
flags
:
[]
string
{
"--description"
,
"foo"
},
expected
:
"Rollback was a success
! Happy Helming!
"
,
expected
:
"Rollback was a success
.
"
,
},
},
{
{
name
:
"rollback a release without revision"
,
name
:
"rollback a release without revision"
,
...
...
cmd/helm/upgrade.go
View file @
bbae86e0
...
@@ -307,7 +307,7 @@ func (u *upgradeCmd) run() error {
...
@@ -307,7 +307,7 @@ func (u *upgradeCmd) run() error {
printRelease
(
u
.
out
,
resp
.
Release
)
printRelease
(
u
.
out
,
resp
.
Release
)
}
}
fmt
.
Fprintf
(
u
.
out
,
"Release %q has been upgraded.
Happy Helming!
\n
"
,
u
.
release
)
fmt
.
Fprintf
(
u
.
out
,
"Release %q has been upgraded.
\n
"
,
u
.
release
)
// Print the status like status command does
// Print the status like status command does
status
,
err
:=
u
.
client
.
ReleaseStatus
(
u
.
release
)
status
,
err
:=
u
.
client
.
ReleaseStatus
(
u
.
release
)
...
...
cmd/helm/upgrade_test.go
View file @
bbae86e0
...
@@ -96,7 +96,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -96,7 +96,7 @@ func TestUpgradeCmd(t *testing.T) {
name
:
"upgrade a release"
,
name
:
"upgrade a release"
,
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
2
,
Chart
:
ch
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
2
,
Chart
:
ch
}),
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
2
,
Chart
:
ch
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
2
,
Chart
:
ch
})},
},
},
{
{
...
@@ -104,7 +104,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -104,7 +104,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
flags
:
[]
string
{
"--timeout"
,
"120"
},
flags
:
[]
string
{
"--timeout"
,
"120"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
3
,
Chart
:
ch2
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
3
,
Chart
:
ch2
}),
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
3
,
Chart
:
ch2
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
3
,
Chart
:
ch2
})},
},
},
{
{
...
@@ -112,7 +112,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -112,7 +112,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
flags
:
[]
string
{
"--reset-values"
,
"true"
},
flags
:
[]
string
{
"--reset-values"
,
"true"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
4
,
Chart
:
ch2
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
4
,
Chart
:
ch2
}),
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
4
,
Chart
:
ch2
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
4
,
Chart
:
ch2
})},
},
},
{
{
...
@@ -120,7 +120,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -120,7 +120,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
flags
:
[]
string
{
"--reuse-values"
,
"true"
},
flags
:
[]
string
{
"--reuse-values"
,
"true"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
5
,
Chart
:
ch2
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
5
,
Chart
:
ch2
}),
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
5
,
Chart
:
ch2
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
5
,
Chart
:
ch2
})},
},
},
{
{
...
@@ -128,7 +128,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -128,7 +128,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
args
:
[]
string
{
"funny-bunny"
,
chartPath
},
flags
:
[]
string
{
"--atomic"
},
flags
:
[]
string
{
"--atomic"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
6
,
Chart
:
ch
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
6
,
Chart
:
ch
}),
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
funny-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
6
,
Chart
:
ch
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"funny-bunny"
,
Version
:
6
,
Chart
:
ch
})},
},
},
{
{
...
@@ -136,7 +136,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -136,7 +136,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"zany-bunny"
,
chartPath
},
args
:
[]
string
{
"zany-bunny"
,
chartPath
},
flags
:
[]
string
{
"-i"
},
flags
:
[]
string
{
"-i"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"zany-bunny"
,
Version
:
1
,
Chart
:
ch
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"zany-bunny"
,
Version
:
1
,
Chart
:
ch
}),
expected
:
"Release
\"
zany-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
zany-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"zany-bunny"
,
Version
:
1
,
Chart
:
ch
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"zany-bunny"
,
Version
:
1
,
Chart
:
ch
})},
},
},
{
{
...
@@ -144,7 +144,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -144,7 +144,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
flags
:
[]
string
{
"-i"
,
"--timeout"
,
"120"
},
flags
:
[]
string
{
"-i"
,
"--timeout"
,
"120"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
}),
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
})},
},
},
{
{
...
@@ -152,7 +152,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -152,7 +152,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
flags
:
[]
string
{
"-i"
,
"--description"
,
"foo"
},
flags
:
[]
string
{
"-i"
,
"--description"
,
"foo"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
,
Description
:
"foo"
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
,
Description
:
"foo"
}),
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
,
Description
:
"foo"
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
1
,
Chart
:
ch
,
Description
:
"foo"
})},
},
},
{
{
...
@@ -160,7 +160,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -160,7 +160,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
flags
:
[]
string
{
"--wait"
},
flags
:
[]
string
{
"--wait"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
}),
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
})},
},
},
{
{
...
@@ -168,7 +168,7 @@ func TestUpgradeCmd(t *testing.T) {
...
@@ -168,7 +168,7 @@ func TestUpgradeCmd(t *testing.T) {
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
args
:
[]
string
{
"crazy-bunny"
,
chartPath
},
flags
:
[]
string
{
"--description"
,
"foo"
},
flags
:
[]
string
{
"--description"
,
"foo"
},
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
}),
resp
:
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
}),
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
Happy Helming!
\n
"
,
expected
:
"Release
\"
crazy-bunny
\"
has been upgraded.
\n
"
,
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
,
Description
:
"foo"
})},
rels
:
[]
*
release
.
Release
{
helm
.
ReleaseMock
(
&
helm
.
MockReleaseOptions
{
Name
:
"crazy-bunny"
,
Version
:
2
,
Chart
:
ch2
,
Description
:
"foo"
})},
},
},
{
{
...
...
docs/charts.md
View file @
bbae86e0
...
@@ -191,7 +191,7 @@ Hang tight while we grab the latest from your chart repositories...
...
@@ -191,7 +191,7 @@ Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "example" chart repository
...Successfully got an update from the "example" chart repository
...Successfully got an update from the "another" chart repository
...Successfully got an update from the "another" chart repository
Update Complete.
Happy Helming!
Update Complete.
Saving 2 charts
Saving 2 charts
Downloading apache from repo http://example.com/charts
Downloading apache from repo http://example.com/charts
Downloading mysql from repo http://another.example.com/charts
Downloading mysql from repo http://another.example.com/charts
...
...
docs/rbac.md
View file @
bbae86e0
...
@@ -106,7 +106,6 @@ $ helm init --service-account tiller --tiller-namespace tiller-world
...
@@ -106,7 +106,6 @@ $ helm init --service-account tiller --tiller-namespace tiller-world
$
HELM_HOME has been configured at /Users/awesome-user/.helm.
$
HELM_HOME has been configured at /Users/awesome-user/.helm.
Tiller (the Helm server side component) has been installed into your Kubernetes Cluster.
Tiller (the Helm server side component) has been installed into your Kubernetes Cluster.
Happy Helming!
$
helm
install
nginx
--tiller-namespace
tiller-world
--namespace
tiller-world
$
helm
install
nginx
--tiller-namespace
tiller-world
--namespace
tiller-world
NAME: wayfaring-yak
NAME: wayfaring-yak
...
...
docs/using_helm.md
View file @
bbae86e0
...
@@ -359,7 +359,7 @@ update things that have changed since the last release.
...
@@ -359,7 +359,7 @@ update things that have changed since the last release.
```
console
```
console
$
helm upgrade
-f
panda.yaml happy-panda stable/mariadb
$
helm upgrade
-f
panda.yaml happy-panda stable/mariadb
Fetched stable/mariadb-0.3.0.tgz to /Users/mattbutcher/Code/Go/src/k8s.io/helm/mariadb-0.3.0.tgz
Fetched stable/mariadb-0.3.0.tgz to /Users/mattbutcher/Code/Go/src/k8s.io/helm/mariadb-0.3.0.tgz
happy-panda has been upgraded.
Happy Helming!
happy-panda has been upgraded.
Last Deployed: Wed Sep 28 12:47:54 2016
Last Deployed: Wed Sep 28 12:47:54 2016
Namespace: default
Namespace: default
Status: DEPLOYED
Status: DEPLOYED
...
...
pkg/downloader/manager.go
View file @
bbae86e0
...
@@ -465,7 +465,7 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error {
...
@@ -465,7 +465,7 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error {
}(
r
)
}(
r
)
}
}
wg
.
Wait
()
wg
.
Wait
()
fmt
.
Fprintln
(
out
,
"Update Complete.
⎈Happy Helming!⎈
"
)
fmt
.
Fprintln
(
out
,
"Update Complete."
)
return
nil
return
nil
}
}
...
...
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