@@ -17,11 +17,14 @@ limitations under the License.
1717package object
1818
1919import (
20+ "encoding/json"
2021 "errors"
2122 "time"
2223
2324 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2425 "k8s.io/apimachinery/pkg/runtime"
26+
27+ sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
2528)
2629
2730var (
@@ -112,3 +115,59 @@ func GetRequeueInterval(obj runtime.Object) (time.Duration, error) {
112115 }
113116 return time .ParseDuration (interval )
114117}
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