mirror of
				https://github.com/kubernetes-sigs/external-dns.git
				synced 2025-10-30 18:20:59 +01:00 
			
		
		
		
	* ci linting fixes Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * remove staticcheck Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * disable naming rule Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * disable stylecheck too Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * linter errors fixes Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * re-add staticcheck Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * fixes various linting issues Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * fix imports Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * fix tlsconfig Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * fix alibabacloud Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * ioutil fixes Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * remove all references to ioutil Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> * ignore linting for azure deprecated sdk Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com> Signed-off-by: Raffaele Di Fazio <difazio.raffaele@gmail.com>
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| Copyright 2022 The Kubernetes Authors.
 | |
| 
 | |
| Licensed under the Apache License, Version 2.0 (the "License");
 | |
| you may not use this file except in compliance with the License.
 | |
| You may obtain a copy of the License at
 | |
| 
 | |
|     http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| Unless required by applicable law or agreed to in writing, software
 | |
| distributed under the License is distributed on an "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License.
 | |
| */
 | |
| 
 | |
| package tencentcloud
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"strings"
 | |
| 
 | |
| 	log "github.com/sirupsen/logrus"
 | |
| 
 | |
| 	"sigs.k8s.io/external-dns/endpoint"
 | |
| 	"sigs.k8s.io/external-dns/plan"
 | |
| 	"sigs.k8s.io/external-dns/provider"
 | |
| 	"sigs.k8s.io/external-dns/provider/tencentcloud/cloudapi"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	TencentCloudEmptyPrefix = "@"
 | |
| 	DefaultAPIRate          = 9
 | |
| )
 | |
| 
 | |
| func NewTencentCloudProvider(domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, configFile string, zoneType string, dryRun bool) (*TencentCloudProvider, error) {
 | |
| 	cfg := tencentCloudConfig{}
 | |
| 	if configFile != "" {
 | |
| 		contents, err := os.ReadFile(configFile)
 | |
| 		if err != nil {
 | |
| 			return nil, fmt.Errorf("failed to read Tencent Cloud config file '%s': %w", configFile, err)
 | |
| 		}
 | |
| 		err = json.Unmarshal(contents, &cfg)
 | |
| 		if err != nil {
 | |
| 			return nil, fmt.Errorf("failed to parse Tencent Cloud config file '%s': %w", configFile, err)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	var apiService cloudapi.TencentAPIService = cloudapi.NewTencentAPIService(cfg.RegionId, DefaultAPIRate, cfg.SecretId, cfg.SecretKey, cfg.InternetEndpoint)
 | |
| 	if dryRun {
 | |
| 		apiService = cloudapi.NewReadOnlyAPIService(cfg.RegionId, DefaultAPIRate, cfg.SecretId, cfg.SecretKey, cfg.InternetEndpoint)
 | |
| 	}
 | |
| 
 | |
| 	tencentCloudProvider := &TencentCloudProvider{
 | |
| 		domainFilter: domainFilter,
 | |
| 		zoneIDFilter: zoneIDFilter,
 | |
| 		apiService:   apiService,
 | |
| 		vpcID:        cfg.VPCId,
 | |
| 		privateZone:  zoneType == "private",
 | |
| 	}
 | |
| 
 | |
| 	return tencentCloudProvider, nil
 | |
| }
 | |
| 
 | |
| type TencentCloudProvider struct {
 | |
| 	provider.BaseProvider
 | |
| 	apiService   cloudapi.TencentAPIService
 | |
| 	domainFilter endpoint.DomainFilter
 | |
| 	zoneIDFilter provider.ZoneIDFilter // Private Zone only
 | |
| 	vpcID        string                // Private Zone only
 | |
| 	privateZone  bool
 | |
| }
 | |
| 
 | |
| type tencentCloudConfig struct {
 | |
| 	RegionId         string `json:"regionId" yaml:"regionId"`
 | |
| 	SecretId         string `json:"secretId" yaml:"secretId"`
 | |
| 	SecretKey        string `json:"secretKey" yaml:"secretKey"`
 | |
| 	VPCId            string `json:"vpcId" yaml:"vpcId"`
 | |
| 	InternetEndpoint bool   `json:"internetEndpoint" yaml:"internetEndpoint"`
 | |
| }
 | |
| 
 | |
| func (p *TencentCloudProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) {
 | |
| 	if p.privateZone {
 | |
| 		return p.privateZoneRecords()
 | |
| 	}
 | |
| 	return p.dnsRecords()
 | |
| }
 | |
| 
 | |
| func (p *TencentCloudProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error {
 | |
| 	if !changes.HasChanges() {
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	log.Infof("apply changes. %s", cloudapi.JsonWrapper(changes))
 | |
| 
 | |
| 	if p.privateZone {
 | |
| 		return p.applyChangesForPrivateZone(changes)
 | |
| 	}
 | |
| 	return p.applyChangesForDNS(changes)
 | |
| }
 | |
| 
 | |
| func getSubDomain(domain string, endpoint *endpoint.Endpoint) string {
 | |
| 	name := endpoint.DNSName
 | |
| 	name = name[:len(name)-len(domain)]
 | |
| 	name = strings.TrimSuffix(name, ".")
 | |
| 
 | |
| 	if name == "" {
 | |
| 		return TencentCloudEmptyPrefix
 | |
| 	}
 | |
| 	return name
 | |
| }
 | |
| 
 | |
| func getDnsDomain(subDomain string, domain string) string {
 | |
| 	if subDomain == TencentCloudEmptyPrefix {
 | |
| 		return domain
 | |
| 	}
 | |
| 	return subDomain + "." + domain
 | |
| }
 |