mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Add snapshot clients based on armclient
This commit is contained in:
		@@ -0,0 +1,57 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "azure_snapshotclient.go",
 | 
			
		||||
        "doc.go",
 | 
			
		||||
        "interface.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient",
 | 
			
		||||
    importpath = "k8s.io/legacy-cloud-providers/azure/clients/snapshotclient",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = ["azure_snapshotclient_test.go"],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/clients:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/armclient/mockarmclient:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/mock/gomock:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/assert:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
@@ -0,0 +1,405 @@
 | 
			
		||||
// +build !providerless
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2020 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package snapshotclient
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
 | 
			
		||||
	"github.com/Azure/go-autorest/autorest"
 | 
			
		||||
	"github.com/Azure/go-autorest/autorest/azure"
 | 
			
		||||
	"github.com/Azure/go-autorest/autorest/to"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/client-go/util/flowcontrol"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	azclients "k8s.io/legacy-cloud-providers/azure/clients"
 | 
			
		||||
	"k8s.io/legacy-cloud-providers/azure/clients/armclient"
 | 
			
		||||
	"k8s.io/legacy-cloud-providers/azure/metrics"
 | 
			
		||||
	"k8s.io/legacy-cloud-providers/azure/retry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var _ Interface = &Client{}
 | 
			
		||||
 | 
			
		||||
// Client implements Snapshot client Interface.
 | 
			
		||||
