-
Notifications
You must be signed in to change notification settings - Fork 98
/
reference.go
74 lines (59 loc) · 2.42 KB
/
reference.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
Copyright 2019 The Crossplane Authors.
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 resource
import (
"context"
"fmt"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// ReferenceStatusType is an enum type for the possible values for a Reference Status
type ReferenceStatusType int
// Reference statuses.
const (
ReferenceStatusUnknown ReferenceStatusType = iota
ReferenceNotFound
ReferenceNotReady
ReferenceReady
)
func (t ReferenceStatusType) String() string {
return []string{"Unknown", "NotFound", "NotReady", "Ready"}[t]
}
// ReferenceStatus has the name and status of a reference
type ReferenceStatus struct {
Name string
Status ReferenceStatusType
}
func (r ReferenceStatus) String() string {
return fmt.Sprintf("{reference:%s status:%s}", r.Name, r.Status)
}
// A CanReference is a resource that can reference another resource in its
// spec in order to automatically resolve corresponding spec field values
// by inspecting the referenced resource.
type CanReference runtime.Object
// An AttributeReferencer resolves cross-resource attribute references. See
// https://github.com/crossplane/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
// for more information
type AttributeReferencer interface {
// GetStatus retries the referenced resource, as well as other non-managed
// resources (like a `Provider`) and reports their readiness for use as a
// referenced resource.
GetStatus(ctx context.Context, res CanReference, r client.Reader) ([]ReferenceStatus, error)
// Build retrieves the referenced resource, as well as other non-managed
// resources (like a `Provider`), and builds the referenced attribute,
// returning it as a string value.
Build(ctx context.Context, res CanReference, r client.Reader) (value string, err error)
// Assign accepts a managed resource object, and assigns the given value to
// its corresponding property.
Assign(res CanReference, value string) error
}