From d1c272a7937b3f5b8a01d568118bcad63ed74dfb Mon Sep 17 00:00:00 2001 From: Andrew Reed <andrew@smallstep.com> Date: Mon, 30 Dec 2024 14:47:43 -0600 Subject: [PATCH] Update generated client --- internal/apiclient/v20250101/api.gen.go | 978 ++++++++++++++++++------ internal/provider/device/model.go | 22 +- internal/provider/device/resource.go | 96 ++- 3 files changed, 838 insertions(+), 258 deletions(-) diff --git a/internal/apiclient/v20250101/api.gen.go b/internal/apiclient/v20250101/api.gen.go index cc8f979..81bfd03 100644 --- a/internal/apiclient/v20250101/api.gen.go +++ b/internal/apiclient/v20250101/api.gen.go @@ -65,18 +65,6 @@ const ( User DeviceOwnership = "user" ) -// Defines values for DevicePatchRemove. -const ( - DisplayId DevicePatchRemove = "displayId" - DisplayName DevicePatchRemove = "displayName" - Metadata DevicePatchRemove = "metadata" - Os DevicePatchRemove = "os" - Ownership DevicePatchRemove = "ownership" - Serial DevicePatchRemove = "serial" - Tags DevicePatchRemove = "tags" - UserEmail DevicePatchRemove = "userEmail" -) - // Defines values for NewAuthorityType. const ( NewAuthorityTypeAdvanced NewAuthorityType = "advanced" @@ -369,7 +357,7 @@ type Device struct { // LastSeen Timestamp in RFC3339 format when the device last connected to Smallstep. Read only. LastSeen *time.Time `json:"lastSeen,omitempty"` - // Metadata A set of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. + // Metadata A map of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. Metadata *DeviceMetadata `json:"metadata,omitempty"` // Os The device operating system. @@ -393,7 +381,7 @@ type Device struct { // Tags A set of tags that can be used to group devices. Tags *DeviceTags `json:"tags,omitempty"` - // User The user that a device is assigned to. A device cannot be approved for high-assurance certificates until it has an assigned user. + // User The user that a device is assigned to. A device cannot be approved for high-assurance certificates until a user has been assigned to it. User *DeviceUser `json:"user,omitempty"` } @@ -407,14 +395,8 @@ type DeviceDisplayId = string // Setting this value explicitly will mask any MDM-derived value. type DeviceDisplayName = string -// DeviceMetadata A set of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. -type DeviceMetadata = []DeviceMetadataItem - -// DeviceMetadataItem defines model for deviceMetadataItem. -type DeviceMetadataItem struct { - Key string `json:"key"` - Value string `json:"value"` -} +// DeviceMetadata A map of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. +type DeviceMetadata = map[string]interface{} // DeviceOS The device operating system. // This field may be populated with a value derived from data synced from your team's MDMs. @@ -427,53 +409,80 @@ type DeviceOS string type DeviceOwnership string // DevicePatch Data that can be modified on an existing device. +// +// Some device fields may be populated with a value derived from data synced from your team's MDMs. +// Any data that is explicitly set by API or with the Smallstep dashboard will mask MDM-derived values. +// Use this list to specify fields that should be unset. If the device includes data synced from an MDM +// this will result in the fields being populated with values derived from the MDM data. Otherwise the +// removed fields will be empty. type DevicePatch struct { - // DisplayId An opaque identifier that may be used to link this device to an external inventory. - // This field may be populated with a value derived from data synced from your team's MDMs. - // Setting this value explicitly will mask any MDM-derived value. - DisplayId *DeviceDisplayId `json:"displayId,omitempty"` + DisplayId *DevicePatch_DisplayId `json:"displayId,omitempty"` + DisplayName *DevicePatch_DisplayName `json:"displayName,omitempty"` + Metadata *DevicePatch_Metadata `json:"metadata,omitempty"` + Os *DevicePatch_Os `json:"os,omitempty"` + Ownership *DevicePatch_Ownership `json:"ownership,omitempty"` + Serial *DevicePatch_Serial `json:"serial,omitempty"` + Tags *DevicePatch_Tags `json:"tags,omitempty"` - // DisplayName A friendly name for the device. - // This field may be populated with a value derived from data synced from your team's MDMs. - // Setting this value explicitly will mask any MDM-derived value. - DisplayName *DeviceDisplayName `json:"displayName,omitempty"` + // User The user that a device is assigned to. A device cannot be approved for high-assurance certificates until it has an assigned user. + User *DeviceUserPatch `json:"user,omitempty"` +} - // Metadata A set of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. - Metadata *DeviceMetadata `json:"metadata,omitempty"` +// DevicePatchDisplayId1 defines model for . +type DevicePatchDisplayId1 = interface{} - // Os The device operating system. - // This field may be populated with a value derived from data synced from your team's MDMs. - // Setting this value explicitly will mask any MDM-derived value. - Os *DeviceOS `json:"os,omitempty"` +// DevicePatch_DisplayId defines model for DevicePatch.DisplayId. +type DevicePatch_DisplayId struct { + union json.RawMessage +} - // Ownership Whether the device is owned by the user or the company. - // This field may be populated with a value derived from data synced from your team's MDMs. - // Setting this value explicitly will mask any MDM-derived value. - Ownership *DeviceOwnership `json:"ownership,omitempty"` +// DevicePatchDisplayName1 defines model for . +type DevicePatchDisplayName1 = interface{} - // Remove Some device fields may be populated with a value derived from data synced from your team's MDMs. - // Any data that is explicitly set by API or with the Smallstep dashboard will mask MDM-derived values. - // Use this list to specify fields that should be unset. If the device includes data synced from an MDM - // this will result in the fields being populated with values derived from the MDM data. Otherwise the - // removed fields will be empty. - Remove *[]DevicePatchRemove `json:"remove,omitempty"` +// DevicePatch_DisplayName defines model for DevicePatch.DisplayName. +type DevicePatch_DisplayName struct { + union json.RawMessage +} - // Serial The serial number of the device. - // This field may be populated with a value derived from data synced from your team's MDMs. - // Setting this value explicitly will mask any MDM-derived value. - Serial *DeviceSerial `json:"serial,omitempty"` +// DevicePatchMetadata1 defines model for . +type DevicePatchMetadata1 = interface{} - // Tags A set of tags that can be used to group devices. - Tags *DeviceTags `json:"tags,omitempty"` +// DevicePatch_Metadata defines model for DevicePatch.Metadata. +type DevicePatch_Metadata struct { + union json.RawMessage +} - // UserEmail The email of the user the device is assigned to. - // This field may be populated with a value derived from data synced from your team's MDMs. - // Setting this value explicitly will mask any MDM-derived value. - UserEmail *string `json:"userEmail,omitempty"` +// DevicePatchOs1 defines model for . +type DevicePatchOs1 = interface{} + +// DevicePatch_Os defines model for DevicePatch.Os. +type DevicePatch_Os struct { + union json.RawMessage } -// DevicePatchRemove defines model for DevicePatch.Remove. -type DevicePatchRemove string +// DevicePatchOwnership1 defines model for . +type DevicePatchOwnership1 = interface{} + +// DevicePatch_Ownership defines model for DevicePatch.Ownership. +type DevicePatch_Ownership struct { + union json.RawMessage +} + +// DevicePatchSerial1 defines model for . +type DevicePatchSerial1 = interface{} + +// DevicePatch_Serial defines model for DevicePatch.Serial. +type DevicePatch_Serial struct { + union json.RawMessage +} + +// DevicePatchTags1 defines model for . +type DevicePatchTags1 = interface{} + +// DevicePatch_Tags defines model for DevicePatch.Tags. +type DevicePatch_Tags struct { + union json.RawMessage +} // DeviceRequest Data that can be added to a device record. type DeviceRequest struct { @@ -487,7 +496,7 @@ type DeviceRequest struct { // Setting this value explicitly will mask any MDM-derived value. DisplayName *DeviceDisplayName `json:"displayName,omitempty"` - // Metadata A set of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. + // Metadata A map of key-value pairs available as template data when a provisioner with a webhook is used to issue a certificate to a device. Metadata *DeviceMetadata `json:"metadata,omitempty"` // Os The device operating system. @@ -511,7 +520,7 @@ type DeviceRequest struct { // Tags A set of tags that can be used to group devices. Tags *DeviceTags `json:"tags,omitempty"` - // User The user that a device is assigned to. A device cannot be approved for high-assurance certificates until it has an assigned user. + // User The user that a device is assigned to. A device cannot be approved for high-assurance certificates until a user has been assigned to it. User *DeviceUser `json:"user,omitempty"` } @@ -523,7 +532,7 @@ type DeviceSerial = string // DeviceTags A set of tags that can be used to group devices. type DeviceTags = []string -// DeviceUser The user that a device is assigned to. A device cannot be approved for high-assurance certificates until it has an assigned user. +// DeviceUser The user that a device is assigned to. A device cannot be approved for high-assurance certificates until a user has been assigned to it. type DeviceUser struct { // DisplayName Full name of the user the device is assigned to. Synced from team's identity provider. Read only. DisplayName *string `json:"displayName,omitempty"` @@ -534,6 +543,27 @@ type DeviceUser struct { Email string `json:"email"` } +// DeviceUserPatch The user that a device is assigned to. A device cannot be approved for high-assurance certificates until it has an assigned user. +type DeviceUserPatch struct { + // Email Email of the user the device is assigned to. + // This field may be populated with a value derived from data synced from your team's MDMs. + // Setting this value explicitly will mask any MDM-derived value. + Email DeviceUserPatch_Email `json:"email"` +} + +// DeviceUserPatchEmail0 defines model for . +type DeviceUserPatchEmail0 = interface{} + +// DeviceUserPatchEmail1 defines model for . +type DeviceUserPatchEmail1 = string + +// DeviceUserPatch_Email Email of the user the device is assigned to. +// This field may be populated with a value derived from data synced from your team's MDMs. +// Setting this value explicitly will mask any MDM-derived value. +type DeviceUserPatch_Email struct { + union json.RawMessage +} + // DistinguishedName Name used in x509 certificates type DistinguishedName struct { CommonName *string `json:"commonName,omitempty"` @@ -1313,6 +1343,502 @@ type PatchDeviceJSONRequestBody = DevicePatch // PutPlatformJSONRequestBody defines body for PutPlatform for application/json ContentType. type PutPlatformJSONRequestBody = NewPlatform +// AsDeviceDisplayId returns the union data inside the DevicePatch_DisplayId as a DeviceDisplayId +func (t DevicePatch_DisplayId) AsDeviceDisplayId() (DeviceDisplayId, error) { + var body DeviceDisplayId + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceDisplayId overwrites any union data inside the DevicePatch_DisplayId as the provided DeviceDisplayId +func (t *DevicePatch_DisplayId) FromDeviceDisplayId(v DeviceDisplayId) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceDisplayId performs a merge with any union data inside the DevicePatch_DisplayId, using the provided DeviceDisplayId +func (t *DevicePatch_DisplayId) MergeDeviceDisplayId(v DeviceDisplayId) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchDisplayId1 returns the union data inside the DevicePatch_DisplayId as a DevicePatchDisplayId1 +func (t DevicePatch_DisplayId) AsDevicePatchDisplayId1() (DevicePatchDisplayId1, error) { + var body DevicePatchDisplayId1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchDisplayId1 overwrites any union data inside the DevicePatch_DisplayId as the provided DevicePatchDisplayId1 +func (t *DevicePatch_DisplayId) FromDevicePatchDisplayId1(v DevicePatchDisplayId1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchDisplayId1 performs a merge with any union data inside the DevicePatch_DisplayId, using the provided DevicePatchDisplayId1 +func (t *DevicePatch_DisplayId) MergeDevicePatchDisplayId1(v DevicePatchDisplayId1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_DisplayId) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_DisplayId) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceDisplayName returns the union data inside the DevicePatch_DisplayName as a DeviceDisplayName +func (t DevicePatch_DisplayName) AsDeviceDisplayName() (DeviceDisplayName, error) { + var body DeviceDisplayName + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceDisplayName overwrites any union data inside the DevicePatch_DisplayName as the provided DeviceDisplayName +func (t *DevicePatch_DisplayName) FromDeviceDisplayName(v DeviceDisplayName) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceDisplayName performs a merge with any union data inside the DevicePatch_DisplayName, using the provided DeviceDisplayName +func (t *DevicePatch_DisplayName) MergeDeviceDisplayName(v DeviceDisplayName) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchDisplayName1 returns the union data inside the DevicePatch_DisplayName as a DevicePatchDisplayName1 +func (t DevicePatch_DisplayName) AsDevicePatchDisplayName1() (DevicePatchDisplayName1, error) { + var body DevicePatchDisplayName1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchDisplayName1 overwrites any union data inside the DevicePatch_DisplayName as the provided DevicePatchDisplayName1 +func (t *DevicePatch_DisplayName) FromDevicePatchDisplayName1(v DevicePatchDisplayName1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchDisplayName1 performs a merge with any union data inside the DevicePatch_DisplayName, using the provided DevicePatchDisplayName1 +func (t *DevicePatch_DisplayName) MergeDevicePatchDisplayName1(v DevicePatchDisplayName1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_DisplayName) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_DisplayName) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceMetadata returns the union data inside the DevicePatch_Metadata as a DeviceMetadata +func (t DevicePatch_Metadata) AsDeviceMetadata() (DeviceMetadata, error) { + var body DeviceMetadata + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceMetadata overwrites any union data inside the DevicePatch_Metadata as the provided DeviceMetadata +func (t *DevicePatch_Metadata) FromDeviceMetadata(v DeviceMetadata) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceMetadata performs a merge with any union data inside the DevicePatch_Metadata, using the provided DeviceMetadata +func (t *DevicePatch_Metadata) MergeDeviceMetadata(v DeviceMetadata) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchMetadata1 returns the union data inside the DevicePatch_Metadata as a DevicePatchMetadata1 +func (t DevicePatch_Metadata) AsDevicePatchMetadata1() (DevicePatchMetadata1, error) { + var body DevicePatchMetadata1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchMetadata1 overwrites any union data inside the DevicePatch_Metadata as the provided DevicePatchMetadata1 +func (t *DevicePatch_Metadata) FromDevicePatchMetadata1(v DevicePatchMetadata1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchMetadata1 performs a merge with any union data inside the DevicePatch_Metadata, using the provided DevicePatchMetadata1 +func (t *DevicePatch_Metadata) MergeDevicePatchMetadata1(v DevicePatchMetadata1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_Metadata) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_Metadata) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceOS returns the union data inside the DevicePatch_Os as a DeviceOS +func (t DevicePatch_Os) AsDeviceOS() (DeviceOS, error) { + var body DeviceOS + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceOS overwrites any union data inside the DevicePatch_Os as the provided DeviceOS +func (t *DevicePatch_Os) FromDeviceOS(v DeviceOS) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceOS performs a merge with any union data inside the DevicePatch_Os, using the provided DeviceOS +func (t *DevicePatch_Os) MergeDeviceOS(v DeviceOS) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchOs1 returns the union data inside the DevicePatch_Os as a DevicePatchOs1 +func (t DevicePatch_Os) AsDevicePatchOs1() (DevicePatchOs1, error) { + var body DevicePatchOs1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchOs1 overwrites any union data inside the DevicePatch_Os as the provided DevicePatchOs1 +func (t *DevicePatch_Os) FromDevicePatchOs1(v DevicePatchOs1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchOs1 performs a merge with any union data inside the DevicePatch_Os, using the provided DevicePatchOs1 +func (t *DevicePatch_Os) MergeDevicePatchOs1(v DevicePatchOs1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_Os) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_Os) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceOwnership returns the union data inside the DevicePatch_Ownership as a DeviceOwnership +func (t DevicePatch_Ownership) AsDeviceOwnership() (DeviceOwnership, error) { + var body DeviceOwnership + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceOwnership overwrites any union data inside the DevicePatch_Ownership as the provided DeviceOwnership +func (t *DevicePatch_Ownership) FromDeviceOwnership(v DeviceOwnership) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceOwnership performs a merge with any union data inside the DevicePatch_Ownership, using the provided DeviceOwnership +func (t *DevicePatch_Ownership) MergeDeviceOwnership(v DeviceOwnership) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchOwnership1 returns the union data inside the DevicePatch_Ownership as a DevicePatchOwnership1 +func (t DevicePatch_Ownership) AsDevicePatchOwnership1() (DevicePatchOwnership1, error) { + var body DevicePatchOwnership1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchOwnership1 overwrites any union data inside the DevicePatch_Ownership as the provided DevicePatchOwnership1 +func (t *DevicePatch_Ownership) FromDevicePatchOwnership1(v DevicePatchOwnership1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchOwnership1 performs a merge with any union data inside the DevicePatch_Ownership, using the provided DevicePatchOwnership1 +func (t *DevicePatch_Ownership) MergeDevicePatchOwnership1(v DevicePatchOwnership1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_Ownership) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_Ownership) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceSerial returns the union data inside the DevicePatch_Serial as a DeviceSerial +func (t DevicePatch_Serial) AsDeviceSerial() (DeviceSerial, error) { + var body DeviceSerial + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceSerial overwrites any union data inside the DevicePatch_Serial as the provided DeviceSerial +func (t *DevicePatch_Serial) FromDeviceSerial(v DeviceSerial) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceSerial performs a merge with any union data inside the DevicePatch_Serial, using the provided DeviceSerial +func (t *DevicePatch_Serial) MergeDeviceSerial(v DeviceSerial) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchSerial1 returns the union data inside the DevicePatch_Serial as a DevicePatchSerial1 +func (t DevicePatch_Serial) AsDevicePatchSerial1() (DevicePatchSerial1, error) { + var body DevicePatchSerial1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchSerial1 overwrites any union data inside the DevicePatch_Serial as the provided DevicePatchSerial1 +func (t *DevicePatch_Serial) FromDevicePatchSerial1(v DevicePatchSerial1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchSerial1 performs a merge with any union data inside the DevicePatch_Serial, using the provided DevicePatchSerial1 +func (t *DevicePatch_Serial) MergeDevicePatchSerial1(v DevicePatchSerial1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_Serial) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_Serial) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceTags returns the union data inside the DevicePatch_Tags as a DeviceTags +func (t DevicePatch_Tags) AsDeviceTags() (DeviceTags, error) { + var body DeviceTags + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceTags overwrites any union data inside the DevicePatch_Tags as the provided DeviceTags +func (t *DevicePatch_Tags) FromDeviceTags(v DeviceTags) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceTags performs a merge with any union data inside the DevicePatch_Tags, using the provided DeviceTags +func (t *DevicePatch_Tags) MergeDeviceTags(v DeviceTags) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDevicePatchTags1 returns the union data inside the DevicePatch_Tags as a DevicePatchTags1 +func (t DevicePatch_Tags) AsDevicePatchTags1() (DevicePatchTags1, error) { + var body DevicePatchTags1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDevicePatchTags1 overwrites any union data inside the DevicePatch_Tags as the provided DevicePatchTags1 +func (t *DevicePatch_Tags) FromDevicePatchTags1(v DevicePatchTags1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDevicePatchTags1 performs a merge with any union data inside the DevicePatch_Tags, using the provided DevicePatchTags1 +func (t *DevicePatch_Tags) MergeDevicePatchTags1(v DevicePatchTags1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DevicePatch_Tags) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DevicePatch_Tags) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + +// AsDeviceUserPatchEmail0 returns the union data inside the DeviceUserPatch_Email as a DeviceUserPatchEmail0 +func (t DeviceUserPatch_Email) AsDeviceUserPatchEmail0() (DeviceUserPatchEmail0, error) { + var body DeviceUserPatchEmail0 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceUserPatchEmail0 overwrites any union data inside the DeviceUserPatch_Email as the provided DeviceUserPatchEmail0 +func (t *DeviceUserPatch_Email) FromDeviceUserPatchEmail0(v DeviceUserPatchEmail0) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceUserPatchEmail0 performs a merge with any union data inside the DeviceUserPatch_Email, using the provided DeviceUserPatchEmail0 +func (t *DeviceUserPatch_Email) MergeDeviceUserPatchEmail0(v DeviceUserPatchEmail0) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +// AsDeviceUserPatchEmail1 returns the union data inside the DeviceUserPatch_Email as a DeviceUserPatchEmail1 +func (t DeviceUserPatch_Email) AsDeviceUserPatchEmail1() (DeviceUserPatchEmail1, error) { + var body DeviceUserPatchEmail1 + err := json.Unmarshal(t.union, &body) + return body, err +} + +// FromDeviceUserPatchEmail1 overwrites any union data inside the DeviceUserPatch_Email as the provided DeviceUserPatchEmail1 +func (t *DeviceUserPatch_Email) FromDeviceUserPatchEmail1(v DeviceUserPatchEmail1) error { + b, err := json.Marshal(v) + t.union = b + return err +} + +// MergeDeviceUserPatchEmail1 performs a merge with any union data inside the DeviceUserPatch_Email, using the provided DeviceUserPatchEmail1 +func (t *DeviceUserPatch_Email) MergeDeviceUserPatchEmail1(v DeviceUserPatchEmail1) error { + b, err := json.Marshal(v) + if err != nil { + return err + } + + merged, err := runtime.JSONMerge(t.union, b) + t.union = merged + return err +} + +func (t DeviceUserPatch_Email) MarshalJSON() ([]byte, error) { + b, err := t.union.MarshalJSON() + return b, err +} + +func (t *DeviceUserPatch_Email) UnmarshalJSON(b []byte) error { + err := t.union.UnmarshalJSON(b) + return err +} + // AsAwsPlatform returns the union data inside the NewPlatform_PlatformConfiguration as a AwsPlatform func (t NewPlatform_PlatformConfiguration) AsAwsPlatform() (AwsPlatform, error) { var body AwsPlatform @@ -6048,171 +6574,171 @@ var swaggerSpec = []string{ "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", + "Eh4/Pv6/AAAA//8kOJ/+KxEBAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/internal/provider/device/model.go b/internal/provider/device/model.go index d261d14..686f89f 100644 --- a/internal/provider/device/model.go +++ b/internal/provider/device/model.go @@ -109,8 +109,13 @@ func fromAPI(ctx context.Context, device *v20250101.Device, state utils.Attribut if device.Metadata != nil { meta := map[string]attr.Value{} - for _, md := range *device.Metadata { - meta[md.Key] = types.StringValue(md.Value) + for k, v := range *device.Metadata { + s, ok := v.(string) + if !ok { + diags.AddError("Invalid device metadata", k+" is not a string") + continue + } + meta[k] = types.StringValue(s) } metadata, d := types.MapValue(types.StringType, meta) diags.Append(d...) @@ -179,14 +184,11 @@ func toAPI(ctx context.Context, m *Model) (*v20250101.DeviceRequest, diag.Diagno diag := m.Metadata.ElementsAs(ctx, &meta, false) diags.Append(diag...) - var metadata []v20250101.DeviceMetadataItem - for k, v := range meta { - metadata = append(metadata, v20250101.DeviceMetadataItem{ - Key: k, - Value: v.ValueString(), - }) - } - if len(metadata) > 0 { + if len(meta) > 0 { + metadata := map[string]any{} + for k, v := range meta { + metadata[k] = v.ValueString() + } d.Metadata = &metadata } } diff --git a/internal/provider/device/resource.go b/internal/provider/device/resource.go index de59ae4..ffe532c 100644 --- a/internal/provider/device/resource.go +++ b/internal/provider/device/resource.go @@ -345,59 +345,111 @@ func (r *Resource) Update(ctx context.Context, req resource.UpdateRequest, resp return } - patch := v20250101.DevicePatch{} - var remove []v20250101.DevicePatchRemove + patch := v20250101.DevicePatch{ + DisplayId: &v20250101.DevicePatch_DisplayId{}, + DisplayName: &v20250101.DevicePatch_DisplayName{}, + Metadata: &v20250101.DevicePatch_Metadata{}, + Os: &v20250101.DevicePatch_Os{}, + Ownership: &v20250101.DevicePatch_Ownership{}, + Serial: &v20250101.DevicePatch_Serial{}, + Tags: &v20250101.DevicePatch_Tags{}, + User: &v20250101.DeviceUserPatch{}, + } if resource.DisplayId == nil { - remove = append(remove, v20250101.DisplayId) + err := patch.DisplayId.FromDevicePatchDisplayId1(nil) + if err != nil { + diags.AddError("prepare device patch: unset display_id", err.Error()) + } } else { - patch.DisplayId = resource.DisplayId + err := patch.DisplayId.FromDeviceDisplayId(*resource.DisplayId) + if err != nil { + diags.AddError("prepare device patch: set display_id", err.Error()) + } } if resource.DisplayName == nil { - remove = append(remove, v20250101.DisplayName) + err := patch.DisplayName.FromDevicePatchDisplayName1(nil) + if err != nil { + diags.AddError("prepare device patch: unset display_name", err.Error()) + } } else { - patch.DisplayName = resource.DisplayName + err := patch.DisplayName.FromDeviceDisplayName(*resource.DisplayName) + if err != nil { + diags.AddError("prepare device patch: set display_name", err.Error()) + } } if resource.Metadata == nil { - remove = append(remove, v20250101.Metadata) + err := patch.Metadata.FromDevicePatchMetadata1(nil) + if err != nil { + diags.AddError("prepare device patch: unset metadata", err.Error()) + } } else { - patch.Metadata = resource.Metadata + err := patch.Metadata.FromDeviceMetadata(*resource.Metadata) + if err != nil { + diags.AddError("prepare device patch: unset metadata", err.Error()) + } } if resource.Os == nil { - remove = append(remove, v20250101.Os) + err := patch.Os.FromDevicePatchOs1(nil) + if err != nil { + diags.AddError("prepare device patch: unset os", err.Error()) + } } else { - patch.Os = resource.Os + err := patch.Os.FromDeviceOS(*resource.Os) + if err != nil { + diags.AddError("prepare device patch: set os", err.Error()) + } } if resource.Ownership == nil { - remove = append(remove, v20250101.Ownership) + err := patch.Ownership.FromDevicePatchOwnership1(nil) + if err != nil { + diags.AddError("prepare device patch: unset ownership", err.Error()) + } } else { - patch.Ownership = resource.Ownership + err := patch.Ownership.FromDeviceOwnership(*resource.Ownership) + if err != nil { + diags.AddError("prepare device patch: set ownership", err.Error()) + } } if resource.Serial == nil { - remove = append(remove, v20250101.Serial) + err := patch.Serial.FromDevicePatchSerial1(nil) + if err != nil { + diags.AddError("prepare device patch: unset serial", err.Error()) + } } else { - patch.Serial = resource.Serial + err := patch.Serial.FromDeviceSerial(*resource.Serial) + if err != nil { + diags.AddError("prepare device patch: set serial", err.Error()) + } } if resource.Tags == nil { - remove = append(remove, v20250101.Tags) + err := patch.Tags.FromDevicePatchTags1(nil) + if err != nil { + diags.AddError("prepare device patch: unset tags", err.Error()) + } } else { - patch.Tags = resource.Tags + err := patch.Tags.FromDeviceTags(*resource.Tags) + if err != nil { + diags.AddError("prepare device patch: set tags", err.Error()) + } } if resource.User == nil || resource.User.Email == "" { - remove = append(remove, v20250101.UserEmail) + err := patch.User.Email.FromDeviceUserPatchEmail0(nil) + if err != nil { + diags.AddError("prepare device patch: unset user email", err.Error()) + } } else { - patch.UserEmail = &resource.User.Email - } - - if len(remove) > 0 { - patch.Remove = &remove + err := patch.User.Email.FromDeviceUserPatchEmail1(resource.User.Email) + if err != nil { + diags.AddError("prepare device patch: unset user email", err.Error()) + } } httpResp, err := r.client.PatchDevice(ctx, deviceID, &v20250101.PatchDeviceParams{}, patch) -- GitLab