func (s *AmazonServer) SetUp(c *C) { auth, err := aws.EnvAuth() if err != nil { c.Fatal(err.Error()) } s.auth = auth }
func (s *S) TestEnvAuthLegacy(c *C) { os.Clearenv() os.Setenv("EC2_SECRET_KEY", "secret") os.Setenv("EC2_ACCESS_KEY", "access") auth, err := aws.EnvAuth() c.Assert(err, IsNil) c.Assert(auth, Equals, aws.Auth{SecretKey: "secret", AccessKey: "access"}) }
func (r *Runner) start() error { r.githubToken = os.Getenv("GITHUB_TOKEN") if r.githubToken == "" { return errors.New("GITHUB_TOKEN not set") } awsAuth, err := aws.EnvAuth() if err != nil { return err } r.s3Bucket = s3.New(awsAuth, aws.USEast).Bucket(logBucket) bc := r.bc bc.Network, err = r.allocateNet() if err != nil { return err } if r.rootFS, err = cluster.BuildFlynn(bc, args.RootFS, "origin/master", false, os.Stdout); err != nil { return fmt.Errorf("could not build flynn: %s", err) } r.releaseNet(bc.Network) defer os.RemoveAll(r.rootFS) db, err := bolt.Open(args.DBPath, 0600, &bolt.Options{Timeout: 5 * time.Second}) if err != nil { return fmt.Errorf("could not open db: %s", err) } r.db = db defer r.db.Close() if err := r.db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucketIfNotExists(dbBucket) return err }); err != nil { return fmt.Errorf("could not create builds bucket: %s", err) } for i := 0; i < maxBuilds; i++ { r.buildCh <- struct{}{} } if err := r.buildPending(); err != nil { log.Printf("could not build pending builds: %s", err) } go r.watchEvents() http.HandleFunc("/", r.httpEventHandler) http.HandleFunc("/builds", r.httpBuildHandler) http.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir(args.AssetsDir)))) handler := handlers.CombinedLoggingHandler(os.Stdout, http.DefaultServeMux) log.Println("Listening on", args.ListenAddr, "...") if err := http.ListenAndServeTLS(args.ListenAddr, args.TLSCert, args.TLSKey, handler); err != nil { return fmt.Errorf("ListenAndServeTLS: %s", err) } return nil }
func (r *Runner) start() error { r.githubToken = os.Getenv("GITHUB_TOKEN") if r.githubToken == "" { return errors.New("GITHUB_TOKEN not set") } awsAuth, err := aws.EnvAuth() if err != nil { return err } r.s3Bucket = s3.New(awsAuth, aws.USEast).Bucket(logBucket) if r.dockerFS == "" { var err error bc := r.bc bc.Network, err = r.allocateNet() if err != nil { return err } if r.dockerFS, err = cluster.BuildFlynn(bc, "", "master", os.Stdout); err != nil { return fmt.Errorf("could not build flynn: %s", err) } r.releaseNet(bc.Network) defer os.RemoveAll(r.dockerFS) } db, err := bolt.Open(args.DBPath, 0600, &bolt.Options{Timeout: 5 * time.Second}) if err != nil { return fmt.Errorf("could not open db: %s", err) } r.db = db defer r.db.Close() if err := r.db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucketIfNotExists([]byte("pending-builds")) return err }); err != nil { return fmt.Errorf("could not create pending-builds bucket: %s", err) } for i := 0; i < maxBuilds; i++ { r.buildCh <- struct{}{} } if err := r.buildPending(); err != nil { log.Printf("could not build pending builds: %s", err) } go r.watchEvents() http.Handle("/", handlers.CombinedLoggingHandler(os.Stdout, http.HandlerFunc(r.httpEventHandler))) log.Println("Listening on :80...") if err := http.ListenAndServe(":80", nil); err != nil { return fmt.Errorf("ListenAndServer: %s", err) } return nil }
func amis(args *docopt.Args) { auth, err := aws.EnvAuth() if err != nil { log.Fatal(err) } manifest := &EC2Manifest{} if err := json.NewDecoder(os.Stdin).Decode(manifest); err != nil { log.Fatal(err) } for _, s := range strings.Split(args.String["<ids>"], ",") { regionID := strings.SplitN(s, ":", 2) resp, err := ec2.New(auth, aws.Regions[regionID[0]]).Images([]string{regionID[1]}, nil) if err != nil { log.Fatal(err) } if len(resp.Images) < 1 { log.Fatalln("Could not find image", regionID[1]) } image := resp.Images[0] var snapshotID string for _, mapping := range image.BlockDevices { if mapping.DeviceName == image.RootDeviceName { snapshotID = mapping.SnapshotId } } if snapshotID == "" { log.Fatalln("Could not determine RootDeviceSnapshotID for", regionID[1]) } manifest.Add(args.String["<version>"], &EC2Image{ ID: image.Id, Name: image.Name, Region: regionID[0], OwnerID: image.OwnerId, RootDeviceType: image.RootDeviceType, RootDeviceName: image.RootDeviceName, RootDeviceSnapshotID: snapshotID, VirtualizationType: image.VirtualizationType, Hypervisor: image.Hypervisor, }) } if err := json.NewEncoder(os.Stdout).Encode(manifest); err != nil { log.Fatal(err) } }
func (r *Runner) start() error { r.authKey = os.Getenv("AUTH_KEY") if r.authKey == "" { return errors.New("AUTH_KEY not set") } r.githubToken = os.Getenv("GITHUB_TOKEN") if r.githubToken == "" { return errors.New("GITHUB_TOKEN not set") } awsAuth, err := aws.EnvAuth() if err != nil { return err } r.s3Bucket = s3.New(awsAuth, aws.USEast).Bucket(logBucket) _, listenPort, err = net.SplitHostPort(args.ListenAddr) if err != nil { return err } bc := r.bc bc.Network = r.allocateNet() if r.rootFS, err = cluster.BuildFlynn(bc, args.RootFS, "origin/master", false, os.Stdout); err != nil { return fmt.Errorf("could not build flynn: %s", err) } r.releaseNet(bc.Network) shutdown.BeforeExit(func() { removeRootFS(r.rootFS) }) db, err := bolt.Open(args.DBPath, 0600, &bolt.Options{Timeout: 5 * time.Second}) if err != nil { return fmt.Errorf("could not open db: %s", err) } r.db = db shutdown.BeforeExit(func() { r.db.Close() }) if err := r.db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucketIfNotExists(dbBucket) return err }); err != nil { return fmt.Errorf("could not create builds bucket: %s", err) } for i := 0; i < maxConcurrentBuilds; i++ { r.buildCh <- struct{}{} } if err := r.buildPending(); err != nil { log.Printf("could not build pending builds: %s", err) } go r.connectIRC() go r.watchEvents() router := httprouter.New() router.RedirectTrailingSlash = true router.Handler("GET", "/", http.RedirectHandler("/builds", 302)) router.POST("/", r.handleEvent) router.GET("/builds/:build", r.getBuildLog) router.POST("/builds/:build/restart", r.restartBuild) router.POST("/builds/:build/explain", r.explainBuild) router.GET("/builds", r.getBuilds) router.ServeFiles("/assets/*filepath", http.Dir(args.AssetsDir)) router.GET("/cluster/:cluster", r.clusterAPI(r.getCluster)) router.POST("/cluster/:cluster", r.clusterAPI(r.addHost)) router.POST("/cluster/:cluster/release", r.clusterAPI(r.addReleaseHosts)) router.DELETE("/cluster/:cluster/:host", r.clusterAPI(r.removeHost)) srv := &http.Server{ Addr: args.ListenAddr, Handler: router, TLSConfig: tlsconfig.SecureCiphers(nil), } log.Println("Listening on", args.ListenAddr, "...") if err := srv.ListenAndServeTLS(args.TLSCert, args.TLSKey); err != nil { return fmt.Errorf("ListenAndServeTLS: %s", err) } return nil }
func (s *S) TestEnvAuthNoAccess(c *C) { os.Clearenv() os.Setenv("AWS_SECRET_ACCESS_KEY", "foo") _, err := aws.EnvAuth() c.Assert(err, ErrorMatches, "AWS_ACCESS_KEY_ID not found in environment") }
func (s *S) TestEnvAuthNoSecret(c *C) { os.Clearenv() _, err := aws.EnvAuth() c.Assert(err, ErrorMatches, "AWS_SECRET_ACCESS_KEY not found in environment") }