Skip to content

Commit

Permalink
Merge branch 'main' of github.com:willie-yao/cluster-api-provider-azu…
Browse files Browse the repository at this point in the history
…re into add-vm-converter-test
  • Loading branch information
willie-yao committed Aug 18, 2022
2 parents 77fc7fc + b2abf8c commit 8aa83e8
Show file tree
Hide file tree
Showing 73 changed files with 768 additions and 361 deletions.
27 changes: 7 additions & 20 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
run:
deadline: 5m
skip-dirs:
- mock*
skip-files:
- "zz_generated.*\\.go$"
- ".*conversion.*\\.go$"
- 'zz_generated\.(\w*)\.go$'
linters:
disable-all: true
enable:
Expand Down Expand Up @@ -117,22 +114,12 @@ linters-settings:

issues:
exclude-rules:
- path: internal/test/
linters:
- golint
- path: cloudtest\.go
linters:
- golint
- path: api/v1alpha3/types\.go
linters:
- golint
- path: _test\.go
linters:
- unused
- linters:
- stylecheck
text: "ST1016: methods on the same type should have the same receiver name"
path: .*(api|types)\/.*\/*_types\.go$
- path: '(\w*)conversion.go'
text: "use underscores in Go names|receiver name (.+) should be consistent|methods on the same type should have the same receiver name"
- path: 'mock(\w+)/doc.go$'
text: "use underscores in package names|don't use an underscore in package name"
- path: api/v1alpha3/azureclusteridentity_types.go
text: "methods on the same type should have the same receiver name"
include:
- EXC0002 # include "missing comments" issues from golint
max-issues-per-linter: 0
Expand Down
107 changes: 54 additions & 53 deletions api/v1alpha3/azurecluster_conversion.go

Large diffs are not rendered by default.

31 changes: 13 additions & 18 deletions api/v1alpha3/azureclusteridentity_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,9 @@ package v1alpha3
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
apiconversion "k8s.io/apimachinery/pkg/conversion"
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
"sigs.k8s.io/controller-runtime/pkg/conversion"

infrav1beta1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
)

const (
Expand All @@ -31,13 +30,13 @@ const (

// ConvertTo converts this AzureCluster to the Hub version (v1beta1).
func (src *AzureClusterIdentity) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*infrav1beta1.AzureClusterIdentity)
dst := dstRaw.(*infrav1.AzureClusterIdentity)
if err := Convert_v1alpha3_AzureClusterIdentity_To_v1beta1_AzureClusterIdentity(src, dst, nil); err != nil {
return err
}

// Manually restore data.
restored := &infrav1beta1.AzureClusterIdentity{}
restored := &infrav1.AzureClusterIdentity{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
return err
}
Expand All @@ -47,15 +46,13 @@ func (src *AzureClusterIdentity) ConvertTo(dstRaw conversion.Hub) error {
}

if len(src.Spec.AllowedNamespaces) > 0 {
dst.Spec.AllowedNamespaces = &infrav1beta1.AllowedNamespaces{}
for _, ns := range src.Spec.AllowedNamespaces {
dst.Spec.AllowedNamespaces.NamespaceList = append(dst.Spec.AllowedNamespaces.NamespaceList, ns)
}
dst.Spec.AllowedNamespaces = &infrav1.AllowedNamespaces{}
dst.Spec.AllowedNamespaces.NamespaceList = append(dst.Spec.AllowedNamespaces.NamespaceList, src.Spec.AllowedNamespaces...)
}

if restored.Spec.AllowedNamespaces != nil && restored.Spec.AllowedNamespaces.Selector != nil {
if dst.Spec.AllowedNamespaces == nil {
dst.Spec.AllowedNamespaces = &infrav1beta1.AllowedNamespaces{}
dst.Spec.AllowedNamespaces = &infrav1.AllowedNamespaces{}
}
dst.Spec.AllowedNamespaces.Selector = restored.Spec.AllowedNamespaces.Selector
}
Expand All @@ -74,7 +71,7 @@ func (src *AzureClusterIdentity) ConvertTo(dstRaw conversion.Hub) error {

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (dst *AzureClusterIdentity) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*infrav1beta1.AzureClusterIdentity)
src := srcRaw.(*infrav1.AzureClusterIdentity)
if err := Convert_v1beta1_AzureClusterIdentity_To_v1alpha3_AzureClusterIdentity(src, dst, nil); err != nil {
return err
}
Expand All @@ -85,32 +82,30 @@ func (dst *AzureClusterIdentity) ConvertFrom(srcRaw conversion.Hub) error {
}

if src.Spec.AllowedNamespaces != nil {
for _, ns := range src.Spec.AllowedNamespaces.NamespaceList {
dst.Spec.AllowedNamespaces = append(dst.Spec.AllowedNamespaces, ns)
}
dst.Spec.AllowedNamespaces = append(dst.Spec.AllowedNamespaces, src.Spec.AllowedNamespaces.NamespaceList...)
}

return nil
}

// Convert_v1alpha3_AzureClusterIdentitySpec_To_v1beta1_AzureClusterIdentitySpec.
func Convert_v1alpha3_AzureClusterIdentitySpec_To_v1beta1_AzureClusterIdentitySpec(in *AzureClusterIdentitySpec, out *infrav1beta1.AzureClusterIdentitySpec, s apiconversion.Scope) error {
func Convert_v1alpha3_AzureClusterIdentitySpec_To_v1beta1_AzureClusterIdentitySpec(in *AzureClusterIdentitySpec, out *infrav1.AzureClusterIdentitySpec, s apiconversion.Scope) error {
return autoConvert_v1alpha3_AzureClusterIdentitySpec_To_v1beta1_AzureClusterIdentitySpec(in, out, s)
}

// Convert_v1beta1_AzureClusterIdentitySpec_To_v1alpha3_AzureClusterIdentitySpec
func Convert_v1beta1_AzureClusterIdentitySpec_To_v1alpha3_AzureClusterIdentitySpec(in *infrav1beta1.AzureClusterIdentitySpec, out *AzureClusterIdentitySpec, s apiconversion.Scope) error {
// Convert_v1beta1_AzureClusterIdentitySpec_To_v1alpha3_AzureClusterIdentitySpec.
func Convert_v1beta1_AzureClusterIdentitySpec_To_v1alpha3_AzureClusterIdentitySpec(in *infrav1.AzureClusterIdentitySpec, out *AzureClusterIdentitySpec, s apiconversion.Scope) error {
return autoConvert_v1beta1_AzureClusterIdentitySpec_To_v1alpha3_AzureClusterIdentitySpec(in, out, s)
}

// ConvertTo converts this AzureClusterIdentityList to the Hub version (v1beta1).
func (src *AzureClusterIdentityList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*infrav1beta1.AzureClusterIdentityList)
dst := dstRaw.(*infrav1.AzureClusterIdentityList)
return Convert_v1alpha3_AzureClusterIdentityList_To_v1beta1_AzureClusterIdentityList(src, dst, nil)
}

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (dst *AzureClusterIdentityList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*infrav1beta1.AzureClusterIdentityList)
src := srcRaw.(*infrav1.AzureClusterIdentityList)
return Convert_v1beta1_AzureClusterIdentityList_To_v1alpha3_AzureClusterIdentityList(src, dst, nil)
}
46 changes: 25 additions & 21 deletions api/v1alpha3/azuremachine_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,27 @@ package v1alpha3

import (
apiconversion "k8s.io/apimachinery/pkg/conversion"
"sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
"sigs.k8s.io/controller-runtime/pkg/conversion"
)

// ConvertTo converts this AzureMachine to the Hub version (v1beta1).
func (src *AzureMachine) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.AzureMachine)
dst := dstRaw.(*infrav1.AzureMachine)
if err := Convert_v1alpha3_AzureMachine_To_v1beta1_AzureMachine(src, dst, nil); err != nil {
return err
}

// Manually restore data from annotations
restored := &v1beta1.AzureMachine{}
restored := &infrav1.AzureMachine{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
return err
}

// Handle special case for conversion of ManagedDisk to pointer.
if restored.Spec.OSDisk.ManagedDisk == nil && dst.Spec.OSDisk.ManagedDisk != nil {
if *dst.Spec.OSDisk.ManagedDisk == (v1beta1.ManagedDiskParameters{}) {
if *dst.Spec.OSDisk.ManagedDisk == (infrav1.ManagedDiskParameters{}) {
// restore nil value if nothing has changed since conversion
dst.Spec.OSDisk.ManagedDisk = nil
}
Expand All @@ -58,6 +58,10 @@ func (src *AzureMachine) ConvertTo(dstRaw conversion.Hub) error {
dst.Spec.AdditionalCapabilities = restored.Spec.AdditionalCapabilities
}

if len(restored.Spec.DNSServers) > 0 {
dst.Spec.DNSServers = restored.Spec.DNSServers
}

dst.Spec.SubnetName = restored.Spec.SubnetName

dst.Status.LongRunningOperationStates = restored.Status.LongRunningOperationStates
Expand All @@ -67,7 +71,7 @@ func (src *AzureMachine) ConvertTo(dstRaw conversion.Hub) error {

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (dst *AzureMachine) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.AzureMachine)
src := srcRaw.(*infrav1.AzureMachine)
if err := Convert_v1beta1_AzureMachine_To_v1alpha3_AzureMachine(src, dst, nil); err != nil {
return err
}
Expand All @@ -78,50 +82,50 @@ func (dst *AzureMachine) ConvertFrom(srcRaw conversion.Hub) error {

// ConvertTo converts this AzureMachineList to the Hub version (v1beta1).
func (src *AzureMachineList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.AzureMachineList)
dst := dstRaw.(*infrav1.AzureMachineList)
return Convert_v1alpha3_AzureMachineList_To_v1beta1_AzureMachineList(src, dst, nil)
}

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (dst *AzureMachineList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.AzureMachineList)
src := srcRaw.(*infrav1.AzureMachineList)
return Convert_v1beta1_AzureMachineList_To_v1alpha3_AzureMachineList(src, dst, nil)
}

func Convert_v1alpha3_AzureMachineSpec_To_v1beta1_AzureMachineSpec(in *AzureMachineSpec, out *v1beta1.AzureMachineSpec, s apiconversion.Scope) error {
func Convert_v1alpha3_AzureMachineSpec_To_v1beta1_AzureMachineSpec(in *AzureMachineSpec, out *infrav1.AzureMachineSpec, s apiconversion.Scope) error {
return autoConvert_v1alpha3_AzureMachineSpec_To_v1beta1_AzureMachineSpec(in, out, s)
}

// Convert_v1beta1_AzureMachineSpec_To_v1alpha3_AzureMachineSpec converts from the Hub version (v1beta1) of the AzureMachineSpec to this version.
func Convert_v1beta1_AzureMachineSpec_To_v1alpha3_AzureMachineSpec(in *v1beta1.AzureMachineSpec, out *AzureMachineSpec, s apiconversion.Scope) error {
func Convert_v1beta1_AzureMachineSpec_To_v1alpha3_AzureMachineSpec(in *infrav1.AzureMachineSpec, out *AzureMachineSpec, s apiconversion.Scope) error {
return autoConvert_v1beta1_AzureMachineSpec_To_v1alpha3_AzureMachineSpec(in, out, s)
}

// Convert_v1alpha3_AzureMachineStatus_To_v1beta1_AzureMachineStatus converts this AzureMachineStatus to the Hub version (v1beta1).
func Convert_v1alpha3_AzureMachineStatus_To_v1beta1_AzureMachineStatus(in *AzureMachineStatus, out *v1beta1.AzureMachineStatus, s apiconversion.Scope) error {
func Convert_v1alpha3_AzureMachineStatus_To_v1beta1_AzureMachineStatus(in *AzureMachineStatus, out *infrav1.AzureMachineStatus, s apiconversion.Scope) error {
return autoConvert_v1alpha3_AzureMachineStatus_To_v1beta1_AzureMachineStatus(in, out, s)
}

// Convert_v1beta1_AzureMachineStatus_To_v1alpha3_AzureMachineStatus converts from the Hub version (v1beta1) of the AzureMachineStatus to this version.
func Convert_v1beta1_AzureMachineStatus_To_v1alpha3_AzureMachineStatus(in *v1beta1.AzureMachineStatus, out *AzureMachineStatus, s apiconversion.Scope) error {
func Convert_v1beta1_AzureMachineStatus_To_v1alpha3_AzureMachineStatus(in *infrav1.AzureMachineStatus, out *AzureMachineStatus, s apiconversion.Scope) error {
return autoConvert_v1beta1_AzureMachineStatus_To_v1alpha3_AzureMachineStatus(in, out, s)
}

// Convert_v1alpha3_OSDisk_To_v1beta1_OSDisk converts this OSDisk to the Hub version (v1beta1).
func Convert_v1alpha3_OSDisk_To_v1beta1_OSDisk(in *OSDisk, out *v1beta1.OSDisk, s apiconversion.Scope) error {
func Convert_v1alpha3_OSDisk_To_v1beta1_OSDisk(in *OSDisk, out *infrav1.OSDisk, s apiconversion.Scope) error {
out.OSType = in.OSType
if in.DiskSizeGB != 0 {
out.DiskSizeGB = &in.DiskSizeGB
}
out.DiffDiskSettings = (*v1beta1.DiffDiskSettings)(in.DiffDiskSettings)
out.DiffDiskSettings = (*infrav1.DiffDiskSettings)(in.DiffDiskSettings)
out.CachingType = in.CachingType
out.ManagedDisk = &v1beta1.ManagedDiskParameters{}
out.ManagedDisk = &infrav1.ManagedDiskParameters{}

return Convert_v1alpha3_ManagedDisk_To_v1beta1_ManagedDiskParameters(&in.ManagedDisk, out.ManagedDisk, s)
}

// Convert_v1beta1_OSDisk_To_v1alpha3_OSDisk converts from the Hub version (v1beta1) of the AzureMachineStatus to this version.
func Convert_v1beta1_OSDisk_To_v1alpha3_OSDisk(in *v1beta1.OSDisk, out *OSDisk, s apiconversion.Scope) error {
func Convert_v1beta1_OSDisk_To_v1alpha3_OSDisk(in *infrav1.OSDisk, out *OSDisk, s apiconversion.Scope) error {
out.OSType = in.OSType
if in.DiskSizeGB != nil {
out.DiskSizeGB = *in.DiskSizeGB
Expand All @@ -140,35 +144,35 @@ func Convert_v1beta1_OSDisk_To_v1alpha3_OSDisk(in *v1beta1.OSDisk, out *OSDisk,
}

// Convert_v1alpha3_ManagedDisk_To_v1beta1_ManagedDiskParameters converts this ManagedDisk to the Hub version (v1beta1).
func Convert_v1alpha3_ManagedDisk_To_v1beta1_ManagedDiskParameters(in *ManagedDisk, out *v1beta1.ManagedDiskParameters, s apiconversion.Scope) error {
func Convert_v1alpha3_ManagedDisk_To_v1beta1_ManagedDiskParameters(in *ManagedDisk, out *infrav1.ManagedDiskParameters, s apiconversion.Scope) error {
out.StorageAccountType = in.StorageAccountType
out.DiskEncryptionSet = (*v1beta1.DiskEncryptionSetParameters)(in.DiskEncryptionSet)
out.DiskEncryptionSet = (*infrav1.DiskEncryptionSetParameters)(in.DiskEncryptionSet)
return nil
}

// Convert_v1beta1_ManagedDiskParameters_To_v1alpha3_ManagedDisk converts from the Hub version (v1beta1) of the ManagedDiskParameters to this version.
func Convert_v1beta1_ManagedDiskParameters_To_v1alpha3_ManagedDisk(in *v1beta1.ManagedDiskParameters, out *ManagedDisk, s apiconversion.Scope) error {
func Convert_v1beta1_ManagedDiskParameters_To_v1alpha3_ManagedDisk(in *infrav1.ManagedDiskParameters, out *ManagedDisk, s apiconversion.Scope) error {
out.StorageAccountType = in.StorageAccountType
out.DiskEncryptionSet = (*DiskEncryptionSetParameters)(in.DiskEncryptionSet)
return nil
}

func Convert_v1beta1_AzureMarketplaceImage_To_v1alpha3_AzureMarketplaceImage(in *v1beta1.AzureMarketplaceImage, out *AzureMarketplaceImage, s apiconversion.Scope) error {
func Convert_v1beta1_AzureMarketplaceImage_To_v1alpha3_AzureMarketplaceImage(in *infrav1.AzureMarketplaceImage, out *AzureMarketplaceImage, s apiconversion.Scope) error {
out.Offer = in.ImagePlan.Offer
out.Publisher = in.ImagePlan.Publisher
out.SKU = in.ImagePlan.SKU

return autoConvert_v1beta1_AzureMarketplaceImage_To_v1alpha3_AzureMarketplaceImage(in, out, s)
}

func Convert_v1alpha3_AzureMarketplaceImage_To_v1beta1_AzureMarketplaceImage(in *AzureMarketplaceImage, out *v1beta1.AzureMarketplaceImage, s apiconversion.Scope) error {
func Convert_v1alpha3_AzureMarketplaceImage_To_v1beta1_AzureMarketplaceImage(in *AzureMarketplaceImage, out *infrav1.AzureMarketplaceImage, s apiconversion.Scope) error {
out.ImagePlan.Offer = in.Offer
out.ImagePlan.Publisher = in.Publisher
out.ImagePlan.SKU = in.SKU

return autoConvert_v1alpha3_AzureMarketplaceImage_To_v1beta1_AzureMarketplaceImage(in, out, s)
}

func Convert_v1beta1_Image_To_v1alpha3_Image(in *v1beta1.Image, out *Image, s apiconversion.Scope) error {
func Convert_v1beta1_Image_To_v1alpha3_Image(in *infrav1.Image, out *Image, s apiconversion.Scope) error {
return autoConvert_v1beta1_Image_To_v1alpha3_Image(in, out, s)
}
22 changes: 13 additions & 9 deletions api/v1alpha3/azuremachinetemplate_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,27 @@ package v1alpha3

import (
apimachineryconversion "k8s.io/apimachinery/pkg/conversion"
infrav1beta1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
"sigs.k8s.io/controller-runtime/pkg/conversion"
)

// ConvertTo converts this AzureMachineTemplate to the Hub version (v1beta1).
func (src *AzureMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*infrav1beta1.AzureMachineTemplate)
dst := dstRaw.(*infrav1.AzureMachineTemplate)
if err := Convert_v1alpha3_AzureMachineTemplate_To_v1beta1_AzureMachineTemplate(src, dst, nil); err != nil {
return err
}

// Manually restore data from annotations
restored := &infrav1beta1.AzureMachineTemplate{}
restored := &infrav1.AzureMachineTemplate{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
return err
}

// Handle special case for conversion of ManagedDisk to pointer.
if restored.Spec.Template.Spec.OSDisk.ManagedDisk == nil && dst.Spec.Template.Spec.OSDisk.ManagedDisk != nil {
if *dst.Spec.Template.Spec.OSDisk.ManagedDisk == (infrav1beta1.ManagedDiskParameters{}) {
if *dst.Spec.Template.Spec.OSDisk.ManagedDisk == (infrav1.ManagedDiskParameters{}) {
// restore nil value if nothing has changed since conversion
dst.Spec.Template.Spec.OSDisk.ManagedDisk = nil
}
Expand All @@ -61,12 +61,16 @@ func (src *AzureMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
dst.Spec.Template.Spec.SubnetName = restored.Spec.Template.Spec.SubnetName
dst.Spec.Template.ObjectMeta = restored.Spec.Template.ObjectMeta

if len(restored.Spec.Template.Spec.DNSServers) > 0 {
dst.Spec.Template.Spec.DNSServers = restored.Spec.Template.Spec.DNSServers
}

return nil
}

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (dst *AzureMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*infrav1beta1.AzureMachineTemplate)
src := srcRaw.(*infrav1.AzureMachineTemplate)
if err := Convert_v1beta1_AzureMachineTemplate_To_v1alpha3_AzureMachineTemplate(src, dst, nil); err != nil {
return err
}
Expand All @@ -77,20 +81,20 @@ func (dst *AzureMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {

// ConvertTo converts this AzureMachineTemplateList to the Hub version (v1beta1).
func (src *AzureMachineTemplateList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*infrav1beta1.AzureMachineTemplateList)
dst := dstRaw.(*infrav1.AzureMachineTemplateList)
return Convert_v1alpha3_AzureMachineTemplateList_To_v1beta1_AzureMachineTemplateList(src, dst, nil)
}

// ConvertFrom converts from the Hub version (v1beta1) to this version.
func (dst *AzureMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*infrav1beta1.AzureMachineTemplateList)
src := srcRaw.(*infrav1.AzureMachineTemplateList)
return Convert_v1beta1_AzureMachineTemplateList_To_v1alpha3_AzureMachineTemplateList(src, dst, nil)
}

func Convert_v1beta1_AzureSharedGalleryImage_To_v1alpha3_AzureSharedGalleryImage(in *infrav1beta1.AzureSharedGalleryImage, out *AzureSharedGalleryImage, s apimachineryconversion.Scope) error {
func Convert_v1beta1_AzureSharedGalleryImage_To_v1alpha3_AzureSharedGalleryImage(in *infrav1.AzureSharedGalleryImage, out *AzureSharedGalleryImage, s apimachineryconversion.Scope) error {
return autoConvert_v1beta1_AzureSharedGalleryImage_To_v1alpha3_AzureSharedGalleryImage(in, out, s)
}

func Convert_v1beta1_AzureMachineTemplateResource_To_v1alpha3_AzureMachineTemplateResource(in *infrav1beta1.AzureMachineTemplateResource, out *AzureMachineTemplateResource, s apimachineryconversion.Scope) error {
func Convert_v1beta1_AzureMachineTemplateResource_To_v1alpha3_AzureMachineTemplateResource(in *infrav1.AzureMachineTemplateResource, out *AzureMachineTemplateResource, s apimachineryconversion.Scope) error {
return autoConvert_v1beta1_AzureMachineTemplateResource_To_v1alpha3_AzureMachineTemplateResource(in, out, s)
}
Loading

0 comments on commit 8aa83e8

Please sign in to comment.