aws sdk utils
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user