agent/platform/platform_darwin.go (88 lines of code) (raw):

// Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). You may not // use this file except in compliance with the License. A copy of the // License is located at // // http://aws.amazon.com/apache2.0/ // // or in the "license" file accompanying this file. This file is distributed // on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, // either express or implied. See the License for the specific language governing // permissions and limitations under the License. //go:build darwin // +build darwin // Package platform contains platform specific utilities. package platform import ( "context" "fmt" "os" "os/exec" "path/filepath" "strings" "time" "github.com/aws/amazon-ssm-agent/agent/log" ) const ( platformDetailsCommand = "sw_vers" ) func isPlatformWindowsServer2012OrEarlier(_ log.T) (bool, error) { return false, nil } func isPlatformWindowsServer2025OrLater(_ log.T) (bool, error) { return false, nil } func isWindowsServer2025OrLater(_ string, _ log.T) (bool, error) { return false, nil } func getPlatformData(log log.T) (PlatformData, error) { platformName, platformVersion, err := getPlatformDetails(log) return PlatformData{ Name: platformName, Version: platformVersion, Type: "macos", }, err } var execWithTimeout = func(cmd string, param ...string) ([]byte, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() return exec.CommandContext(ctx, cmd, param...).Output() } func getPlatformDetails(log log.T) (name string, version string, err error) { var contentsBytes []byte name, version = notAvailableMessage, notAvailableMessage if contentsBytes, err = execWithTimeout(platformDetailsCommand); err != nil { log.Errorf("Failed to query for platform info: %v", err) return name, version, err } platformString := strings.TrimSpace(string(contentsBytes)) if len(platformString) == 0 { return name, version, fmt.Errorf("received empty string when querying for platform info") } log.Debugf("queried for platform info: %s", platformString) for _, platformLine := range strings.Split(platformString, "\n") { if len(platformLine) == 0 { continue } platformLineSplit := strings.Split(platformLine, ":") if len(platformLineSplit) < 2 { log.Warnf("Unexpected line when parsing darwin platform: %s", platformLine) continue } platformInfoKey := strings.TrimSpace(platformLineSplit[0]) platformInfoVal := strings.TrimSpace(platformLineSplit[1]) if platformInfoKey == "ProductName" { name = platformInfoVal } else if platformInfoKey == "ProductVersion" { version = platformInfoVal } } return name, version, err } func initSystemInfoCache(_ log.T, _ string) (string, error) { return "", nil } var hostNameCommand = filepath.Join("/bin", "hostname") // fullyQualifiedDomainName returns the Fully Qualified Domain Name of the instance, otherwise the hostname func fullyQualifiedDomainName(_ log.T) string { var hostName, fqdn string var err error if hostName, err = os.Hostname(); err != nil { return "" } var contentBytes []byte if contentBytes, err = execWithTimeout(hostNameCommand, "-f"); err == nil { fqdn = string(contentBytes) //trim whitespaces - since by default above command appends '\n' at the end. //e.g: 'ip-172-31-7-113.ec2.internal\n' fqdn = strings.TrimSpace(fqdn) } if fqdn != "" { return fqdn } return strings.TrimSpace(hostName) } func isPlatformNanoServer(_ log.T) (bool, error) { return false, nil }