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 }