@@ -17,11 +17,14 @@ limitations under the License.
17
17
package object
18
18
19
19
import (
20
+ "encoding/json"
20
21
"errors"
21
22
"time"
22
23
23
24
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
24
25
"k8s.io/apimachinery/pkg/runtime"
26
+
27
+ sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
25
28
)
26
29
27
30
var (
@@ -112,3 +115,59 @@ func GetRequeueInterval(obj runtime.Object) (time.Duration, error) {
112
115
}
113
116
return time .ParseDuration (interval )
114
117
}
118
+
119
+ // GetSuspend returns the spec.suspend of a given runtime object.
120
+ func GetSuspend (obj runtime.Object ) (bool , error ) {
121
+ u , err := toUnstructured (obj )
122
+ if err != nil {
123
+ return false , err
124
+ }
125
+ suspend , found , err := unstructured .NestedBool (u .Object , "spec" , "suspend" )
126
+ if err != nil {
127
+ return false , err
128
+ }
129
+ // Since suspend is an optional field, it's false when not found.
130
+ if ! found {
131
+ return false , nil
132
+ }
133
+ return suspend , nil
134
+ }
135
+
136
+ // SetSuspend sets the spec.suspend value of a given runtime object.
137
+ func SetSuspend (obj runtime.Object , val bool ) error {
138
+ content , err := runtime .DefaultUnstructuredConverter .ToUnstructured (obj )
139
+ if err != nil {
140
+ return err
141
+ }
142
+ u := unstructured.Unstructured {}
143
+ u .SetUnstructuredContent (content )
144
+ if err := unstructured .SetNestedField (u .Object , val , "spec" , "suspend" ); err != nil {
145
+ return err
146
+ }
147
+ return runtime .DefaultUnstructuredConverter .FromUnstructured (u .Object , obj )
148
+ }
149
+
150
+ // GetArtifact returns the status.artifact of a given runtime object.
151
+ func GetArtifact (obj runtime.Object ) (* sourcev1.Artifact , error ) {
152
+ u , err := toUnstructured (obj )
153
+ if err != nil {
154
+ return nil , err
155
+ }
156
+ artifact , found , err := unstructured .NestedFieldNoCopy (u .Object , "status" , "artifact" )
157
+ if err != nil {
158
+ return nil , err
159
+ }
160
+ // Since artifact is an optional field, return nil when not found.
161
+ if ! found {
162
+ return nil , nil
163
+ }
164
+ enc , err := json .Marshal (artifact )
165
+ if err != nil {
166
+ return nil , err
167
+ }
168
+ outArtifact := & sourcev1.Artifact {}
169
+ if err := json .Unmarshal (enc , outArtifact ); err != nil {
170
+ return nil , err
171
+ }
172
+ return outArtifact , nil
173
+ }
0 commit comments