plist

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 3, 2024 License: MPL-2.0 Imports: 13 Imported by: 0

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

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

func ConvertPlistToHCL(plistXML string) ([]interface{}, error)

ConvertPlistToHCL converts a plist XML string to Terraform HCL schema data Used by plist generator resource

func DecodePlist

func DecodePlist(plistData []byte) (map[string]interface{}, error)

Function to decode a plist into a map without removing any fields

func EncodePlist

func EncodePlist(cleanedData map[string]interface{}) (string, error)

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

func NormalizePayloadState(payload any) string

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:

  1. Unmarshals the input payload (expected to be a plist XML string) into a generic map structure.
  2. Normalizes the payload content using normalizePlistPayloadContent, which recursively processes nested PayloadContent fields without altering the overall structure.
  3. 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

func RemoveFields(data map[string]interface{}, fieldsToRemove []string, path string)

RemoveFields removes specified fields from a nested map

func SortPlistKeys

func SortPlistKeys(data map[string]interface{}) map[string]interface{}

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.

Directories

Path Synopsis
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL