// RunRecordUpdate updates a domain record. func RunRecordUpdate(ns string, config doit.Config, out io.Writer, args []string) error { if len(args) != 1 { return doit.NewMissingArgsErr(ns) } domainName := args[0] client := config.GetGodoClient() recordID, err := config.GetInt(ns, doit.ArgRecordID) if err != nil { return err } rType, err := config.GetString(ns, doit.ArgRecordType) if err != nil { return err } rName, err := config.GetString(ns, doit.ArgRecordName) if err != nil { return err } rData, err := config.GetString(ns, doit.ArgRecordData) if err != nil { return err } rPriority, err := config.GetInt(ns, doit.ArgRecordPriority) if err != nil { return err } rPort, err := config.GetInt(ns, doit.ArgRecordPort) if err != nil { return err } rWeight, err := config.GetInt(ns, doit.ArgRecordWeight) if err != nil { return err } drcr := &godo.DomainRecordEditRequest{ Type: rType, Name: rName, Data: rData, Priority: rPriority, Port: rPort, Weight: rWeight, } r, _, err := client.Domains.EditRecord(domainName, recordID, drcr) if err != nil { return err } return doit.DisplayOutput(r, out) }
// RunRecordDelete deletes a domain record. func RunRecordDelete(ns string, config doit.Config, out io.Writer, args []string) error { if len(args) != 1 { return doit.NewMissingArgsErr(ns) } domainName := args[0] client := config.GetGodoClient() recordID, err := config.GetInt(ns, doit.ArgRecordID) if err != nil { return err } _, err = client.Domains.DeleteRecord(domainName, recordID) return err }
// RunFloatingIPActionsAssign assigns a floating IP to a droplet. func RunFloatingIPActionsAssign(ns string, config doit.Config, out io.Writer, args []string) error { if len(args) != 1 { return doit.NewMissingArgsErr(ns) } ip := args[0] client := config.GetGodoClient() dropletID, err := config.GetInt(ns, doit.ArgDropletID) if err != nil { return err } action, _, err := client.FloatingIPActions.Assign(ip, dropletID) if err != nil { logrus.WithField("err", err).Fatal("could not assign IP to droplet") } return doit.DisplayOutput(action, out) }
// RunDropletActionGet returns a droplet action by id. func RunDropletActionGet(ns string, config doit.Config, out io.Writer, args []string) error { fn := func(client *godo.Client) (*godo.Action, error) { if len(args) != 1 { return nil, doit.NewMissingArgsErr(ns) } dropletID, err := strconv.Atoi(args[0]) if err != nil { return nil, err } actionID, err := config.GetInt(ns, doit.ArgActionID) if err != nil { return nil, err } a, _, err := client.DropletActions.Get(dropletID, actionID) return a, err } return performAction(out, config, fn) }
// RunFloatingIPActionsGet retrieves an action for a floating IP. func RunFloatingIPActionsGet(ns string, config doit.Config, out io.Writer, args []string) error { if len(args) != 1 { return doit.NewMissingArgsErr(ns) } ip := args[0] client := config.GetGodoClient() actionID, err := config.GetInt(ns, doit.ArgActionID) if err != nil { return err } action, _, err := client.FloatingIPActions.Get(ip, actionID) if err != nil { return err } return doit.DisplayOutput(action, out) }
// RunImageActionsGet retrieves an action for an image. func RunImageActionsGet(ns string, config doit.Config, out io.Writer, args []string) error { client := config.GetGodoClient() if len(args) != 1 { return doit.NewMissingArgsErr(ns) } imageID, err := strconv.Atoi(args[0]) if err != nil { return err } actionID, err := config.GetInt(ns, doit.ArgActionID) if err != nil { return err } action, _, err := client.ImageActions.Get(imageID, actionID) if err != nil { return err } return doit.DisplayOutput(action, out) }
// RunSSH finds a droplet to ssh to given input parameters (name or id). func RunSSH(ns string, config doit.Config, out io.Writer, args []string) error { client := config.GetGodoClient() if len(args) == 0 { return doit.NewMissingArgsErr(ns) } dropletID := args[0] if dropletID == "" { return doit.NewMissingArgsErr(ns) } user, err := config.GetString(ns, doit.ArgSSHUser) if err != nil { return err } keyPath, err := config.GetString(ns, doit.ArgsSSHKeyPath) if err != nil { return err } port, err := config.GetInt(ns, doit.ArgsSSHPort) if err != nil { return err } var droplet *godo.Droplet if id, err := strconv.Atoi(dropletID); err == nil { // dropletID is an integer droplet, err = getDropletByID(client, id) } else { // dropletID is a string var droplets []godo.Droplet droplets, err := listDroplets(client) if err != nil { return err } shi := extractHostInfo(dropletID) user = shi.user if i, err := strconv.Atoi(shi.port); shi.port != "" && err != nil { port = i } for _, d := range droplets { if d.Name == shi.host { droplet = &d break } } if droplet == nil { return errors.New("could not find droplet by name") } } if user == "" { user = defaultSSHUser(droplet) } publicIP := extractDropletPublicIP(droplet) if len(publicIP) < 1 { return errors.New(sshNoAddress) } runner := config.SSH(user, publicIP, keyPath, port) return runner.Run() }