added image pull secrets

This commit is contained in:
Brad Rydzewski 2019-02-21 17:10:27 -08:00
parent 259bc272c3
commit 9e589be71a
7 changed files with 47 additions and 103 deletions

View File

@ -1,50 +0,0 @@
// Copyright 2019 Drone IO, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package yaml
type (
// FromSecret defines a secret sources from an external value.
// This could be a named secret stored in the Drone database,
// or a secret stored at an external path in a key value
// system such as Vault.
FromSecret struct {
Name string `json:"name"`
Path string `json:"path"`
}
// fromSecret is a tempoary type used to unmarshal
// from_secret which may be short form vs long form.
fromSecret struct {
Name string `json:"name"`
Path string `json:"path"`
}
)
// UnmarshalYAML implements yaml unmarshalling.
func (v *FromSecret) UnmarshalYAML(unmarshal func(interface{}) error) error {
err := unmarshal(&v.Name)
if err == nil {
return nil
}
s := struct {
Name string
Path string
}{}
err = unmarshal(&s)
v.Name = s.Name
v.Path = s.Path
return err
}

View File

@ -1,50 +0,0 @@
// Copyright 2019 Drone.IO Inc. All rights reserved.
// Use of this source code is governed by the Drone Non-Commercial License
// that can be found in the LICENSE file.
package yaml
import (
"testing"
"gopkg.in/yaml.v2"
)
func TestFromSecret(t *testing.T) {
tests := []struct {
yaml string
name string
path string
}{
{
yaml: "bar",
name: "bar",
path: "",
},
{
yaml: "{ name: bar }",
name: "bar",
path: "",
},
{
yaml: "{ name: bar, path: foo }",
name: "bar",
path: "foo",
},
}
for _, test := range tests {
in := []byte(test.yaml)
out := new(FromSecret)
err := yaml.Unmarshal(in, out)
if err != nil {
t.Error(err)
return
}
if got, want := out.Name, test.name; got != want {
t.Errorf("Want from_secret name %q, got %q", want, got)
}
if got, want := out.Path, test.path; got != want {
t.Errorf("Want from_secret path %q, got %q", want, got)
}
}
}

View File

@ -1,11 +1,11 @@
// Copyright 2019 Drone IO, Inc. // Copyright 2019 Drone IO, Inc.
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
// You may obtain a copy of the License at // You may obtain a copy of the License at
// //
// http://www.apache.org/licenses/LICENSE-2.0 // http://www.apache.org/licenses/LICENSE-2.0
// //
// Unless required by applicable law or agreed to in writing, software // Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, // distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -27,6 +27,7 @@ type Pipeline struct {
DependsOn []string `json:"depends_on,omitempty" yaml:"depends_on" ` DependsOn []string `json:"depends_on,omitempty" yaml:"depends_on" `
Node map[string]string `json:"node,omitempty" yaml:"node"` Node map[string]string `json:"node,omitempty" yaml:"node"`
Platform Platform `json:"platform,omitempty"` Platform Platform `json:"platform,omitempty"`
PullSecrets []string `json:"image_pull_secrets,omitempty" yaml:"image_pull_secrets"`
Services []*Container `json:"services,omitempty"` Services []*Container `json:"services,omitempty"`
Steps []*Container `json:"steps,omitempty"` Steps []*Container `json:"steps,omitempty"`
Trigger Conditions `json:"trigger,omitempty"` Trigger Conditions `json:"trigger,omitempty"`

View File

@ -67,6 +67,11 @@ func printPipeline(w writer, v *yaml.Pipeline) {
w.WriteByte('\n') w.WriteByte('\n')
} }
if len(v.PullSecrets) > 0 {
w.WriteTagValue("image_pull_secrets", v.PullSecrets)
w.WriteByte('\n')
}
if len(v.Node) > 0 { if len(v.Node) > 0 {
printNode(w, v.Node) printNode(w, v.Node)
w.WriteByte('\n') w.WriteByte('\n')

View File

@ -151,3 +151,12 @@ func TestPipeline_Workspace(t *testing.T) {
t.Errorf("Unepxected formatting") t.Errorf("Unepxected formatting")
} }
} }
func TestPipeline_ImagePullSecrets(t *testing.T) {
ok, err := diff("testdata/pipeline_image_pull_secrets.yml")
if err != nil {
t.Error(err)
} else if !ok {
t.Errorf("Unepxected formatting")
}
}

View File

@ -0,0 +1,11 @@
kind: pipeline
name: default
steps:
- name: build
image: golang
commands:
- go build
image_pull_secrets:
- dockerhub

View File

@ -0,0 +1,18 @@
---
kind: pipeline
name: default
platform:
os: linux
arch: amd64
steps:
- name: build
image: golang
commands:
- go build
image_pull_secrets:
- dockerhub
...