resourcegroup.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package azure
  2. import (
  3. "context"
  4. "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/resources/mgmt/resources"
  5. "github.com/Azure/azure-sdk-for-go/profiles/preview/preview/subscription/mgmt/subscription"
  6. "github.com/pkg/errors"
  7. "github.com/docker/api/azure/login"
  8. "github.com/docker/api/errdefs"
  9. )
  10. // ACIResourceGroupHelper interface to manage resource groups and subscription IDs
  11. type ACIResourceGroupHelper interface {
  12. GetSubscriptionIDs(ctx context.Context) ([]subscription.Model, error)
  13. ListGroups(ctx context.Context, subscriptionID string) ([]resources.Group, error)
  14. GetGroup(ctx context.Context, subscriptionID string, groupName string) (resources.Group, error)
  15. CreateOrUpdate(ctx context.Context, subscriptionID string, resourceGroupName string, parameters resources.Group) (result resources.Group, err error)
  16. Delete(ctx context.Context, subscriptionID string, resourceGroupName string) error
  17. }
  18. type aciResourceGroupHelperImpl struct {
  19. }
  20. // NewACIResourceGroupHelper create a new ACIResourceGroupHelper
  21. func NewACIResourceGroupHelper() ACIResourceGroupHelper {
  22. return aciResourceGroupHelperImpl{}
  23. }
  24. // GetGroup get a resource group from its name
  25. func (mgt aciResourceGroupHelperImpl) GetGroup(ctx context.Context, subscriptionID string, groupName string) (resources.Group, error) {
  26. gc := getGroupsClient(subscriptionID)
  27. return gc.Get(ctx, groupName)
  28. }
  29. // ListGroups list resource groups
  30. func (mgt aciResourceGroupHelperImpl) ListGroups(ctx context.Context, subscriptionID string) ([]resources.Group, error) {
  31. gc := getGroupsClient(subscriptionID)
  32. groupResponse, err := gc.List(ctx, "", nil)
  33. if err != nil {
  34. return nil, err
  35. }
  36. groups := groupResponse.Values()
  37. return groups, nil
  38. }
  39. // CreateOrUpdate create or update a resource group
  40. func (mgt aciResourceGroupHelperImpl) CreateOrUpdate(ctx context.Context, subscriptionID string, resourceGroupName string, parameters resources.Group) (result resources.Group, err error) {
  41. gc := getGroupsClient(subscriptionID)
  42. return gc.CreateOrUpdate(ctx, resourceGroupName, parameters)
  43. }
  44. // Delete deletes a resource group
  45. func (mgt aciResourceGroupHelperImpl) Delete(ctx context.Context, subscriptionID string, resourceGroupName string) (err error) {
  46. gc := getGroupsClient(subscriptionID)
  47. future, err := gc.Delete(ctx, resourceGroupName)
  48. if err != nil {
  49. return err
  50. }
  51. return future.WaitForCompletionRef(ctx, gc.Client)
  52. }
  53. // GetSubscriptionIDs Return available subscription IDs based on azure login
  54. func (mgt aciResourceGroupHelperImpl) GetSubscriptionIDs(ctx context.Context) ([]subscription.Model, error) {
  55. c, err := getSubscriptionsClient()
  56. if err != nil {
  57. return nil, err
  58. }
  59. res, err := c.List(ctx)
  60. if err != nil {
  61. return nil, err
  62. }
  63. subs := res.Values()
  64. if len(subs) == 0 {
  65. return nil, errors.New("no subscriptions found")
  66. }
  67. for res.NotDone() {
  68. err = res.NextWithContext(ctx)
  69. if err != nil {
  70. return nil, err
  71. }
  72. subs = append(subs, res.Values()...)
  73. }
  74. return subs, nil
  75. }
  76. func getSubscriptionsClient() (subscription.SubscriptionsClient, error) {
  77. subc := subscription.NewSubscriptionsClient()
  78. authorizer, err := login.NewAuthorizerFromLogin()
  79. if err != nil {
  80. return subscription.SubscriptionsClient{}, errors.Wrap(errdefs.ErrLoginFailed, err.Error())
  81. }
  82. subc.Authorizer = authorizer
  83. return subc, nil
  84. }
  85. func getGroupsClient(subscriptionID string) resources.GroupsClient {
  86. groupsClient := resources.NewGroupsClient(subscriptionID)
  87. authorizer, _ := login.NewAuthorizerFromLogin()
  88. groupsClient.Authorizer = authorizer
  89. return groupsClient
  90. }