type Client struct {
 | 
			
		||||
	armClient      armclient.Interface
 | 
			
		||||
	subscriptionID string
 | 
			
		||||
 | 
			
		||||
	// Rate limiting configures.
 | 
			
		||||
	rateLimiterReader flowcontrol.RateLimiter
 | 
			
		||||
	rateLimiterWriter flowcontrol.RateLimiter
 | 
			
		||||
 | 
			
		||||
	// ARM throttling configures.
 | 
			
		||||
	RetryAfterReader time.Time
 | 
			
		||||
	RetryAfterWriter time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// New creates a new Snapshot client with ratelimiting.
 | 
			
		||||
func New(config *azclients.ClientConfig) *Client {
 | 
			
		||||
	baseURI := config.ResourceManagerEndpoint
 | 
			
		||||
	authorizer := autorest.NewBearerAuthorizer(config.ServicePrincipalToken)
 | 
			
		||||
	armClient := armclient.New(authorizer, baseURI, "", APIVersion, config.Location, config.Backoff)
 | 
			
		||||
	rateLimiterReader, rateLimiterWriter := azclients.NewRateLimiter(config.RateLimitConfig)
 | 
			
		||||
 | 
			
		||||
	klog.V(2).Infof("Azure SnapshotClient (read ops) using rate limit config: QPS=%g, bucket=%d",
 | 
			
		||||
		config.RateLimitConfig.CloudProviderRateLimitQPS,
 | 
			
		||||
		config.RateLimitConfig.CloudProviderRateLimitBucket)
 | 
			
		||||
	klog.V(2).Infof("Azure SnapshotClient (write ops) using rate limit config: QPS=%g, bucket=%d",
 | 
			
		||||
		config.RateLimitConfig.CloudProviderRateLimitQPSWrite,
 | 
			
		||||
		config.RateLimitConfig.CloudProviderRateLimitBucketWrite)
 | 
			
		||||
 | 
			
		||||
	client := &Client{
 | 
			
		||||
		armClient:         armClient,
 | 
			
		||||
		rateLimiterReader: rateLimiterReader,
 | 
			
		||||
		rateLimiterWriter: rateLimiterWriter,
 | 
			
		||||
		subscriptionID:    config.SubscriptionID,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return client
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get gets a Snapshot.
 | 
			
		||||
func (c *Client) Get(ctx context.Context, resourceGroupName string, snapshotName string) (compute.Snapshot, *retry.Error) {
 | 
			
		||||
	mc := metrics.NewMetricContext("snapshot", "get", resourceGroupName, c.subscriptionID, "")
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is rate limited.
 | 
			
		||||
	if !c.rateLimiterReader.TryAccept() {
 | 
			
		||||
		mc.RateLimitedCount()
 | 
			
		||||
		return compute.Snapshot{}, retry.GetRateLimitError(false, "SnapshotGet")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is throttled.
 | 
			
		||||
	if c.RetryAfterReader.After(time.Now()) {
 | 
			
		||||
		mc.ThrottledCount()
 | 
			
		||||
		rerr := retry.GetThrottlingError("SnapshotGet", "client throttled", c.RetryAfterReader)
 | 
			
		||||
		return compute.Snapshot{}, rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result, rerr := c.getSnapshot(ctx, resourceGroupName, snapshotName)
 | 
			
		||||
	mc.Observe(rerr.Error())
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		if rerr.IsThrottled() {
 | 
			
		||||
			// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
 | 
			
		||||
			c.RetryAfterReader = rerr.RetryAfter
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return result, rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// getSnapshot gets a Snapshot.
 | 
			
		||||
func (c *Client) getSnapshot(ctx context.Context, resourceGroupName string, snapshotName string) (compute.Snapshot, *retry.Error) {
 | 
			
		||||
	resourceID := armclient.GetResourceID(
 | 
			
		||||
		c.subscriptionID,
 | 
			
		||||
		resourceGroupName,
 | 
			
		||||
		"Microsoft.Compute/snapshots",
 | 
			
		||||
		snapshotName,
 | 
			
		||||
	)
 | 
			
		||||
	result := compute.Snapshot{}
 | 
			
		||||
 | 
			
		||||
	response, rerr := c.armClient.GetResource(ctx, resourceID, "")
 | 
			
		||||
	defer c.armClient.CloseResponse(ctx, response)
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.get.request", resourceID, rerr.Error())
 | 
			
		||||
		return result, rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := autorest.Respond(
 | 
			
		||||
		response,
 | 
			
		||||
		azure.WithErrorUnlessStatusCode(http.StatusOK),
 | 
			
		||||
		autorest.ByUnmarshallingJSON(&result))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.get.respond", resourceID, err)
 | 
			
		||||
		return result, retry.GetError(response, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result.Response = autorest.Response{Response: response}
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete deletes a Snapshot by name.
 | 
			
		||||
func (c *Client) Delete(ctx context.Context, resourceGroupName string, snapshotName string) *retry.Error {
 | 
			
		||||
	mc := metrics.NewMetricContext("snapshot", "delete", resourceGroupName, c.subscriptionID, "")
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is rate limited.
 | 
			
		||||
	if !c.rateLimiterWriter.TryAccept() {
 | 
			
		||||
		mc.RateLimitedCount()
 | 
			
		||||
		return retry.GetRateLimitError(true, "SnapshotDelete")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is throttled.
 | 
			
		||||
	if c.RetryAfterWriter.After(time.Now()) {
 | 
			
		||||
		mc.ThrottledCount()
 | 
			
		||||
		rerr := retry.GetThrottlingError("SnapshotDelete", "client throttled", c.RetryAfterWriter)
 | 
			
		||||
		return rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rerr := c.deleteSnapshot(ctx, resourceGroupName, snapshotName)
 | 
			
		||||
	mc.Observe(rerr.Error())
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		if rerr.IsThrottled() {
 | 
			
		||||
			// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
 | 
			
		||||
			c.RetryAfterWriter = rerr.RetryAfter
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// deleteSnapshot deletes a PublicIPAddress by name.
 | 
			
		||||
func (c *Client) deleteSnapshot(ctx context.Context, resourceGroupName string, snapshotName string) *retry.Error {
 | 
			
		||||
	resourceID := armclient.GetResourceID(
 | 
			
		||||
		c.subscriptionID,
 | 
			
		||||
		resourceGroupName,
 | 
			
		||||
		"Microsoft.Compute/snapshots",
 | 
			
		||||
		snapshotName,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	return c.armClient.DeleteResource(ctx, resourceID, "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateOrUpdate creates or updates a Snapshot.
 | 
			
		||||
func (c *Client) CreateOrUpdate(ctx context.Context, resourceGroupName string, snapshotName string, snapshot compute.Snapshot) *retry.Error {
 | 
			
		||||
	mc := metrics.NewMetricContext("snapshot", "create_or_update", resourceGroupName, c.subscriptionID, "")
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is rate limited.
 | 
			
		||||
	if !c.rateLimiterWriter.TryAccept() {
 | 
			
		||||
		mc.RateLimitedCount()
 | 
			
		||||
		return retry.GetRateLimitError(true, "SnapshotCreateOrUpdate")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is throttled.
 | 
			
		||||
	if c.RetryAfterWriter.After(time.Now()) {
 | 
			
		||||
		mc.ThrottledCount()
 | 
			
		||||
		rerr := retry.GetThrottlingError("SnapshotCreateOrUpdate", "client throttled", c.RetryAfterWriter)
 | 
			
		||||
		return rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rerr := c.createOrUpdateSnapshot(ctx, resourceGroupName, snapshotName, snapshot)
 | 
			
		||||
	mc.Observe(rerr.Error())
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		if rerr.IsThrottled() {
 | 
			
		||||
			// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
 | 
			
		||||
			c.RetryAfterWriter = rerr.RetryAfter
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// createOrUpdateSnapshot creates or updates a Snapshot.
 | 
			
		||||
func (c *Client) createOrUpdateSnapshot(ctx context.Context, resourceGroupName string, snapshotName string, snapshot compute.Snapshot) *retry.Error {
 | 
			
		||||
	resourceID := armclient.GetResourceID(
 | 
			
		||||
		c.subscriptionID,
 | 
			
		||||
		resourceGroupName,
 | 
			
		||||
		"Microsoft.Compute/snapshots",
 | 
			
		||||
		snapshotName,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	response, rerr := c.armClient.PutResource(ctx, resourceID, snapshot)
 | 
			
		||||
	defer c.armClient.CloseResponse(ctx, response)
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.put.request", resourceID, rerr.Error())
 | 
			
		||||
		return rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if response != nil && response.StatusCode != http.StatusNoContent {
 | 
			
		||||
		_, rerr = c.createOrUpdateResponder(response)
 | 
			
		||||
		if rerr != nil {
 | 
			
		||||
			klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.put.respond", resourceID, rerr.Error())
 | 
			
		||||
			return rerr
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) createOrUpdateResponder(resp *http.Response) (*compute.Snapshot, *retry.Error) {
 | 
			
		||||
	result := &compute.Snapshot{}
 | 
			
		||||
	err := autorest.Respond(
 | 
			
		||||
		resp,
 | 
			
		||||
		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
 | 
			
		||||
		autorest.ByUnmarshallingJSON(&result))
 | 
			
		||||
	result.Response = autorest.Response{Response: resp}
 | 
			
		||||
	return result, retry.GetError(resp, err)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ListByResourceGroup get a list snapshots by resourceGroup.
 | 
			
		||||
func (c *Client) ListByResourceGroup(ctx context.Context, resourceGroupName string) ([]compute.Snapshot, *retry.Error) {
 | 
			
		||||
	mc := metrics.NewMetricContext("snapshot", "list_by_resource_group", resourceGroupName, c.subscriptionID, "")
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is rate limited.
 | 
			
		||||
	if !c.rateLimiterReader.TryAccept() {
 | 
			
		||||
		mc.RateLimitedCount()
 | 
			
		||||
		return nil, retry.GetRateLimitError(false, "SnapshotListByResourceGroup")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Report errors if the client is throttled.
 | 
			
		||||
	if c.RetryAfterReader.After(time.Now()) {
 | 
			
		||||
		mc.ThrottledCount()
 | 
			
		||||
		rerr := retry.GetThrottlingError("SnapshotListByResourceGroup", "client throttled", c.RetryAfterReader)
 | 
			
		||||
		return nil, rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result, rerr := c.listSnapshotsByResourceGroup(ctx, resourceGroupName)
 | 
			
		||||
	mc.Observe(rerr.Error())
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		if rerr.IsThrottled() {
 | 
			
		||||
			// Update RetryAfterReader so that no more requests would be sent until RetryAfter expires.
 | 
			
		||||
			c.RetryAfterReader = rerr.RetryAfter
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return result, rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// listSnapshotsByResourceGroup gets a list of snapshots in the resource group.
 | 
			
		||||
func (c *Client) listSnapshotsByResourceGroup(ctx context.Context, resourceGroupName string) ([]compute.Snapshot, *retry.Error) {
 | 
			
		||||
	resourceID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/snapshots",
 | 
			
		||||
		autorest.Encode("path", c.subscriptionID),
 | 
			
		||||
		autorest.Encode("path", resourceGroupName))
 | 
			
		||||
	result := make([]compute.Snapshot, 0)
 | 
			
		||||
	page := &SnapshotListPage{}
 | 
			
		||||
	page.fn = c.listNextResults
 | 
			
		||||
 | 
			
		||||
	resp, rerr := c.armClient.GetResource(ctx, resourceID, "")
 | 
			
		||||
	defer c.armClient.CloseResponse(ctx, resp)
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.list.request", resourceID, rerr.Error())
 | 
			
		||||
		return result, rerr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var err error
 | 
			
		||||
	page.sl, err = c.listResponder(resp)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.list.respond", resourceID, err)
 | 
			
		||||
		return result, retry.GetError(resp, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for page.NotDone() {
 | 
			
		||||
		result = append(result, *page.Response().Value...)
 | 
			
		||||
		if err = page.NextWithContext(ctx); err != nil {
 | 
			
		||||
			klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "snapshot.list.next", resourceID, err)
 | 
			
		||||
			return result, retry.GetError(page.Response().Response.Response, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) listResponder(resp *http.Response) (result compute.SnapshotList, err error) {
 | 
			
		||||
	err = autorest.Respond(
 | 
			
		||||
		resp,
 | 
			
		||||
		autorest.ByIgnoring(),
 | 
			
		||||
		azure.WithErrorUnlessStatusCode(http.StatusOK),
 | 
			
		||||
		autorest.ByUnmarshallingJSON(&result))
 | 
			
		||||
	result.Response = autorest.Response{Response: resp}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SnapshotListResultPreparer prepares a request to retrieve the next set of results.
 | 
			
		||||
// It returns nil if no more results exist.
 | 
			
		||||
func (c *Client) SnapshotListResultPreparer(ctx context.Context, lr compute.SnapshotList) (*http.Request, error) {
 | 
			
		||||
	if lr.NextLink == nil || len(to.String(lr.NextLink)) < 1 {
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	decorators := []autorest.PrepareDecorator{
 | 
			
		||||
		autorest.WithBaseURL(to.String(lr.NextLink)),
 | 
			
		||||
	}
 | 
			
		||||
	return c.armClient.PrepareGetRequest(ctx, decorators...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// listNextResults retrieves the next set of results, if any.
 | 
			
		||||
func (c *Client) listNextResults(ctx context.Context, lastResults compute.SnapshotList) (result compute.SnapshotList, err error) {
 | 
			
		||||
	req, err := c.SnapshotListResultPreparer(ctx, lastResults)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return result, autorest.NewErrorWithError(err, "snapshotclient", "listNextResults", nil, "Failure preparing next results request")
 | 
			
		||||
	}
 | 
			
		||||
	if req == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp, rerr := c.armClient.Send(ctx, req)
 | 
			
		||||
	defer c.armClient.CloseResponse(ctx, resp)
 | 
			
		||||
	if rerr != nil {
 | 
			
		||||
		result.Response = autorest.Response{Response: resp}
 | 
			
		||||
		return result, autorest.NewErrorWithError(rerr.Error(), "snapshotclient", "listNextResults", resp, "Failure sending next results request")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result, err = c.listResponder(resp)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		err = autorest.NewErrorWithError(err, "snapshotclient", "listNextResults", resp, "Failure responding to next results request")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SnapshotListPage contains a page of Snapshot values.
 | 
			
		||||
type SnapshotListPage struct {
 | 
			
		||||
	fn func(context.Context, compute.SnapshotList) (compute.SnapshotList, error)
 | 
			
		||||
	sl compute.SnapshotList
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NextWithContext advances to the next page of values.  If there was an error making
 | 
			
		||||
// the request the page does not advance and the error is returned.
 | 
			
		||||
func (page *SnapshotListPage) NextWithContext(ctx context.Context) (err error) {
 | 
			
		||||
	next, err := page.fn(ctx, page.sl)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	page.sl = next
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Next advances to the next page of values.  If there was an error making
 | 
			
		||||
// the request the page does not advance and the error is returned.
 | 
			
		||||
// Deprecated: Use NextWithContext() instead.
 | 
			
		||||
func (page *SnapshotListPage) Next() error {
 | 
			
		||||
	return page.NextWithContext(context.Background())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NotDone returns true if the page enumeration should be started or is not yet complete.
 | 
			
		||||
func (page SnapshotListPage) NotDone() bool {
 | 
			
		||||
	return !page.sl.IsEmpty()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Response returns the raw server response from the last page request.
 | 
			
		||||
func (page SnapshotListPage) Response() compute.SnapshotList {
 | 
			
		||||
	return page.sl
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Values returns the slice of values for the current page or nil if there are no values.
 | 
			
		||||
func (page SnapshotListPage) Values() []compute.Snapshot {
 | 
			
		||||
	if page.sl.IsEmpty() {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return *page.sl.Value
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,151 @@
 | 
			
		||||
// +build !providerless
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2020 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package snapshotclient
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"context"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
 | 
			
		||||
	"github.com/Azure/go-autorest/autorest"
 | 
			
		||||
	"github.com/Azure/go-autorest/autorest/to"
 | 
			
		||||
	"github.com/golang/mock/gomock"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	azclients "k8s.io/legacy-cloud-providers/azure/clients"
 | 
			
		||||
	"k8s.io/legacy-cloud-providers/azure/clients/armclient"
 | 
			
		||||
	"k8s.io/legacy-cloud-providers/azure/clients/armclient/mockarmclient"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestGetNotFound(t *testing.T) {
 | 
			
		||||
	ctrl := gomock.NewController(t)
 | 
			
		||||
	defer ctrl.Finish()
 | 
			
		||||
 | 
			
		||||
	resourceID := "/subscriptions/subscriptionID/resourceGroups/rg/providers/Microsoft.Compute/snapshots/sn1"
 | 
			
		||||
	response := &http.Response{
 | 
			
		||||
		StatusCode: http.StatusNotFound,
 | 
			
		||||
		Body:       ioutil.NopCloser(bytes.NewReader([]byte("{}"))),
 | 
			
		||||
	}
 | 
			
		||||
	armClient := mockarmclient.NewMockInterface(ctrl)
 | 
			
		||||
	armClient.EXPECT().GetResource(gomock.Any(), resourceID, "").Return(response, nil).Times(1)
 | 
			
		||||
	armClient.EXPECT().CloseResponse(gomock.Any(), gomock.Any()).Times(1)
 | 
			
		||||
 | 
			
		||||
	snClient := getTestSnapshotClient(armClient)
 | 
			
		||||
	expected := compute.Snapshot{Response: autorest.Response{}}
 | 
			
		||||
	result, rerr := snClient.Get(context.TODO(), "rg", "sn1")
 | 
			
		||||
	assert.Equal(t, expected, result)
 | 
			
		||||
	assert.NotNil(t, rerr)
 | 
			
		||||
	assert.Equal(t, http.StatusNotFound, rerr.HTTPStatusCode)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGetInternalError(t *testing.T) {
 | 
			
		||||
	ctrl := gomock.NewController(t)
 | 
			
		||||
	defer ctrl.Finish()
 | 
			
		||||
 | 
			
		||||
	resourceID := "/subscriptions/subscriptionID/resourceGroups/rg/providers/Microsoft.Compute/snapshots/sn1"
 | 
			
		||||
	response := &http.Response{
 | 
			
		||||
		StatusCode: http.StatusInternalServerError,
 | 
			
		||||
		Body:       ioutil.NopCloser(bytes.NewReader([]byte("{}"))),
 | 
			
		||||
	}
 | 
			
		||||
	armClient := mockarmclient.NewMockInterface(ctrl)
 | 
			
		||||
	armClient.EXPECT().GetResource(gomock.Any(), resourceID, "").Return(response, nil).Times(1)
 | 
			
		||||
	armClient.EXPECT().CloseResponse(gomock.Any(), gomock.Any()).Times(1)
 | 
			
		||||
 | 
			
		||||
	snClient := getTestSnapshotClient(armClient)
 | 
			
		||||
	expected := compute.Snapshot{Response: autorest.Response{}}
 | 
			
		||||
	result, rerr := snClient.Get(context.TODO(), "rg", "sn1")
 | 
			
		||||
	assert.Equal(t, expected, result)
 | 
			
		||||
	assert.NotNil(t, rerr)
 | 
			
		||||
	assert.Equal(t, http.StatusInternalServerError, rerr.HTTPStatusCode)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestListByResourceGroup(t *testing.T) {
 | 
			
		||||
	ctrl := gomock.NewController(t)
 | 
			
		||||
	defer ctrl.Finish()
 | 
			
		||||
 | 
			
		||||
	resourceID := "/subscriptions/subscriptionID/resourceGroups/rg/providers/Microsoft.Compute/snapshots"
 | 
			
		||||
	armClient := mockarmclient.NewMockInterface(ctrl)
 | 
			
		||||
	snList := []compute.Snapshot{getTestSnapshot("sn1"), getTestSnapshot("pip2"), getTestSnapshot("pip3")}
 | 
			
		||||
	responseBody, err := json.Marshal(compute.SnapshotList{Value: &snList})
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
	armClient.EXPECT().GetResource(gomock.Any(), resourceID, "").Return(
 | 
			
		||||
		&http.Response{
 | 
			
		||||
			StatusCode: http.StatusOK,
 | 
			
		||||
			Body:       ioutil.NopCloser(bytes.NewReader(responseBody)),
 | 
			
		||||
		}, nil).Times(1)
 | 
			
		||||
	armClient.EXPECT().CloseResponse(gomock.Any(), gomock.Any()).Times(1)
 | 
			
		||||
 | 
			
		||||
	snClient := getTestSnapshotClient(armClient)
 | 
			
		||||
	result, rerr := snClient.ListByResourceGroup(context.TODO(), "rg")
 | 
			
		||||
	assert.Nil(t, rerr)
 | 
			
		||||
	assert.Equal(t, 3, len(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCreateOrUpdate(t *testing.T) {
 | 
			
		||||
	ctrl := gomock.NewController(t)
 | 
			
		||||
	defer ctrl.Finish()
 | 
			
		||||
 | 
			
		||||
	sn := getTestSnapshot("sn1")
 | 
			
		||||
	armClient := mockarmclient.NewMockInterface(ctrl)
 | 
			
		||||
	response := &http.Response{
 | 
			
		||||
		StatusCode: http.StatusOK,
 | 
			
		||||
		Body:       ioutil.NopCloser(bytes.NewReader([]byte(""))),
 | 
			
		||||
	}
 | 
			
		||||
	armClient.EXPECT().PutResource(gomock.Any(), to.String(sn.ID), sn).Return(response, nil).Times(1)
 | 
			
		||||
	armClient.EXPECT().CloseResponse(gomock.Any(), gomock.Any()).Times(1)
 | 
			
		||||
 | 
			
		||||
	snClient := getTestSnapshotClient(armClient)
 | 
			
		||||
	rerr := snClient.CreateOrUpdate(context.TODO(), "rg", "sn1", sn)
 | 
			
		||||
	assert.Nil(t, rerr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDelete(t *testing.T) {
 | 
			
		||||
	ctrl := gomock.NewController(t)
 | 
			
		||||
	defer ctrl.Finish()
 | 
			
		||||
 | 
			
		||||
	r := getTestSnapshot("sn1")
 | 
			
		||||
	armClient := mockarmclient.NewMockInterface(ctrl)
 | 
			
		||||
	armClient.EXPECT().DeleteResource(gomock.Any(), to.String(r.ID), "").Return(nil).Times(1)
 | 
			
		||||
 | 
			
		||||
	rtClient := getTestSnapshotClient(armClient)
 | 
			
		||||
	rerr := rtClient.Delete(context.TODO(), "rg", "sn1")
 | 
			
		||||
	assert.Nil(t, rerr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getTestSnapshot(name string) compute.Snapshot {
 | 
			
		||||
	return compute.Snapshot{
 | 
			
		||||
		ID:       to.StringPtr(fmt.Sprintf("/subscriptions/subscriptionID/resourceGroups/rg/providers/Microsoft.Compute/snapshots/%s", name)),
 | 
			
		||||
		Name:     to.StringPtr(name),
 | 
			
		||||
		Location: to.StringPtr("eastus"),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getTestSnapshotClient(armClient armclient.Interface) *Client {
 | 
			
		||||
	rateLimiterReader, rateLimiterWriter := azclients.NewRateLimiter(&azclients.RateLimitConfig{})
 | 
			
		||||
	return &Client{
 | 
			
		||||
		armClient:         armClient,
 | 
			
		||||
		subscriptionID:    "subscriptionID",
 | 
			
		||||
		rateLimiterReader: rateLimiterReader,
 | 
			
		||||
		rateLimiterWriter: rateLimiterWriter,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
// +build !providerless
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2020 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// Package snapshotclient implements the client for Snapshots.
 | 
			
		||||
package snapshotclient // import "k8s.io/legacy-cloud-providers/azure/clients/snapshotclient"
 | 
			
		||||
@@ -0,0 +1,48 @@
 | 
			
		||||
// +build !providerless
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2020 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package snapshotclient
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
 | 
			
		||||
	"k8s.io/legacy-cloud-providers/azure/retry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// APIVersion is the API version for compute.
 | 
			
		||||
	APIVersion = "2019-07-01"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interface is the client interface for Snapshots.
 | 
			
		||||
// Don't forget to run the following command to generate the mock client:
 | 
			
		||||
// mockgen -source=$GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/interface.go -package=mocksnapshotclient Interface > $GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient/interface.go
 | 
			
		||||
type Interface interface {
 | 
			
		||||
	// Get gets a Snapshot.
 | 
			
		||||
	Get(ctx context.Context, resourceGroupName string, snapshotName string) (compute.Snapshot, *retry.Error)
 | 
			
		||||
 | 
			
		||||
	// Delete deletes a Snapshot by name.
 | 
			
		||||
	Delete(ctx context.Context, resourceGroupName string, snapshotName string) *retry.Error
 | 
			
		||||
 | 
			
		||||
	// ListByResourceGroup get a list snapshots by resourceGroup.
 | 
			
		||||
	ListByResourceGroup(ctx context.Context, resourceGroupName string) ([]compute.Snapshot, *retry.Error)
 | 
			
		||||
 | 
			
		||||
	// CreateOrUpdate creates or updates a Snapshot.
 | 
			
		||||
	CreateOrUpdate(ctx context.Context, resourceGroupName string, snapshotName string, snapshot compute.Snapshot) *retry.Error
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,31 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "doc.go",
 | 
			
		||||
        "interface.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient",
 | 
			
		||||
    importpath = "k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/legacy-cloud-providers/azure/retry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/mock/gomock:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
// +build !providerless
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2020 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// Package mocksnapshotclient implements the mock client for Snapshots.
 | 
			
		||||
package mocksnapshotclient // import "k8s.io/legacy-cloud-providers/azure/clients/snapshotclient/mocksnapshotclient"
 | 
			
		||||
@@ -0,0 +1,108 @@
 | 
			
		||||
// +build !providerless
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2020 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package mocksnapshotclient
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	context "context"
 | 
			
		||||
	compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
 | 
			
		||||
	gomock "github.com/golang/mock/gomock"
 | 
			
		||||
	retry "k8s.io/legacy-cloud-providers/azure/retry"
 | 
			
		||||
	reflect "reflect"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// MockInterface is a mock of Interface interface
 | 
			
		||||
type MockInterface struct {
 | 
			
		||||
	ctrl     *gomock.Controller
 | 
			
		||||
	recorder *MockInterfaceMockRecorder
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MockInterfaceMockRecorder is the mock recorder for MockInterface
 | 
			
		||||
type MockInterfaceMockRecorder struct {
 | 
			
		||||
	mock *MockInterface
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewMockInterface creates a new mock instance
 | 
			
		||||
func NewMockInterface(ctrl *gomock.Controller) *MockInterface {
 | 
			
		||||
	mock := &MockInterface{ctrl: ctrl}
 | 
			
		||||
	mock.recorder = &MockInterfaceMockRecorder{mock}
 | 
			
		||||
	return mock
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EXPECT returns an object that allows the caller to indicate expected use
 | 
			
		||||
func (m *MockInterface) EXPECT() *MockInterfaceMockRecorder {
 | 
			
		||||
	return m.recorder
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get mocks base method
 | 
			
		||||
func (m *MockInterface) Get(ctx context.Context, resourceGroupName, snapshotName string) (compute.Snapshot, *retry.Error) {
 | 
			
		||||
	m.ctrl.T.Helper()
 | 
			
		||||
	ret := m.ctrl.Call(m, "Get", ctx, resourceGroupName, snapshotName)
 | 
			
		||||
	ret0, _ := ret[0].(compute.Snapshot)
 | 
			
		||||
	ret1, _ := ret[1].(*retry.Error)
 | 
			
		||||
	return ret0, ret1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get indicates an expected call of Get
 | 
			
		||||
func (mr *MockInterfaceMockRecorder) Get(ctx, resourceGroupName, snapshotName interface{}) *gomock.Call {
 | 
			
		||||
	mr.mock.ctrl.T.Helper()
 | 
			
		||||
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockInterface)(nil).Get), ctx, resourceGroupName, snapshotName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete mocks base method
 | 
			
		||||
func (m *MockInterface) Delete(ctx context.Context, resourceGroupName, snapshotName string) *retry.Error {
 | 
			
		||||
	m.ctrl.T.Helper()
 | 
			
		||||
	ret := m.ctrl.Call(m, "Delete", ctx, resourceGroupName, snapshotName)
 | 
			
		||||
	ret0, _ := ret[0].(*retry.Error)
 | 
			
		||||
	return ret0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete indicates an expected call of Delete
 | 
			
		||||
func (mr *MockInterfaceMockRecorder) Delete(ctx, resourceGroupName, snapshotName interface{}) *gomock.Call {
 | 
			
		||||
	mr.mock.ctrl.T.Helper()
 | 
			
		||||
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockInterface)(nil).Delete), ctx, resourceGroupName, snapshotName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ListByResourceGroup mocks base method
 | 
			
		||||
func (m *MockInterface) ListByResourceGroup(ctx context.Context, resourceGroupName string) ([]compute.Snapshot, *retry.Error) {
 | 
			
		||||
	m.ctrl.T.Helper()
 | 
			
		||||
	ret := m.ctrl.Call(m, "ListByResourceGroup", ctx, resourceGroupName)
 | 
			
		||||
	ret0, _ := ret[0].([]compute.Snapshot)
 | 
			
		||||
	ret1, _ := ret[1].(*retry.Error)
 | 
			
		||||
	return ret0, ret1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ListByResourceGroup indicates an expected call of ListByResourceGroup
 | 
			
		||||
func (mr *MockInterfaceMockRecorder) ListByResourceGroup(ctx, resourceGroupName interface{}) *gomock.Call {
 | 
			
		||||
	mr.mock.ctrl.T.Helper()
 | 
			
		||||
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListByResourceGroup", reflect.TypeOf((*MockInterface)(nil).ListByResourceGroup), ctx, resourceGroupName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateOrUpdate mocks base method
 | 
			
		||||
func (m *MockInterface) CreateOrUpdate(ctx context.Context, resourceGroupName, snapshotName string, snapshot compute.Snapshot) *retry.Error {
 | 
			
		||||
	m.ctrl.T.Helper()
 | 
			
		||||
	ret := m.ctrl.Call(m, "CreateOrUpdate", ctx, resourceGroupName, snapshotName, snapshot)
 | 
			
		||||
	ret0, _ := ret[0].(*retry.Error)
 | 
			
		||||
	return ret0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateOrUpdate indicates an expected call of CreateOrUpdate
 | 
			
		||||
func (mr *MockInterfaceMockRecorder) CreateOrUpdate(ctx, resourceGroupName, snapshotName, snapshot interface{}) *gomock.Call {
 | 
			
		||||
	mr.mock.ctrl.T.Helper()
 | 
			
		||||
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdate", reflect.TypeOf((*MockInterface)(nil).CreateOrUpdate), ctx, resourceGroupName, snapshotName, snapshot)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user