github.com/Azure/aad-pod-identity@v1.8.17/pkg/apis/aadpodidentity/v1/conversion.go (about)

     1  package v1
     2  
     3  import (
     4  	"reflect"
     5  
     6  	aadpodid "github.com/Azure/aad-pod-identity/pkg/apis/aadpodidentity"
     7  
     8  	"k8s.io/apimachinery/pkg/runtime/schema"
     9  )
    10  
    11  // ConvertV1BindingToInternalBinding converts v1.AzureIdentityBinding to an internal AzureIdentityBinding type.
    12  func ConvertV1BindingToInternalBinding(identityBinding AzureIdentityBinding) aadpodid.AzureIdentityBinding {
    13  	return aadpodid.AzureIdentityBinding{
    14  		TypeMeta:   identityBinding.TypeMeta,
    15  		ObjectMeta: identityBinding.ObjectMeta,
    16  		Spec: aadpodid.AzureIdentityBindingSpec{
    17  			ObjectMeta:    identityBinding.Spec.ObjectMeta,
    18  			AzureIdentity: identityBinding.Spec.AzureIdentity,
    19  			Selector:      identityBinding.Spec.Selector,
    20  			Weight:        identityBinding.Spec.Weight,
    21  		},
    22  		Status: aadpodid.AzureIdentityBindingStatus(identityBinding.Status),
    23  	}
    24  }
    25  
    26  // ConvertV1IdentityToInternalIdentity converts v1.AzureIdentity to an internal AzureIdentity type.
    27  func ConvertV1IdentityToInternalIdentity(identity AzureIdentity) aadpodid.AzureIdentity {
    28  	return aadpodid.AzureIdentity{
    29  		TypeMeta:   identity.TypeMeta,
    30  		ObjectMeta: identity.ObjectMeta,
    31  		Spec: aadpodid.AzureIdentitySpec{
    32  			ObjectMeta:         identity.Spec.ObjectMeta,
    33  			Type:               aadpodid.IdentityType(identity.Spec.Type),
    34  			ResourceID:         identity.Spec.ResourceID,
    35  			ClientID:           identity.Spec.ClientID,
    36  			ClientPassword:     identity.Spec.ClientPassword,
    37  			TenantID:           identity.Spec.TenantID,
    38  			AuxiliaryTenantIDs: identity.Spec.AuxiliaryTenantIDs,
    39  			ADResourceID:       identity.Spec.ADResourceID,
    40  			ADEndpoint:         identity.Spec.ADEndpoint,
    41  			Replicas:           identity.Spec.Replicas,
    42  		},
    43  		Status: aadpodid.AzureIdentityStatus(identity.Status),
    44  	}
    45  }
    46  
    47  // ConvertV1AssignedIdentityToInternalAssignedIdentity converts v1.AzureAssignedIdentity to an internal AzureAssignedIdentity type.
    48  func ConvertV1AssignedIdentityToInternalAssignedIdentity(assignedIdentity AzureAssignedIdentity) aadpodid.AzureAssignedIdentity {
    49  	var retIdentity aadpodid.AzureIdentity
    50  	var retBinding aadpodid.AzureIdentityBinding
    51  	if assignedIdentity.Spec.AzureIdentityRef != nil {
    52  		retIdentity = ConvertV1IdentityToInternalIdentity(*assignedIdentity.Spec.AzureIdentityRef)
    53  	}
    54  	if assignedIdentity.Spec.AzureBindingRef != nil {
    55  		retBinding = ConvertV1BindingToInternalBinding(*assignedIdentity.Spec.AzureBindingRef)
    56  	}
    57  
    58  	return aadpodid.AzureAssignedIdentity{
    59  		TypeMeta:   assignedIdentity.TypeMeta,
    60  		ObjectMeta: assignedIdentity.ObjectMeta,
    61  		Spec: aadpodid.AzureAssignedIdentitySpec{
    62  			ObjectMeta:       assignedIdentity.Spec.ObjectMeta,
    63  			AzureIdentityRef: &retIdentity,
    64  			AzureBindingRef:  &retBinding,
    65  			Pod:              assignedIdentity.Spec.Pod,
    66  			PodNamespace:     assignedIdentity.Spec.PodNamespace,
    67  			NodeName:         assignedIdentity.Spec.NodeName,
    68  			Replicas:         assignedIdentity.Spec.Replicas,
    69  		},
    70  		Status: aadpodid.AzureAssignedIdentityStatus(assignedIdentity.Status),
    71  	}
    72  }
    73  
    74  // ConvertV1PodIdentityExceptionToInternalPodIdentityException converts v1.AzurePodIdentityException to an internal AzurePodIdentityException type.
    75  func ConvertV1PodIdentityExceptionToInternalPodIdentityException(idException AzurePodIdentityException) aadpodid.AzurePodIdentityException {
    76  	return aadpodid.AzurePodIdentityException{
    77  		TypeMeta:   idException.TypeMeta,
    78  		ObjectMeta: idException.ObjectMeta,
    79  		Spec: aadpodid.AzurePodIdentityExceptionSpec{
    80  			ObjectMeta: idException.Spec.ObjectMeta,
    81  			PodLabels:  idException.Spec.PodLabels,
    82  		},
    83  		Status: aadpodid.AzurePodIdentityExceptionStatus(idException.Status),
    84  	}
    85  }
    86  
    87  // ConvertInternalBindingToV1Binding converts an internal AzureIdentityBinding type to v1.AzureIdentityBinding.
    88  func ConvertInternalBindingToV1Binding(identityBinding aadpodid.AzureIdentityBinding) AzureIdentityBinding {
    89  	out := AzureIdentityBinding{
    90  		TypeMeta:   identityBinding.TypeMeta,
    91  		ObjectMeta: identityBinding.ObjectMeta,
    92  		Spec: AzureIdentityBindingSpec{
    93  			ObjectMeta:    identityBinding.Spec.ObjectMeta,
    94  			AzureIdentity: identityBinding.Spec.AzureIdentity,
    95  			Selector:      identityBinding.Spec.Selector,
    96  			Weight:        identityBinding.Spec.Weight,
    97  		},
    98  		Status: AzureIdentityBindingStatus(identityBinding.Status),
    99  	}
   100  
   101  	out.TypeMeta.SetGroupVersionKind(schema.GroupVersionKind{
   102  		Group:   SchemeGroupVersion.Group,
   103  		Version: SchemeGroupVersion.Version,
   104  		Kind:    reflect.TypeOf(out).Name()})
   105  
   106  	return out
   107  }
   108  
   109  // ConvertInternalIdentityToV1Identity converts an internal AzureIdentity type to v1.AzureIdentity.
   110  func ConvertInternalIdentityToV1Identity(identity aadpodid.AzureIdentity) AzureIdentity {
   111  	out := AzureIdentity{
   112  		TypeMeta:   identity.TypeMeta,
   113  		ObjectMeta: identity.ObjectMeta,
   114  		Spec: AzureIdentitySpec{
   115  			ObjectMeta:         identity.Spec.ObjectMeta,
   116  			Type:               IdentityType(identity.Spec.Type),
   117  			ResourceID:         identity.Spec.ResourceID,
   118  			ClientID:           identity.Spec.ClientID,
   119  			ClientPassword:     identity.Spec.ClientPassword,
   120  			TenantID:           identity.Spec.TenantID,
   121  			AuxiliaryTenantIDs: identity.Spec.AuxiliaryTenantIDs,
   122  			ADResourceID:       identity.Spec.ADResourceID,
   123  			ADEndpoint:         identity.Spec.ADEndpoint,
   124  			Replicas:           identity.Spec.Replicas,
   125  		},
   126  		Status: AzureIdentityStatus(identity.Status),
   127  	}
   128  
   129  	out.TypeMeta.SetGroupVersionKind(schema.GroupVersionKind{
   130  		Group:   SchemeGroupVersion.Group,
   131  		Version: SchemeGroupVersion.Version,
   132  		Kind:    reflect.TypeOf(out).Name()})
   133  
   134  	return out
   135  }
   136  
   137  // ConvertInternalAssignedIdentityToV1AssignedIdentity converts an internal AzureAssignedIdentity type to v1.AzureAssignedIdentity.
   138  func ConvertInternalAssignedIdentityToV1AssignedIdentity(assignedIdentity aadpodid.AzureAssignedIdentity) AzureAssignedIdentity {
   139  	retIdentity := ConvertInternalIdentityToV1Identity(*assignedIdentity.Spec.AzureIdentityRef)
   140  	retBinding := ConvertInternalBindingToV1Binding(*assignedIdentity.Spec.AzureBindingRef)
   141  
   142  	out := AzureAssignedIdentity{
   143  		TypeMeta:   assignedIdentity.TypeMeta,
   144  		ObjectMeta: assignedIdentity.ObjectMeta,
   145  		Spec: AzureAssignedIdentitySpec{
   146  			ObjectMeta:       assignedIdentity.Spec.ObjectMeta,
   147  			AzureIdentityRef: &retIdentity,
   148  			AzureBindingRef:  &retBinding,
   149  			Pod:              assignedIdentity.Spec.Pod,
   150  			PodNamespace:     assignedIdentity.Spec.PodNamespace,
   151  			NodeName:         assignedIdentity.Spec.NodeName,
   152  			Replicas:         assignedIdentity.Spec.Replicas,
   153  		},
   154  		Status: AzureAssignedIdentityStatus(assignedIdentity.Status),
   155  	}
   156  
   157  	out.TypeMeta.SetGroupVersionKind(schema.GroupVersionKind{
   158  		Group:   SchemeGroupVersion.Group,
   159  		Version: SchemeGroupVersion.Version,
   160  		Kind:    reflect.TypeOf(out).Name()})
   161  
   162  	return out
   163  }
   164  
   165  // ConvertInternalPodIdentityExceptionToV1PodIdentityException is currently not needed, as AzurePodIdentityException are only listed and not created within the project