// NewAWS gives new Lookup client. // // When opts.Log is nil, defaultLogger is used instead. func NewAWS(opts *amazon.ClientOptions) (*Lookup, error) { optsCopy := *opts if optsCopy.Log == nil { optsCopy.Log = defaultLogger } clients, err := amazon.NewClients(&optsCopy) if err != nil { return nil, err } return &Lookup{ clients: clients, log: optsCopy.Log, }, nil }
func realMain() error { conf := new(Config) multiconfig.MustLoadWithPath("config.toml", conf) db := mongodb.NewMongoDB(conf.MongoURL) opts := &amazon.ClientOptions{ Credentials: credentials.NewStaticCredentials(conf.AccessKey, conf.SecretKey, ""), Regions: amazon.ProductionRegions, Log: logging.NewLogger("userdebug"), } ec2clients, err := amazon.NewClients(opts) if err != nil { panic(err) } w := new(tabwriter.Writer) w.Init(os.Stdout, 10, 8, 0, '\t', 0) defer w.Flush() // search via username, mongodb -> aws if conf.Username != "" { ms, err := machinesFromUsername(db, conf.Username) if err == nil { ms.Print(w) for _, m := range ms.docs { // if the mongodb document has a region and instanceId, display it too if m.Meta.Region != "" && m.Meta.InstanceId != "" { client, err := ec2clients.Region(m.Meta.Region) if err != nil { return err } i, err := awsData(client, m.Meta.InstanceId) if err != nil { return err } i.Print(w) } } } else { fmt.Fprintf(os.Stderr, err.Error()) } } // search via instanceId, aws -> mongodb if conf.InstanceId != "" { for _, client := range ec2clients.Regions() { i, err := awsData(client, conf.InstanceId) if err != nil { continue // if not found continue with next region } // if we find a mongoDB document display it ms, err := machinesFromInstanceId(db, conf.InstanceId) if err == nil { ms.Print(w) } i.Print(w) break } } return nil }
func providers() (*awsprovider.Provider, *softlayer.Provider) { c := credentials.NewStaticCredentials(os.Getenv("KLOUD_ACCESSKEY"), os.Getenv("KLOUD_SECRETKEY"), "") mongoURL := os.Getenv("KLOUD_MONGODB_URL") if mongoURL == "" { panic("KLOUD_MONGODB_URL is not set") } modelhelper.Initialize(mongoURL) db := modelhelper.Mongo dnsOpts := &dnsclient.Options{ Creds: c, HostedZone: "dev.koding.io", Log: logging.NewCustom("dns", true), } dnsInstance, err := dnsclient.NewRoute53Client(dnsOpts) if err != nil { panic(err) } dnsStorage := dnsstorage.NewMongodbStorage(db) usd := &userdata.Userdata{ Keycreator: &keycreator.Key{ KontrolURL: conf.KontrolURL, KontrolPrivateKey: testkeys.Private, KontrolPublicKey: testkeys.Public, }, Bucket: userdata.NewBucket("koding-klient", "development/latest", c), } opts := &amazon.ClientOptions{ Credentials: c, Regions: amazon.ProductionRegions, Log: logging.NewCustom("koding", true), } ec2clients, err := amazon.NewClients(opts) if err != nil { panic(err) } slclient := sl.NewSoftlayer( os.Getenv("KLOUD_TESTACCOUNT_SLUSERNAME"), os.Getenv("KLOUD_TESTACCOUNT_SLAPIKEY"), ) awsp := &awsprovider.Provider{ DB: db, Log: logging.NewCustom("kloud-aws", true), DNSClient: dnsInstance, DNSStorage: dnsStorage, Kite: kloudKite, Userdata: usd, } slp := &softlayer.Provider{ DB: db, Log: logging.NewCustom("kloud-softlayer", true), DNSClient: dnsInstance, DNSStorage: dnsStorage, SLClient: slclient, Kite: kloudKite, Userdata: usd, } return kdp, awsp, slp }