From 2d13eca5dbaa2a9ba5d25de9776a855abe540095 Mon Sep 17 00:00:00 2001 From: Didi Kohen Date: Wed, 13 Nov 2019 19:01:40 +0200 Subject: [PATCH 1/3] Add AWS EC2 metadata sysvars --- sysvars/sysvars.go | 4 ++++ sysvars/sysvars_ec2.go | 46 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 sysvars/sysvars_ec2.go diff --git a/sysvars/sysvars.go b/sysvars/sysvars.go index 4806cf04..395f25ad 100644 --- a/sysvars/sysvars.go +++ b/sysvars/sysvars.go @@ -110,6 +110,10 @@ func Init(ll *logger.Logger, userVars map[string]string) error { if err := gceVars(sysVars); err != nil { return err } + } else { + if err := getEC2Meta(sysVars); err != nil { + return fmt.Errorf("utils.SystemVars: error getting ec2 metadata: %v", err) + } } for k, v := range userVars { diff --git a/sysvars/sysvars_ec2.go b/sysvars/sysvars_ec2.go new file mode 100644 index 00000000..2e8df90e --- /dev/null +++ b/sysvars/sysvars_ec2.go @@ -0,0 +1,46 @@ +package sysvars + +import ( + "fmt" + "strings" + + "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/session" +) + +func getEC2Meta(sysVars map[string]string) error { + ec2Session, err := session.NewSession() + if err != nil { + fmt.Printf("Could not create session %v", err) + return err + } + ec2met := ec2metadata.New(ec2Session) + // Doing the availability check in module since we need a session + if ec2met.Available() == false { + sysVars["EC2_METADATA_Availabile"] = "false" + return nil + } + + id, err := ec2met.GetInstanceIdentityDocument() + if err != nil { + fmt.Printf("Could not get instance document %v", err) + return err + } + + sysVars["EC2_DevpayProductCodes"] = strings.Join(id.DevpayProductCodes, ",") + sysVars["EC2_MarketplaceProductCodes"] = strings.Join(id.MarketplaceProductCodes, ",") + sysVars["EC2_AvailabilityZone"] = id.AvailabilityZone + sysVars["EC2_PrivateIP"] = id.PrivateIP + sysVars["EC2_Version"] = id.Version + sysVars["EC2_Region"] = id.Region + sysVars["EC2_InstanceID"] = id.InstanceID + sysVars["EC2_BillingProducts"] = strings.Join(id.BillingProducts, ",") + sysVars["EC2_InstanceType"] = id.InstanceType + sysVars["EC2_AccountID"] = id.AccountID + sysVars["EC2_PendingTime"] = id.PendingTime.String() + sysVars["EC2_ImageID"] = id.ImageID + sysVars["EC2_KernelID"] = id.KernelID + sysVars["EC2_RamdiskID"] = id.RamdiskID + sysVars["EC2_Architecture"] = id.Architecture + return nil +} From 9a93400ee12efe2097fea6edef5c7b989584003e Mon Sep 17 00:00:00 2001 From: Didi Kohen Date: Thu, 14 Nov 2019 12:34:10 +0200 Subject: [PATCH 2/3] Fix prints, add license, set boolean to true --- sysvars/sysvars_ec2.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/sysvars/sysvars_ec2.go b/sysvars/sysvars_ec2.go index 2e8df90e..c92524db 100644 --- a/sysvars/sysvars_ec2.go +++ b/sysvars/sysvars_ec2.go @@ -1,3 +1,16 @@ +// Copyright 2019 Didi Kohen +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License 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. package sysvars import ( @@ -11,8 +24,7 @@ import ( func getEC2Meta(sysVars map[string]string) error { ec2Session, err := session.NewSession() if err != nil { - fmt.Printf("Could not create session %v", err) - return err + return fmt.Errorf("Could not create session %v", err) } ec2met := ec2metadata.New(ec2Session) // Doing the availability check in module since we need a session @@ -23,10 +35,11 @@ func getEC2Meta(sysVars map[string]string) error { id, err := ec2met.GetInstanceIdentityDocument() if err != nil { - fmt.Printf("Could not get instance document %v", err) - return err + sysVars["EC2_METADATA_Availabile"] = "false" + return fmt.Errorf("Could not get instance document %v", err) } + sysVars["EC2_METADATA_Availabile"] = "true" sysVars["EC2_DevpayProductCodes"] = strings.Join(id.DevpayProductCodes, ",") sysVars["EC2_MarketplaceProductCodes"] = strings.Join(id.MarketplaceProductCodes, ",") sysVars["EC2_AvailabilityZone"] = id.AvailabilityZone From a806f2c258a5a4f6df6b09999f507905868f9069 Mon Sep 17 00:00:00 2001 From: Didi Kohen Date: Sun, 17 Nov 2019 11:35:38 +0200 Subject: [PATCH 3/3] CR changes --- sysvars/sysvars.go | 2 +- sysvars/sysvars_ec2.go | 23 ++++++++--------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/sysvars/sysvars.go b/sysvars/sysvars.go index 395f25ad..7baf2d56 100644 --- a/sysvars/sysvars.go +++ b/sysvars/sysvars.go @@ -111,7 +111,7 @@ func Init(ll *logger.Logger, userVars map[string]string) error { return err } } else { - if err := getEC2Meta(sysVars); err != nil { + if err := ec2Vars(sysVars); err != nil { return fmt.Errorf("utils.SystemVars: error getting ec2 metadata: %v", err) } } diff --git a/sysvars/sysvars_ec2.go b/sysvars/sysvars_ec2.go index c92524db..c69df28c 100644 --- a/sysvars/sysvars_ec2.go +++ b/sysvars/sysvars_ec2.go @@ -1,4 +1,4 @@ -// Copyright 2019 Didi Kohen +// Copyright 2019 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,42 +15,35 @@ package sysvars import ( "fmt" - "strings" "github.com/aws/aws-sdk-go/aws/ec2metadata" "github.com/aws/aws-sdk-go/aws/session" ) -func getEC2Meta(sysVars map[string]string) error { - ec2Session, err := session.NewSession() +func ec2Vars(sysVars map[string]string) error { + s, err := session.NewSession() if err != nil { - return fmt.Errorf("Could not create session %v", err) + return fmt.Errorf("ec2Vars: could not create session %v", err) } - ec2met := ec2metadata.New(ec2Session) + md := ec2metadata.New(s) // Doing the availability check in module since we need a session - if ec2met.Available() == false { + if md.Available() == false { sysVars["EC2_METADATA_Availabile"] = "false" return nil } - id, err := ec2met.GetInstanceIdentityDocument() + id, err := md.GetInstanceIdentityDocument() if err != nil { sysVars["EC2_METADATA_Availabile"] = "false" - return fmt.Errorf("Could not get instance document %v", err) + return fmt.Errorf("ec2Vars: could not get instance document %v", err) } sysVars["EC2_METADATA_Availabile"] = "true" - sysVars["EC2_DevpayProductCodes"] = strings.Join(id.DevpayProductCodes, ",") - sysVars["EC2_MarketplaceProductCodes"] = strings.Join(id.MarketplaceProductCodes, ",") sysVars["EC2_AvailabilityZone"] = id.AvailabilityZone sysVars["EC2_PrivateIP"] = id.PrivateIP - sysVars["EC2_Version"] = id.Version sysVars["EC2_Region"] = id.Region sysVars["EC2_InstanceID"] = id.InstanceID - sysVars["EC2_BillingProducts"] = strings.Join(id.BillingProducts, ",") sysVars["EC2_InstanceType"] = id.InstanceType - sysVars["EC2_AccountID"] = id.AccountID - sysVars["EC2_PendingTime"] = id.PendingTime.String() sysVars["EC2_ImageID"] = id.ImageID sysVars["EC2_KernelID"] = id.KernelID sysVars["EC2_RamdiskID"] = id.RamdiskID