kubesphere.io/api@v0.0.0-20231107125330-c9a03957060c/notification/v2beta2/receiver_conversion.go (about)

     1  /*
     2  
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v2beta2
    18  
    19  import (
    20  	"kubesphere.io/api/notification/v2beta1"
    21  	"sigs.k8s.io/controller-runtime/pkg/conversion"
    22  )
    23  
    24  // ConvertTo converts this Config to the Hub version (v2beta1).
    25  func (src *Receiver) ConvertTo(dstRaw conversion.Hub) error {
    26  
    27  	dst := dstRaw.(*v2beta1.Receiver)
    28  	dst.ObjectMeta = src.ObjectMeta
    29  
    30  	if err := src.convertDingTalkTo(dst); err != nil {
    31  		return err
    32  	}
    33  
    34  	if err := src.convertEmailTo(dst); err != nil {
    35  		return err
    36  	}
    37  
    38  	if err := src.convertSlackTo(dst); err != nil {
    39  		return err
    40  	}
    41  
    42  	if err := src.convertWebhookTo(dst); err != nil {
    43  		return err
    44  	}
    45  
    46  	if err := src.convertWechatTo(dst); err != nil {
    47  		return err
    48  	}
    49  
    50  	return nil
    51  }
    52  
    53  // ConvertFrom converts from the Hub version (v2beta1) to this version.
    54  func (dst *Receiver) ConvertFrom(srcRaw conversion.Hub) error {
    55  
    56  	src := srcRaw.(*v2beta1.Receiver)
    57  	dst.ObjectMeta = src.ObjectMeta
    58  
    59  	if err := dst.convertDingTalkFrom(src); err != nil {
    60  		return err
    61  	}
    62  
    63  	if err := dst.convertEmailFrom(src); err != nil {
    64  		return err
    65  	}
    66  
    67  	if err := dst.convertSlackFrom(src); err != nil {
    68  		return err
    69  	}
    70  
    71  	if err := dst.convertWebhookFrom(src); err != nil {
    72  		return err
    73  	}
    74  
    75  	if err := dst.convertWechatFrom(src); err != nil {
    76  		return err
    77  	}
    78  
    79  	return nil
    80  }
    81  
    82  func (src *Receiver) convertDingTalkTo(dst *v2beta1.Receiver) error {
    83  
    84  	if src.Spec.DingTalk == nil {
    85  		return nil
    86  	}
    87  
    88  	dingtalk := src.Spec.DingTalk
    89  	dst.Spec.DingTalk = &v2beta1.DingTalkReceiver{
    90  		Enabled:                dingtalk.Enabled,
    91  		DingTalkConfigSelector: dingtalk.DingTalkConfigSelector,
    92  		AlertSelector:          dingtalk.AlertSelector,
    93  	}
    94  
    95  	if dingtalk.Conversation != nil {
    96  		dst.Spec.DingTalk.Conversation = &v2beta1.DingTalkConversation{
    97  			ChatIDs: dingtalk.Conversation.ChatIDs,
    98  		}
    99  	}
   100  
   101  	if dingtalk.ChatBot != nil {
   102  		dst.Spec.DingTalk.ChatBot = &v2beta1.DingTalkChatBot{
   103  			Webhook:  credentialToSecretKeySelector(dingtalk.ChatBot.Webhook),
   104  			Keywords: dingtalk.ChatBot.Keywords,
   105  			Secret:   credentialToSecretKeySelector(dingtalk.ChatBot.Secret),
   106  		}
   107  	}
   108  
   109  	return nil
   110  }
   111  
   112  func (src *Receiver) convertEmailTo(dst *v2beta1.Receiver) error {
   113  
   114  	if src.Spec.Email == nil {
   115  		return nil
   116  	}
   117  
   118  	email := src.Spec.Email
   119  	dst.Spec.Email = &v2beta1.EmailReceiver{
   120  		Enabled:             email.Enabled,
   121  		To:                  email.To,
   122  		EmailConfigSelector: email.EmailConfigSelector,
   123  		AlertSelector:       email.AlertSelector,
   124  	}
   125  
   126  	return nil
   127  }
   128  
   129  func (src *Receiver) convertSlackTo(dst *v2beta1.Receiver) error {
   130  
   131  	if src.Spec.Slack == nil {
   132  		return nil
   133  	}
   134  
   135  	slack := src.Spec.Slack
   136  	dst.Spec.Slack = &v2beta1.SlackReceiver{
   137  		Enabled:             slack.Enabled,
   138  		SlackConfigSelector: slack.SlackConfigSelector,
   139  		AlertSelector:       slack.AlertSelector,
   140  		Channels:            slack.Channels,
   141  	}
   142  
   143  	return nil
   144  }
   145  
   146  func (src *Receiver) convertWebhookTo(dst *v2beta1.Receiver) error {
   147  
   148  	if src.Spec.Webhook == nil {
   149  		return nil
   150  	}
   151  
   152  	webhook := src.Spec.Webhook
   153  	dst.Spec.Webhook = &v2beta1.WebhookReceiver{
   154  		Enabled:               webhook.Enabled,
   155  		WebhookConfigSelector: webhook.WebhookConfigSelector,
   156  		AlertSelector:         webhook.AlertSelector,
   157  		URL:                   webhook.URL,
   158  	}
   159  
   160  	if webhook.Service != nil {
   161  		dst.Spec.Webhook.Service = &v2beta1.ServiceReference{
   162  			Namespace: webhook.Service.Namespace,
   163  			Name:      webhook.Service.Name,
   164  			Path:      webhook.Service.Path,
   165  			Port:      webhook.Service.Port,
   166  			Scheme:    webhook.Service.Scheme,
   167  		}
   168  	}
   169  
   170  	if webhook.HTTPConfig != nil {
   171  		dst.Spec.Webhook.HTTPConfig = &v2beta1.HTTPClientConfig{
   172  			BearerToken: credentialToSecretKeySelector(webhook.HTTPConfig.BearerToken),
   173  			ProxyURL:    webhook.HTTPConfig.ProxyURL,
   174  			TLSConfig:   convertTLSConfigTo(webhook.HTTPConfig.TLSConfig),
   175  		}
   176  
   177  		if webhook.HTTPConfig.BasicAuth != nil {
   178  			dst.Spec.Webhook.HTTPConfig.BasicAuth = &v2beta1.BasicAuth{
   179  				Username: webhook.HTTPConfig.BasicAuth.Username,
   180  				Password: credentialToSecretKeySelector(webhook.HTTPConfig.BasicAuth.Password),
   181  			}
   182  		}
   183  	}
   184  
   185  	return nil
   186  }
   187  
   188  func (src *Receiver) convertWechatTo(dst *v2beta1.Receiver) error {
   189  
   190  	if src.Spec.Wechat == nil {
   191  		return nil
   192  	}
   193  
   194  	wechat := src.Spec.Wechat
   195  	dst.Spec.Wechat = &v2beta1.WechatReceiver{
   196  		Enabled:              wechat.Enabled,
   197  		WechatConfigSelector: wechat.WechatConfigSelector,
   198  		AlertSelector:        wechat.AlertSelector,
   199  		ToUser:               wechat.ToUser,
   200  		ToParty:              wechat.ToParty,
   201  		ToTag:                wechat.ToTag,
   202  	}
   203  
   204  	return nil
   205  }
   206  
   207  func (dst *Receiver) convertDingTalkFrom(src *v2beta1.Receiver) error {
   208  
   209  	if src.Spec.DingTalk == nil {
   210  		return nil
   211  	}
   212  
   213  	dingtalk := src.Spec.DingTalk
   214  	dst.Spec.DingTalk = &DingTalkReceiver{
   215  		Enabled:                dingtalk.Enabled,
   216  		DingTalkConfigSelector: dingtalk.DingTalkConfigSelector,
   217  		AlertSelector:          dingtalk.AlertSelector,
   218  	}
   219  
   220  	if dingtalk.Conversation != nil {
   221  		dst.Spec.DingTalk.Conversation = &DingTalkConversation{
   222  			ChatIDs: dingtalk.Conversation.ChatIDs,
   223  		}
   224  	}
   225  
   226  	if dingtalk.ChatBot != nil {
   227  		dst.Spec.DingTalk.ChatBot = &DingTalkChatBot{
   228  			Webhook:  secretKeySelectorToCredential(dingtalk.ChatBot.Webhook),
   229  			Keywords: dingtalk.ChatBot.Keywords,
   230  			Secret:   secretKeySelectorToCredential(dingtalk.ChatBot.Secret),
   231  		}
   232  	}
   233  
   234  	return nil
   235  }
   236  
   237  func (dst *Receiver) convertEmailFrom(src *v2beta1.Receiver) error {
   238  
   239  	if src.Spec.Email == nil {
   240  		return nil
   241  	}
   242  
   243  	email := src.Spec.Email
   244  	dst.Spec.Email = &EmailReceiver{
   245  		Enabled:             email.Enabled,
   246  		To:                  email.To,
   247  		EmailConfigSelector: email.EmailConfigSelector,
   248  		AlertSelector:       email.AlertSelector,
   249  	}
   250  
   251  	return nil
   252  }
   253  
   254  func (dst *Receiver) convertSlackFrom(src *v2beta1.Receiver) error {
   255  
   256  	if src.Spec.Slack == nil {
   257  		return nil
   258  	}
   259  
   260  	slack := src.Spec.Slack
   261  	dst.Spec.Slack = &SlackReceiver{
   262  		Enabled:             slack.Enabled,
   263  		SlackConfigSelector: slack.SlackConfigSelector,
   264  		AlertSelector:       slack.AlertSelector,
   265  		Channels:            slack.Channels,
   266  	}
   267  
   268  	return nil
   269  }
   270  
   271  func (dst *Receiver) convertWebhookFrom(src *v2beta1.Receiver) error {
   272  
   273  	if src.Spec.Webhook == nil {
   274  		return nil
   275  	}
   276  
   277  	webhook := src.Spec.Webhook
   278  	dst.Spec.Webhook = &WebhookReceiver{
   279  		Enabled:               webhook.Enabled,
   280  		WebhookConfigSelector: webhook.WebhookConfigSelector,
   281  		AlertSelector:         webhook.AlertSelector,
   282  		URL:                   webhook.URL,
   283  	}
   284  
   285  	if webhook.Service != nil {
   286  		dst.Spec.Webhook.Service = &ServiceReference{
   287  			Namespace: webhook.Service.Namespace,
   288  			Name:      webhook.Service.Name,
   289  			Path:      webhook.Service.Path,
   290  			Port:      webhook.Service.Port,
   291  			Scheme:    webhook.Service.Scheme,
   292  		}
   293  	}
   294  
   295  	if webhook.HTTPConfig != nil {
   296  		dst.Spec.Webhook.HTTPConfig = &HTTPClientConfig{
   297  			BearerToken: secretKeySelectorToCredential(webhook.HTTPConfig.BearerToken),
   298  			ProxyURL:    webhook.HTTPConfig.ProxyURL,
   299  			TLSConfig:   convertTLSConfigFrom(webhook.HTTPConfig.TLSConfig),
   300  		}
   301  
   302  		if webhook.HTTPConfig.BasicAuth != nil {
   303  			dst.Spec.Webhook.HTTPConfig.BasicAuth = &BasicAuth{
   304  				Username: webhook.HTTPConfig.BasicAuth.Username,
   305  				Password: secretKeySelectorToCredential(webhook.HTTPConfig.BasicAuth.Password),
   306  			}
   307  		}
   308  	}
   309  
   310  	return nil
   311  }
   312  
   313  func (dst *Receiver) convertWechatFrom(src *v2beta1.Receiver) error {
   314  
   315  	if src.Spec.Wechat == nil {
   316  		return nil
   317  	}
   318  
   319  	wechat := src.Spec.Wechat
   320  	dst.Spec.Wechat = &WechatReceiver{
   321  		Enabled:              wechat.Enabled,
   322  		WechatConfigSelector: wechat.WechatConfigSelector,
   323  		AlertSelector:        wechat.AlertSelector,
   324  		ToUser:               wechat.ToUser,
   325  		ToParty:              wechat.ToParty,
   326  		ToTag:                wechat.ToTag,
   327  	}
   328  
   329  	return nil
   330  }