aws sdk utils
This commit is contained in:
parent
81c611383b
commit
3a554568ca
@ -9,13 +9,19 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go-v2/config"
|
"github.com/aws/aws-sdk-go-v2/config"
|
||||||
"github.com/aws/aws-sdk-go-v2/service/ec2"
|
"github.com/aws/aws-sdk-go-v2/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go-v2/service/ec2/types"
|
"github.com/aws/aws-sdk-go-v2/service/ec2/types"
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/thefeli73/polemos/state"
|
"github.com/thefeli73/polemos/state"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// AwsInstance is basic info about a single aws instance (instance id, redion, pubIP and privIP)
|
||||||
|
type AwsInstance struct {
|
||||||
|
InstanceID string
|
||||||
|
Region string
|
||||||
|
PublicIP string
|
||||||
|
PrivateIP string
|
||||||
|
}
|
||||||
|
|
||||||
// NewConfig creates a AWS config for a specific region
|
// NewConfig creates a AWS config for a specific region
|
||||||
func NewConfig(region string, credentials string) aws.Config {
|
func NewConfig(region string, credentials string) aws.Config {
|
||||||
// Create a new AWS config
|
|
||||||
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithSharedConfigFiles([]string{credentials}), config.WithRegion(region))
|
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithSharedConfigFiles([]string{credentials}), config.WithRegion(region))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error creating config:", err)
|
fmt.Println("Error creating config:", err)
|
||||||
@ -26,9 +32,9 @@ func NewConfig(region string, credentials string) aws.Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IndexInstances scans all configured regions for instances and add them to services
|
// IndexInstances scans all configured regions for instances and add them to services
|
||||||
func IndexInstances(config state.Config) {
|
func IndexInstances(config state.Config) []AwsInstance {
|
||||||
|
awsInstances := []AwsInstance{}
|
||||||
for _, region := range config.AWS.Regions {
|
for _, region := range config.AWS.Regions {
|
||||||
//fmt.Println("Listing instances in region:", region)
|
|
||||||
awsConfig := NewConfig(region, config.AWS.CredentialsPath)
|
awsConfig := NewConfig(region, config.AWS.CredentialsPath)
|
||||||
instances, err := Instances(awsConfig)
|
instances, err := Instances(awsConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -36,38 +42,33 @@ func IndexInstances(config state.Config) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//fmt.Println("Listing instances in region:", region)
|
||||||
for _, instance := range instances {
|
for _, instance := range instances {
|
||||||
InstanceInfo(awsConfig, *instance.InstanceId)
|
var publicAddr string
|
||||||
u := uuid.New()
|
if instance.PublicIpAddress != nil {
|
||||||
_ = u
|
publicAddr = aws.ToString(instance.PublicIpAddress)
|
||||||
|
}
|
||||||
|
awsInstances = append(awsInstances, AwsInstance{
|
||||||
|
InstanceID: aws.ToString(instance.InstanceId),
|
||||||
|
Region: region,
|
||||||
|
PublicIP: publicAddr,
|
||||||
|
PrivateIP: aws.ToString(instance.PrivateIpAddress)})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return awsInstances
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstanceInfo collects info about a specific instance in a region
|
// PrintInstanceInfo prints info about a specific instance in a region
|
||||||
func InstanceInfo(config aws.Config, instanceID string) {
|
func PrintInstanceInfo(instance *types.Instance) {
|
||||||
// Create a new EC2 service client
|
fmt.Println("\tInstance ID:", aws.ToString(instance.InstanceId))
|
||||||
svc := ec2.NewFromConfig(config)
|
fmt.Println("\t\tInstance Type:", string(instance.InstanceType))
|
||||||
|
fmt.Println("\t\tAMI ID:", aws.ToString(instance.ImageId))
|
||||||
input := &ec2.DescribeInstancesInput{
|
fmt.Println("\t\tState:", string(instance.State.Name))
|
||||||
InstanceIds: []string{instanceID},
|
fmt.Println("\t\tAvailability Zone:", aws.ToString(instance.Placement.AvailabilityZone))
|
||||||
}
|
|
||||||
result, err := svc.DescribeInstances(context.TODO(), input)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error describing instance:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// Print instance information
|
|
||||||
instance := result.Reservations[0].Instances[0]
|
|
||||||
fmt.Println("Instance ID:", aws.ToString(instance.InstanceId))
|
|
||||||
fmt.Println("Instance Type:", string(instance.InstanceType))
|
|
||||||
fmt.Println("AMI ID:", aws.ToString(instance.ImageId))
|
|
||||||
fmt.Println("State:", string(instance.State.Name))
|
|
||||||
fmt.Println("Availability Zone:", aws.ToString(instance.Placement.AvailabilityZone))
|
|
||||||
if instance.PublicIpAddress != nil {
|
if instance.PublicIpAddress != nil {
|
||||||
fmt.Println("Public IP Address:", aws.ToString(instance.PublicIpAddress))
|
fmt.Println("\t\tPublic IP Address:", aws.ToString(instance.PublicIpAddress))
|
||||||
}
|
}
|
||||||
fmt.Println("Private IP Address:", aws.ToString(instance.PrivateIpAddress))
|
fmt.Println("\t\tPrivate IP Address:", aws.ToString(instance.PrivateIpAddress))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instances returns all instances for a config i.e. a region
|
// Instances returns all instances for a config i.e. a region
|
||||||
|
Loading…
Reference in New Issue
Block a user