Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Commit de13fd3

Browse files
vaspahomovulucinar
authored andcommitted
PublicIPAddress support
Signed-off-by: vaspahomov <vaspahomov@yandex-team.ru>
1 parent c182111 commit de13fd3

14 files changed

Lines changed: 1153 additions & 0 deletions

File tree

apis/network/v1alpha3/referencers.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,24 @@ func (mg *Subnet) ResolveReferences(ctx context.Context, c client.Reader) error
9595

9696
return nil
9797
}
98+
99+
// ResolveReferences of this PublicIPAddress
100+
func (mg *PublicIPAddress) ResolveReferences(ctx context.Context, c client.Reader) error {
101+
r := reference.NewAPIResolver(c, mg)
102+
103+
// Resolve spec.resourceGroupName
104+
rsp, err := r.Resolve(ctx, reference.ResolutionRequest{
105+
CurrentValue: mg.Spec.ForProvider.ResourceGroupName,
106+
Reference: mg.Spec.ForProvider.ResourceGroupNameRef,
107+
Selector: mg.Spec.ForProvider.ResourceGroupNameSelector,
108+
To: reference.To{Managed: &v1alpha3.ResourceGroup{}, List: &v1alpha3.ResourceGroupList{}},
109+
Extract: reference.ExternalName(),
110+
})
111+
if err != nil {
112+
return errors.Wrap(err, "spec.forProvider.resourceGroupName")
113+
}
114+
mg.Spec.ForProvider.ResourceGroupName = rsp.ResolvedValue
115+
mg.Spec.ForProvider.ResourceGroupNameRef = rsp.ResolvedReference
116+
117+
return nil
118+
}

apis/network/v1alpha3/register.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,16 @@ var (
5353
SubnetGroupVersionKind = SchemeGroupVersion.WithKind(SubnetKind)
5454
)
5555

56+
// PublicIpAddress type metadata.
57+
var (
58+
PublicIPAddressKind = reflect.TypeOf(PublicIPAddress{}).Name()
59+
PublicIPAddressGroupKind = schema.GroupKind{Group: Group, Kind: PublicIPAddressKind}.String()
60+
PublicIPAddressKindAPIVersion = PublicIPAddressKind + "." + SchemeGroupVersion.String()
61+
PublicIPAddressGroupVersionKind = SchemeGroupVersion.WithKind(PublicIPAddressKind)
62+
)
63+
5664
func init() {
5765
SchemeBuilder.Register(&VirtualNetwork{}, &VirtualNetworkList{})
5866
SchemeBuilder.Register(&Subnet{}, &SubnetList{})
67+
SchemeBuilder.Register(&PublicIPAddress{}, &PublicIPAddressList{})
5968
}

apis/network/v1alpha3/types.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,3 +226,105 @@ type SubnetList struct {
226226
metav1.ListMeta `json:"metadata,omitempty"`
227227
Items []Subnet `json:"items"`
228228
}
229+
230+
// A PublicIPAddressSpec defines the desired state of a PublicIPAddress.
231+
type PublicIPAddressSpec struct {
232+
xpv1.ResourceSpec `json:",inline"`
233+
// +kubebuilder:validation:Required
234+
ForProvider PublicIPAddressFormat `json:"properties"`
235+
}
236+
237+
// PublicIPAddressFormat defines properties of the PublicIPAddress.
238+
type PublicIPAddressFormat struct {
239+
// ResourceGroupName - Name of the Public IP address's resource group.
240+
// +immutable
241+
ResourceGroupName string `json:"resourceGroupName,omitempty"`
242+
243+
// ResourceGroupNameRef - A reference to the the Public IP address's resource
244+
// group.
245+
// +immutable
246+
// +optional
247+
ResourceGroupNameRef *xpv1.Reference `json:"resourceGroupNameRef,omitempty"`
248+
249+
// ResourceGroupNameSelector - Select a reference to the Public IP address's
250+
// resource group.
251+
// +optional
252+
ResourceGroupNameSelector *xpv1.Selector `json:"resourceGroupNameSelector,omitempty"`
253+
254+
// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
255+
// +kubebuilder:validation:Required
256+
// +kubebuilder:validation:Enum=Static;Dynamic
257+
PublicIPAllocationMethod string `json:"allocationMethod"`
258+
259+
// PublicIPAllocationMethod - The public IP address version. Possible values include: 'IPV4', 'IPV6'
260+
// +kubebuilder:validation:Required
261+
// +kubebuilder:validation:Enum=IPV4;IPV6
262+
PublicIPAddressVersion string `json:"version"`
263+
264+
// Location - Resource location.
265+
// +optional
266+
Location *string `json:"location,omitempty"`
267+
268+
// SKU of PublicIPAddress
269+
// +optional
270+
SKU *SKU `json:"sku,omitempty"`
271+
272+
// Tags - Resource tags.
273+
// +optional
274+
Tags map[string]*string `json:"tags,omitempty"`
275+
}
276+
277+
// SKU of PublicIPAddress
278+
type SKU struct {
279+
// Name - Name of sku. Possible values include: ['Standard', 'Basic']
280+
// +kubebuilder:validation:Enum=Standard;Basic
281+
Name string `json:"name,omitempty"`
282+
}
283+
284+
// A PublicIPAddressStatus represents the observed state of a PublicIPAddress.
285+
type PublicIPAddressStatus struct {
286+
xpv1.ResourceStatus `json:",inline"`
287+
288+
// State of this PublicIPAddress.
289+
State string `json:"state,omitempty"`
290+
291+
// A Message providing detail about the state of this PublicIPAddress, if any.
292+
Message string `json:"message,omitempty"`
293+
294+
// Etag - A unique string that changes whenever the resource is updated.
295+
Etag string `json:"etag,omitempty"`
296+
297+
// ID of this PublicIPAddress.
298+
ID string `json:"id,omitempty"`
299+
300+
// Address - A string identifying address of PublicIPAddress resource
301+
Address string `json:"address"`
302+
}
303+
304+
// +kubebuilder:object:root=true
305+
306+
// A PublicIPAddress is a managed resource that represents an Azure PublicIPAddress.
307+
// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
308+
// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status"
309+
// +kubebuilder:printcolumn:name="STATE",type="string",JSONPath=".status.state"
310+
// +kubebuilder:printcolumn:name="LOCATION",type="string",JSONPath=".spec.properties.location"
311+
// +kubebuilder:printcolumn:name="ADDRESS",type="string",JSONPath=".status.address"
312+
// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp"
313+
// +kubebuilder:subresource:status
314+
// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,azure}
315+
type PublicIPAddress struct {
316+
metav1.TypeMeta `json:",inline"`
317+
metav1.ObjectMeta `json:"metadata,omitempty"`
318+
319+
Spec PublicIPAddressSpec `json:"spec"`
320+
Status PublicIPAddressStatus `json:"status,omitempty"`
321+
}
322+
323+
// +kubebuilder:object:root=true
324+
325+
// PublicIPAddressList contains a list of PublicIPAddress items
326+
type PublicIPAddressList struct {
327+
metav1.TypeMeta `json:",inline"`
328+
metav1.ListMeta `json:"metadata,omitempty"`
329+
Items []PublicIPAddress `json:"items"`
330+
}

apis/network/v1alpha3/zz_generated.deepcopy.go

Lines changed: 157 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/network/v1alpha3/zz_generated.managed.go

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/network/v1alpha3/zz_generated.managedlist.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)