Skip to content

Commit

Permalink
release 1.4.7
Browse files Browse the repository at this point in the history
  • Loading branch information
contabo committed Nov 3, 2023
1 parent 33d9ae5 commit db1f708
Show file tree
Hide file tree
Showing 524 changed files with 2,599 additions and 62,920 deletions.
24 changes: 24 additions & 0 deletions cmd/Rescue.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package cmd

import (
"os"

"github.com/spf13/cobra"
)

// reinstallCmd represents the reinstall command
var RescueCmd = &cobra.Command{
Use: "rescue",
Short: "rescue an existing instance",
Run: func(cmd *cobra.Command, args []string) {
cmd.Help()
os.Exit(0)
},
Args: cobra.OnlyValidArgs,
SuggestFor: []string{"rescue"},
ValidArgs: []string{"instance"},
}

func init() {
rootCmd.AddCommand(RescueCmd)
}
116 changes: 116 additions & 0 deletions cmd/instanceActions/rescue.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package cmd

import (
"context"
"encoding/json"
"fmt"
"strconv"
"strings"

"contabo.com/cli/cntb/client"
contaboCmd "contabo.com/cli/cntb/cmd"
"contabo.com/cli/cntb/cmd/util"
instancesClient "contabo.com/cli/cntb/openapi"
"contabo.com/cli/cntb/outputFormatter"
uuid "github.com/satori/go.uuid"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

// startInstance represents the start instance command
var rescueInstanceCmd = &cobra.Command{
Use: "instance [instanceId]",
Short: "Rescue a compute instance",
Long: `Rescue a specific compute instance by its id`,
Example: `cntb start instance 12345`,
Run: func(cmd *cobra.Command, args []string) {

instancesActionsRescueRequest := *instancesClient.NewInstancesActionsRescueRequestWithDefaults()
content := contaboCmd.OpenStdinOrFile()
switch content {
case nil:
// optional flags
if rescueRootPassword != 0 {
instancesActionsRescueRequest.RootPassword = &rescueRootPassword
}
if rescueSshKeys != nil {
instancesActionsRescueRequest.SshKeys = &rescueSshKeys
}

if rescueUserData != "" {
instancesActionsRescueRequest.UserData = &rescueUserData
}

default:
// from file / stdin
var requestFromFile instancesClient.InstancesActionsRescueRequest
err := json.Unmarshal(content, &requestFromFile)
if err != nil {
log.Fatal(fmt.Sprintf("format invalid. Please check your syntax: %v", err))
}
// merge createTagRequest with one from file to have the defaults there
json.NewDecoder(strings.NewReader(string(content))).Decode(&instancesActionsRescueRequest)
}

resp, httpResp, err := client.ApiClient().InstanceActionsApi.Rescue(context.Background(), rescueInstanceId).
XRequestId(uuid.NewV4().String()).InstancesActionsRescueRequest(instancesActionsRescueRequest).Execute()


util.HandleErrors(err, httpResp, "while rescuing instance")
responseJson, _ := json.Marshal(resp.Data)

configFormatter := outputFormatter.FormatterConfig{
Filter: []string{"instanceId", "action"},
WideFilter: []string{"instanceId", "action"},
JsonPath: contaboCmd.OutputFormatDetails,
}

util.HandleResponse(responseJson, configFormatter)
},
Args: func(cmd *cobra.Command, args []string) error {
// contaboCmd.ValidateOutputFormat()

if len(args) > 1 {
cmd.Help()
log.Fatal("Too many positional arguments.")
}

if len(args) < 1 {
cmd.Help()
log.Fatal("Please provide an instanceId.")
}

instanceId64, err := strconv.ParseInt(args[0], 10, 64)
if err != nil {
log.Fatal(fmt.Sprintf("Provided instanceId %v is not valid.", args[0]))
}
rescueInstanceId = instanceId64

viper.BindPFlag("rootPassword", cmd.Flags().Lookup("rootPassword"))
rescueRootPassword = viper.GetInt64("rootPassword")

viper.BindPFlag("sshKeys", cmd.Flags().Lookup("sshKeys"))
for i := range viper.GetIntSlice("sshKeys") {
rescueSshKeys[i] = int64(viper.GetIntSlice("sshKeys")[i])
}

viper.BindPFlag("userData", cmd.Flags().Lookup("userData"))
rescueUserData = viper.GetString("userData")

return nil
},
}

func init() {
contaboCmd.RescueCmd.AddCommand(rescueInstanceCmd)

rescueInstanceCmd.Flags().Int64Var(&rescueRootPassword, "rootPassword", 0,
`Id of stored password.`)

rescueInstanceCmd.Flags().Int64SliceVar(&rescueSshKeys, "sshKeys", nil,
`Ids of stored ssh public keys.`)

rescueInstanceCmd.Flags().StringVar(&rescueUserData, "userData", "",
`Cloud-init script (user data)`)
}
10 changes: 9 additions & 1 deletion cmd/instanceActions/vars.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,12 @@ var (
// stop
var (
shutdownInstanceId int64
)
)

// Rescue
var (
rescueInstanceId int64
rescueRootPassword int64
rescueSshKeys []int64
rescueUserData string
)
110 changes: 110 additions & 0 deletions cmd/instances/resetPassword.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package cmd

import (
"context"
"encoding/json"
"fmt"
"strconv"

uuid "github.com/satori/go.uuid"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"

"contabo.com/cli/cntb/client"
contaboCmd "contabo.com/cli/cntb/cmd"
"contabo.com/cli/cntb/cmd/util"
"contabo.com/cli/cntb/outputFormatter"

instancesClient "contabo.com/cli/cntb/openapi"
)

var instanceResetPassword = &cobra.Command{
Use: "instance [instanceId]",
Short: "Reset the password or ssh key of your instance",
Long: "Reset the password or ssh key of your instance",
Run: func(cmd *cobra.Command, args []string) {
instanceResetPasswordRequest := *instancesClient.
NewInstancesResetPasswordActionsRequestWithDefaults()

if resetPasswordRootPassword != 0 {
instanceResetPasswordRequest.RootPassword = &resetPasswordRootPassword
}

if resetPasswordSshKeys != nil {
instanceResetPasswordRequest.SshKeys = &resetPasswordSshKeys
}

if resetPasswordUserData != "" {
instanceResetPasswordRequest.UserData = &resetPasswordUserData
}

resp, httpResp, err := client.ApiClient().InstanceActionsApi.
ResetPasswordAction(context.Background(), resetPasswordInstanceId).
XRequestId(uuid.NewV4().String()).
InstancesResetPasswordActionsRequest(instanceResetPasswordRequest).
Execute()

util.HandleErrors(err, httpResp, "while resetting instance password")

responseJson, _ := json.Marshal(resp.Data)

configFormatter := outputFormatter.FormatterConfig{
Filter: []string{"instanceId", "action"},
WideFilter: []string{"instanceId", "action"},
JsonPath: contaboCmd.OutputFormatDetails,
}

util.HandleResponse(responseJson, configFormatter)

},
Args: func(cmd *cobra.Command, args []string) error {
if len(args) > 1 {
cmd.Help()
log.Fatal("Too many positional arguments.")
}

if len(args) < 1 {
cmd.Help()
log.Fatal("Please provide an instanceId.")
}

instanceId64, err := strconv.ParseInt(args[0], 10, 64)
if err != nil {
log.Fatal(fmt.Sprintf("Provided instanceId %v is not valid.", args[0]))
}
resetPasswordInstanceId = instanceId64

viper.BindPFlag("rootPassword", cmd.Flags().Lookup("rootPassword"))
resetPasswordRootPassword = viper.GetInt64("rootPassword")

viper.BindPFlag("sshKeys", cmd.Flags().Lookup("sshKeys"))
for i := range viper.GetIntSlice("sshKeys") {
resetPasswordSshKeys[i] = int64(viper.GetIntSlice("sshKeys")[i])
}

viper.BindPFlag("userData", cmd.Flags().Lookup("userData"))
resetPasswordUserData = viper.GetString("userData")

if resetPasswordRootPassword == 0 &&
resetPasswordSshKeys == nil &&
resetPasswordUserData == "" {
log.Fatalf("Please provide at least one of --rootPassword, --sshKeys or --userData")
}

return nil
},
}

func init() {
contaboCmd.ResetPasswordCmd.AddCommand(instanceResetPassword)

instanceResetPassword.Flags().Int64Var(&resetPasswordRootPassword, "rootPassword", 0,
`Id of stored password.`)

instanceResetPassword.Flags().Int64SliceVar(&resetPasswordSshKeys, "sshKeys", nil,
`Ids of stored ssh public keys.`)

instanceResetPassword.Flags().StringVar(&resetPasswordUserData, "userData", "",
`Cloud-init script (user data)`)
}
8 changes: 8 additions & 0 deletions cmd/instances/vars.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,11 @@ var (
upgradeInstanceId int64
privateNetworking string
)

// reset password
var (
resetPasswordInstanceId int64
resetPasswordRootPassword int64
resetPasswordSshKeys []int64
resetPasswordUserData string
)
2 changes: 1 addition & 1 deletion cmd/resetPassword.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ var ResetPasswordCmd = &cobra.Command{
},
Args: cobra.OnlyValidArgs,
SuggestFor: []string{"resetPassword"},
ValidArgs: []string{"user"},
ValidArgs: []string{"user", "instance"},
}

