-
Notifications
You must be signed in to change notification settings - Fork 80
Commit
Somehow this API call didn't have a corresponding command in the CLI, so this PR adds it.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package certificate | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/spf13/cobra" | ||
|
||
"github.com/hetznercloud/cli/internal/cmd/base" | ||
"github.com/hetznercloud/cli/internal/hcapi2" | ||
"github.com/hetznercloud/cli/internal/state" | ||
) | ||
|
||
var RetryCmd = base.Cmd{ | ||
BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { | ||
return &cobra.Command{ | ||
Use: "retry <certificate>", | ||
Short: "Retry a managed certificate's issuance", | ||
TraverseChildren: true, | ||
DisableFlagsInUseLine: true, | ||
} | ||
}, | ||
Run: func(s state.State, cmd *cobra.Command, args []string) error { | ||
idOrName := args[0] | ||
certificate, _, err := s.Client().Certificate().Get(s, idOrName) | ||
if err != nil { | ||
return err | ||
} | ||
if certificate == nil { | ||
return fmt.Errorf("certificate not found: %s", idOrName) | ||
} | ||
|
||
action, _, err := s.Client().Certificate().RetryIssuance(s, certificate) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
if err := s.WaitForActions(cmd, s, action); err != nil { | ||
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / build
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / build
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / lint
Check failure on line 37 in internal/cmd/certificate/retry.go GitHub Actions / test
|
||
return err | ||
} | ||
|
||
cmd.Printf("Retried issuance of certificate %s\n", certificate.Name) | ||
return nil | ||
}, | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package certificate_test | ||
|
||
import ( | ||
"testing" | ||
"time" | ||
|
||
"github.com/golang/mock/gomock" | ||
"github.com/stretchr/testify/assert" | ||
|
||
"github.com/hetznercloud/cli/internal/cmd/certificate" | ||
"github.com/hetznercloud/cli/internal/testutil" | ||
"github.com/hetznercloud/hcloud-go/v2/hcloud" | ||
) | ||
|
||
func TestRetry(t *testing.T) { | ||
fx := testutil.NewFixture(t) | ||
defer fx.Finish() | ||
|
||
time.Local = time.UTC | ||
|
||
cmd := certificate.RetryCmd.CobraCommand(fx.State()) | ||
|
||
cert := &hcloud.Certificate{ | ||
ID: 123, | ||
Name: "my-test-cert", | ||
} | ||
|
||
fx.ExpectEnsureToken() | ||
fx.Client.CertificateClient.EXPECT(). | ||
Get(gomock.Any(), "123"). | ||
Return(cert, nil, nil) | ||
fx.Client.CertificateClient.EXPECT(). | ||
RetryIssuance(gomock.Any(), cert). | ||
Return(&hcloud.Action{ID: 456}, nil, nil) | ||
fx.ActionWaiter.EXPECT(). | ||
WaitForActions(gomock.Any(), gomock.Any(), &hcloud.Action{ID: 456}). | ||
Return(nil) | ||
|
||
out, errOut, err := fx.Run(cmd, []string{"123"}) | ||
|
||
assert.NoError(t, err) | ||
assert.Empty(t, errOut) | ||
assert.Equal(t, "Retried issuance of certificate my-test-cert\n", out) | ||
} |