func Configure() { c := types.NewCliConfig() fmt.Printf("Modifying \"%s\" \n\n", c.CredentialsFile) var Profile string firstProfile := "" if len(c.GetProfiles()) < 1 { fmt.Printf("Profile Name [default]: ") } else { fmt.Printf("Choose an existing profile to update or enter a new one to create: \n") fmt.Printf("Available profiles: [ ") for i, profile := range c.GetProfiles() { if firstProfile == "" { firstProfile = profile } fmt.Printf("%s", profile) if i+1 < len(c.GetProfiles()) { fmt.Printf(", ") } } fmt.Printf(" ]\n") fmt.Printf("Profile Name [%s]: ", firstProfile) } fmt.Scanf("%s", &Profile) if Profile == "" { if firstProfile == "" { Profile = "default" } else { Profile = firstProfile } } var newProfile = true for _, profile := range c.GetProfiles() { if Profile == profile { newProfile = false } } var AccessKeyID string var SecretAccessKey string if newProfile { AccessKeyID = "" SecretAccessKey = "" } else { AccessKeyID = c.GetKeyID(Profile) SecretAccessKey = c.GetAccessKey(Profile) } if AccessKeyID == "" { AccessKeyID = "None" } fmt.Printf("AWS Access Key ID [%s]: ", AccessKeyID) fmt.Scanf("%s", &AccessKeyID) if SecretAccessKey == "" { SecretAccessKey = "None" } fmt.Printf("AWS Secret Access Key [%s]: ", SecretAccessKey) fmt.Scanf("%s", &SecretAccessKey) // goconfig updates profile or creates new one c.WriteProfile(Profile, AccessKeyID, SecretAccessKey) }
func CreateUsers(profile, srcFile string) { fmt.Printf("Reading users from %s\n", srcFile) // check if a data file not provided if srcFile == "" { fmt.Printf("srcFile=%s\n", srcFile) fmt.Printf("provide a file with users -create-users -file={your file} \n") return } // create a slice of User struct var users = []types.User{} // read configuration file provided csvFile, err := os.Open(srcFile) if err != nil { fmt.Printf("Can't open file: %s\n", srcFile) fmt.Println(err) return } defer csvFile.Close() // create User struct from csv file reader := csv.NewReader(csvFile) for { line, err := reader.Read() if err == io.EOF { break } else if err != nil { fmt.Println(err) return } if len(line) != 3 { fmt.Printf("Line stated below doesn't have 3 values\n%s\n", line) return } users = append(users, types.User{line[0], line[1], line[2]}) } // get IAM user to use in order to create other users c := types.NewCliConfig() // create credentials from the .credentials file using the profile user passed creds := credentials.NewStaticCredentials(c.GetKeyID(profile), c.GetAccessKey(profile), "") // create a IAM service svc := iam.New(&aws.Config{ Credentials: creds, }) // loop over users slice and create users for _, u := range users { if err := u.CreateUser(svc); err == nil { if err = u.CreateLoginProfile(svc); err == nil { if err = u.AddUserToGroup(svc); err == nil { fmt.Printf("Created user \"%s\" with password \"%s\" in group \"%s\"\n", u.UserName, u.Password, u.GroupName) } } } else { fmt.Println(err.Error()) } } }