func init() {
Expand Down
13 changes: 13 additions & 0 deletions openapi/.openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.gitignore
.openapi-generator-ignore
.travis.yml
README.md
api/openapi.yaml
Expand Down Expand Up @@ -32,6 +33,9 @@ docs/AddOnRequest.md
docs/AddOnResponse.md
docs/AdditionalIp.md
docs/ApiPermissionsResponse.md
docs/ApplicationConfig.md
docs/ApplicationRequirements.md
docs/ApplicationResponse.md
docs/AssignInstancePrivateNetworkResponse.md
docs/AssignmentAuditResponse.md
docs/AssignmentResponse.md
Expand Down Expand Up @@ -129,6 +133,7 @@ docs/IpV4.md
docs/IpV6.md
docs/Links.md
docs/ListApiPermissionResponse.md
docs/ListApplicationsResponse.md
docs/ListAssignmentAuditsResponse.md
docs/ListAssignmentResponse.md
docs/ListCredentialResponse.md
Expand All @@ -154,12 +159,14 @@ docs/ListTagAuditsResponse.md
docs/ListTagResponse.md
docs/ListUserAuditResponse.md
docs/ListUserResponse.md
docs/MinimumRequirements.md
docs/ObjectStorageAuditResponse.md
docs/ObjectStorageResponse.md
docs/ObjectStoragesApi.md
docs/ObjectStoragesAuditsApi.md
docs/ObjectStoragesStatsResponse.md
docs/ObjectStoragesStatsResponseData.md
docs/OptimalRequirements.md
docs/PaginationMeta.md
docs/PatchInstanceRequest.md
docs/PatchInstanceResponse.md
Expand Down Expand Up @@ -234,6 +241,9 @@ model_add_on_request.go
model_add_on_response.go
model_additional_ip.go
model_api_permissions_response.go
model_application_config.go
model_application_requirements.go
model_application_response.go
model_assign_instance_private_network_response.go
model_assignment_audit_response.go
model_assignment_response.go
Expand Down Expand Up @@ -324,6 +334,7 @@ model_ip_v4.go
model_ip_v6.go
model_links.go
model_list_api_permission_response.go
model_list_applications_response.go
model_list_assignment_audits_response.go
model_list_assignment_response.go
model_list_credential_response.go
Expand All @@ -349,10 +360,12 @@ model_list_tag_audits_response.go
model_list_tag_response.go
model_list_user_audit_response.go
model_list_user_response.go
model_minimum_requirements.go
model_object_storage_audit_response.go
model_object_storage_response.go
model_object_storages_stats_response.go
model_object_storages_stats_response_data.go
model_optimal_requirements.go
model_pagination_meta.go
model_patch_instance_request.go
model_patch_instance_response.go
Expand Down
Loading

0 comments on commit db1f708

Please sign in to comment.