Documentation ¶
Overview ¶
common/configurationprofiles/plist/plistdiffsuppression.go contains the functions to process configuration profiles for diff suppression.
common/configurationprofiles/plist/payload.go Description: This file contains the ConfigurationProfile and PayloadContent structs, as well as functions for unmarshalling, marshalling, and validating plist payloads.
common/configurationprofiles/plist/shared.go contains the shared functions to process configuration profiles.
common/configurationprofiles/plist/state.go contains the functions to process configuration profiles for terraform state.
common/configurationprofiles/plist/validate.go Description: This file contains the Configuration Profile validation functions.
Index ¶
- func ConvertHCLToPlist(d *schema.ResourceData) (string, error)
- func ConvertPlistToHCL(plistXML string) ([]interface{}, error)
- func DecodePlist(plistData []byte) (map[string]interface{}, error)
- func EncodePlist(cleanedData map[string]interface{}) (string, error)
- func GetTypedValue(value interface{}) interface{}
- func MarshalPayload(profile *ConfigurationProfile) (string, error)
- func MergeConfigurationPayloadFieldsIntoMap(payload *PayloadContent) map[string]interface{}
- func MergeConfigurationProfileFieldsIntoMap(profile *ConfigurationProfile) map[string]interface{}
- func NormalizePayloadState(payload any) string
- func ProcessConfigurationProfileForDiffSuppression(plistData string, fieldsToRemove []string) (string, error)
- func RemoveFields(data map[string]interface{}, fieldsToRemove []string, path string)
- func SortPlistKeys(data map[string]interface{}) map[string]interface{}
- func ValidatePayloadFields(profile *ConfigurationProfile) []error
- type ConfigurationProfile
- type PayloadContent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConvertHCLToPlist ¶
func ConvertHCLToPlist(d *schema.ResourceData) (string, error)
ConvertHCLToPlist builds a plist from the Terraform HCL schema data Used by plist generator resource to convert HCL data to plist
func ConvertPlistToHCL ¶
ConvertPlistToHCL converts a plist XML string to Terraform HCL schema data Used by plist generator resource
func DecodePlist ¶
Function to decode a plist into a map without removing any fields
func EncodePlist ¶
EncodePlist encodes a cleaned map back to plist XML format
func GetTypedValue ¶
func GetTypedValue(value interface{}) interface{}
GetTypedValue converts the value from the HCL always stored as string into the appropriate type for plist serialization.
func MarshalPayload ¶
func MarshalPayload(profile *ConfigurationProfile) (string, error)
MarshalPayload marshals a ConfigurationProfile struct into a plist payload using mapstructure.
func MergeConfigurationPayloadFieldsIntoMap ¶
func MergeConfigurationPayloadFieldsIntoMap(payload *PayloadContent) map[string]interface{}
MergeConfigurationPayloadFieldsIntoMap merges the fields of a ConfigurationPayload struct into a map.
func MergeConfigurationProfileFieldsIntoMap ¶
func MergeConfigurationProfileFieldsIntoMap(profile *ConfigurationProfile) map[string]interface{}
MergeConfigurationProfileFieldsIntoMap merges the fields of a ConfigurationProfile struct into a map.
func NormalizePayloadState ¶
NormalizePayloadState processes and normalizes a macOS Configuration Profile payload. This function is crucial for maintaining consistency in plist structures, especially when working with Terraform state management for Jamf Pro configuration profiles.
The function performs the following steps:
- Unmarshals the input payload (expected to be a plist XML string) into a generic map structure.
- Normalizes the payload content using normalizePlistPayloadContent, which recursively processes nested PayloadContent fields without altering the overall structure.
- Marshals the normalized data back into a plist XML string.
The function is designed to work with the plist library for unmarshalling and marshalling, avoiding the use of struct-based approaches (like mapstructure) that might inadvertently add or remove fields.
Parameters:
- payload: Any type, expected to be a string containing a plist XML representation of a Configuration Profile.
Returns:
- A string containing the normalized plist XML. If any error occurs during processing, an empty string is returned.
func ProcessConfigurationProfileForDiffSuppression ¶
func ProcessConfigurationProfileForDiffSuppression(plistData string, fieldsToRemove []string) (string, error)
ProcessConfigurationProfileForDiffSuppression processes the plist data, removes specified fields, and returns the cleaned plist XML as a string.
func RemoveFields ¶
RemoveFields removes specified fields from a nested map
func SortPlistKeys ¶
SortPlistKeys recursively sorts the keys of a nested map in alphabetical order, and sorts elements within arrays if they are strings or dictionaries.
func ValidatePayloadFields ¶
func ValidatePayloadFields(profile *ConfigurationProfile) []error
ValidatePayloadFields validates the mapstructure field tags of a ConfigurationProfile struct and ensures that the required struct field tags are present and correctly populated. It checks for specific validation rules, such as ensuring that required fields are not empty. Additional custom validation rules can be added within this function to enforce other constraints based on the `validate` tags associated with the struct fields.
Types ¶
type ConfigurationProfile ¶
type ConfigurationProfile struct { // Standard / Expected PayloadDescription string `mapstructure:"PayloadDescription"` PayloadDisplayName string `mapstructure:"PayloadDisplayName" validate:"required"` PayloadEnabled bool `mapstructure:"PayloadEnabled" validate:"required"` PayloadIdentifier string `mapstructure:"PayloadIdentifier" validate:"required"` PayloadOrganization string `mapstructure:"PayloadOrganization" validate:"required"` PayloadRemovalDisallowed bool `mapstructure:"PayloadRemovalDisallowed" validate:"required"` PayloadScope string `mapstructure:"PayloadScope" validate:"required,oneof=System User Computer"` PayloadType string `mapstructure:"PayloadType" validate:"required,eq=Configuration"` PayloadUUID string `mapstructure:"PayloadUUID" validate:"required"` PayloadVersion int `mapstructure:"PayloadVersion" validate:"required"` PayloadContent []PayloadContent `mapstructure:"PayloadContent"` // Catch all for unexpected fields Unexpected map[string]interface{} `mapstructure:",remain"` }
ConfigurationProfile represents a root level MacOS configuration profile.
func UnmarshalPayload ¶
func UnmarshalPayload(payload string) (*ConfigurationProfile, error)
UnmarshalPayload unmarshals a plist payload into a ConfigurationProfile struct using mapstructure.
type PayloadContent ¶
type PayloadContent struct { // Standard / Expected PayloadDescription string `mapstructure:"PayloadDescription"` PayloadDisplayName string `mapstructure:"PayloadDisplayName"` PayloadEnabled bool `mapstructure:"PayloadEnabled"` PayloadIdentifier string `mapstructure:"PayloadIdentifier"` PayloadOrganization string `mapstructure:"PayloadOrganization"` PayloadType string `mapstructure:"PayloadType"` PayloadUUID string `mapstructure:"PayloadUUID"` PayloadVersion int `mapstructure:"PayloadVersion"` // Variable ConfigurationItems map[string]interface{} `mapstructure:",remain"` }
ConfigurationPayload represents a nested MacOS configuration profile.