-
Notifications
You must be signed in to change notification settings - Fork 421
/
bastionhosts.go
87 lines (71 loc) · 2.35 KB
/
bastionhosts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
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 bastionhosts
import (
"context"
"github.com/go-logr/logr"
"github.com/pkg/errors"
"sigs.k8s.io/cluster-api-provider-azure/azure"
"sigs.k8s.io/cluster-api-provider-azure/azure/services/publicips"
"sigs.k8s.io/cluster-api-provider-azure/azure/services/subnets"
"sigs.k8s.io/cluster-api-provider-azure/util/tele"
)
// BastionScope defines the scope interface for a bastion host service.
type BastionScope interface {
logr.Logger
azure.ClusterDescriber
azure.NetworkDescriber
BastionSpec() azure.BastionSpec
}
// Service provides operations on Azure resources.
type Service struct {
Scope BastionScope
client
subnetsClient subnets.Client
publicIPsClient publicips.Client
}
// New creates a new service.
func New(scope BastionScope) *Service {
return &Service{
Scope: scope,
client: newClient(scope),
subnetsClient: subnets.NewClient(scope),
publicIPsClient: publicips.NewClient(scope),
}
}
// Reconcile gets/creates/updates a bastion host.
func (s *Service) Reconcile(ctx context.Context) error {
ctx, span := tele.Tracer().Start(ctx, "bastionhosts.Service.Reconcile")
defer span.End()
azureBastionSpec := s.Scope.BastionSpec().AzureBastion
if azureBastionSpec != nil {
err := s.ensureAzureBastion(ctx, *azureBastionSpec)
if err != nil {
return errors.Wrap(err, "error creating Azure Bastion")
}
}
return nil
}
// Delete deletes the bastion host with the provided scope.
func (s *Service) Delete(ctx context.Context) error {
ctx, span := tele.Tracer().Start(ctx, "bastionhosts.Service.Delete")
defer span.End()
azureBastionSpec := s.Scope.BastionSpec().AzureBastion
if azureBastionSpec != nil {
err := s.ensureAzureBastionDeleted(ctx, *azureBastionSpec)
if err != nil {
return errors.Wrap(err, "error deleting Azure Bastion")
}
}
return nil
}