1
1
const { cns } = require ( 'tencent-cloud-sdk' ) ;
2
2
const { TypeError } = require ( '../../utils/error' ) ;
3
+ const { getRealType } = require ( '../../utils' ) ;
3
4
4
5
class Cns {
5
6
constructor ( credentials = { } , region = 'ap-guangzhou' ) {
@@ -9,21 +10,19 @@ class Cns {
9
10
}
10
11
11
12
haveRecord ( newRecord , historyRcords ) {
12
- for ( let i = 0 ; i < historyRcords . length ; i ++ ) {
13
- if ( newRecord . recordType == 'CNAME' && newRecord . value . slice ( - 1 ) != '.' ) {
14
- newRecord . value = `${ newRecord . value } .` ;
15
- }
16
- if (
17
- newRecord . domain == historyRcords [ i ] . domain &&
18
- newRecord . subDomain == historyRcords [ i ] . subDomain &&
19
- newRecord . recordType == historyRcords [ i ] . recordType &&
20
- newRecord . value == historyRcords [ i ] . value &&
21
- newRecord . recordLine == historyRcords [ i ] . recordLine
22
- ) {
23
- return historyRcords [ i ] ;
24
- }
13
+ if ( newRecord . recordType === 'CNAME' && newRecord . value . slice ( - 1 ) !== '.' ) {
14
+ newRecord . value = `${ newRecord . value } .` ;
25
15
}
26
- return false ;
16
+ const [ exist ] = historyRcords . filter ( ( item ) => {
17
+ return (
18
+ newRecord . domain === item . domain &&
19
+ newRecord . subDomain === item . subDomain &&
20
+ newRecord . recordType === item . recordType &&
21
+ newRecord . value === item . value &&
22
+ newRecord . recordLine === item . recordLine
23
+ ) ;
24
+ } ) ;
25
+ return exist ;
27
26
}
28
27
29
28
async deploy ( inputs = { } ) {
@@ -35,7 +34,7 @@ class Cns {
35
34
const output = { records : [ ] } ;
36
35
37
36
// 获取线上的域名记录列表
38
- console . log ( `Getting release domain records ... ` ) ;
37
+ console . log ( `Getting release domain records` ) ;
39
38
try {
40
39
while ( domainLength == 100 ) {
41
40
const statusInputs = {
@@ -45,40 +44,30 @@ class Cns {
45
44
length : domainLength ,
46
45
domain : inputs . domain ,
47
46
} ;
48
- let recordReleaseList = await this . cnsClient . request ( statusInputs ) ;
49
- if ( recordReleaseList . code != 0 ) {
50
- // 如果没找到Domain,则尝试添加Domain
51
- try {
52
- console . log ( `Get release domain error.` ) ;
53
- console . log ( `Adding domain ...` ) ;
54
- await this . cnsClient . request ( {
55
- Action : 'DomainCreate' ,
56
- Region : this . region ,
57
- domain : inputs . domain ,
58
- } ) ;
59
- output . DNS = 'Please set your domain DNS: f1g1ns1.dnspod.net, f1g1ns1.dnspod.net' ;
60
- console . log ( `Added domain` ) ;
61
- } catch ( e ) {
62
- console . log ( `Add domain error` ) ;
63
- console . log ( `Trying to deploy ...` ) ;
64
- }
47
+ const res = await this . cnsClient . request ( statusInputs ) ;
48
+ if ( res . code !== 0 ) {
49
+ console . log ( `${ res . code } : ${ res . message } ` ) ;
65
50
break ;
66
51
}
67
- recordReleaseList = recordReleaseList [ 'data' ] ;
68
- if ( recordReleaseList [ 'records' ] ) {
69
- for ( let i = 0 ; i < recordReleaseList [ 'records' ] . length ; i ++ ) {
52
+
53
+ const {
54
+ data : { records } ,
55
+ } = res ;
56
+ if ( records ) {
57
+ for ( let i = 0 ; i < records . length ; i ++ ) {
58
+ const curRecord = records [ i ] ;
70
59
recordRelease . push ( {
71
60
domain : inputs . domain ,
72
- subDomain : recordReleaseList [ 'records' ] [ i ] . name ,
73
- recordType : recordReleaseList [ 'records' ] [ i ] . type ,
74
- value : recordReleaseList [ 'records' ] [ i ] . value ,
75
- recordId : recordReleaseList [ 'records' ] [ i ] . id ,
76
- mx : recordReleaseList [ 'records' ] [ i ] . mx ,
77
- ttl : recordReleaseList [ 'records' ] [ i ] . ttl ,
78
- recordLine : recordReleaseList [ 'records' ] [ i ] . line ,
61
+ subDomain : curRecord . name ,
62
+ recordType : curRecord . type ,
63
+ value : curRecord . value ,
64
+ recordId : curRecord . id ,
65
+ mx : curRecord . mx ,
66
+ ttl : curRecord . ttl ,
67
+ recordLine : curRecord . line ,
79
68
} ) ;
80
69
}
81
- domainLength = recordReleaseList [ ' records' ] . length ;
70
+ domainLength = records . length ;
82
71
} else {
83
72
domainLength = 0 ;
84
73
}
@@ -88,30 +77,28 @@ class Cns {
88
77
} catch ( e ) { }
89
78
90
79
const records = [ ] ;
91
- for ( let recordNum = 0 ; recordNum < inputs . records . length ; recordNum ++ ) {
80
+ for ( let i = 0 ; i < inputs . records . length ; i ++ ) {
81
+ const curRecord = inputs . records [ i ] ;
92
82
const tempSubDomain =
93
- typeof inputs . records [ recordNum ] . subDomain == 'string'
94
- ? [ inputs . records [ recordNum ] . subDomain ]
95
- : inputs . records [ recordNum ] . subDomain ;
83
+ getRealType ( curRecord . subDomain ) === 'String' ? [ curRecord . subDomain ] : curRecord . subDomain ;
96
84
const tempRecordLine =
97
- typeof inputs . records [ recordNum ] . recordLine == 'string '
98
- ? [ inputs . records [ recordNum ] . recordLine ]
99
- : inputs . records [ recordNum ] . recordLine ;
85
+ getRealType ( curRecord . recordLine ) === 'String '
86
+ ? [ curRecord . recordLine ]
87
+ : curRecord . recordLine ;
100
88
101
- for ( let subDomainNum = 0 ; subDomainNum < tempSubDomain . length ; subDomainNum ++ ) {
89
+ for ( let j = 0 ; j < tempSubDomain . length ; j ++ ) {
102
90
for ( let recordLineNum = 0 ; recordLineNum < tempRecordLine . length ; recordLineNum ++ ) {
103
- const tempRecord = JSON . parse ( JSON . stringify ( inputs . records [ recordNum ] ) ) ;
104
- tempRecord . subDomain = tempSubDomain [ subDomainNum ] ;
91
+ const tempRecord = JSON . parse ( JSON . stringify ( curRecord ) ) ;
92
+ tempRecord . subDomain = tempSubDomain [ j ] ;
105
93
tempRecord . recordLine = tempRecordLine [ recordLineNum ] ;
106
94
records . push ( tempRecord ) ;
107
95
}
108
96
}
109
97
}
110
98
111
- // 增加/修改记录
112
- console . log ( `Doing action about domain records ... ` ) ;
113
- for ( let recordNum = 0 ; recordNum < records . length ; recordNum ++ ) {
114
- const tempInputs = JSON . parse ( JSON . stringify ( records [ recordNum ] ) ) ;
99
+ for ( let i = 0 ; i < records . length ; i ++ ) {
100
+ const curRecord = records [ i ] ;
101
+ const tempInputs = JSON . parse ( JSON . stringify ( curRecord ) ) ;
115
102
tempInputs . domain = inputs . domain ;
116
103
tempInputs . Region = this . region ;
117
104
if ( ! tempInputs . status ) {
@@ -125,7 +112,7 @@ class Cns {
125
112
tempInputs . recordId = releseHistory . recordId ;
126
113
}
127
114
tempInputs . recordId = Number ( tempInputs . recordId ) ;
128
- console . log ( `Modifying (recordId is ${ tempInputs . recordId } )... ` ) ;
115
+ console . log ( `Modifying dns record ${ tempInputs . recordId } ` ) ;
129
116
tempInputs . Action = 'RecordModify' ;
130
117
try {
131
118
const modifyResult = await this . cnsClient . request ( tempInputs ) ;
@@ -135,10 +122,10 @@ class Cns {
135
122
} catch ( e ) {
136
123
throw new TypeError ( `API_CNS_RecordModify` , e . message , e . stack ) ;
137
124
}
138
- console . log ( `Modified (recordId is ${ tempInputs . recordId } ) ` ) ;
125
+ console . log ( `Modified dns record ${ tempInputs . recordId } success ` ) ;
139
126
} else {
140
127
// 新建
141
- console . log ( `Creating ... ` ) ;
128
+ console . log ( `Creating dns record ` ) ;
142
129
tempInputs . Action = 'RecordCreate' ;
143
130
try {
144
131
let createOutputs = await this . cnsClient . request ( tempInputs ) ;
@@ -150,7 +137,7 @@ class Cns {
150
137
} catch ( e ) {
151
138
throw e ;
152
139
}
153
- console . log ( `Created (recordId is ${ tempInputs . recordId } ) ` ) ;
140
+ console . log ( `Created dns record ${ tempInputs . recordId } ` ) ;
154
141
}
155
142
recordList . push ( tempInputs ) ;
156
143
output . records . push ( {
@@ -163,7 +150,7 @@ class Cns {
163
150
domain : inputs . domain ,
164
151
} ) ;
165
152
// 改状态
166
- console . log ( `Modifying status to ${ tempInputs . status } ` ) ;
153
+ console . log ( `Modifying status to ${ tempInputs . status } ` ) ;
167
154
const statusInputs = {
168
155
Action : 'RecordStatus' ,
169
156
Region : this . region ,
@@ -179,7 +166,7 @@ class Cns {
179
166
} catch ( e ) {
180
167
throw new TypeError ( `API_CNS_RecordStatus` , e . message , e . stack ) ;
181
168
}
182
- console . log ( `Modified status to ${ tempInputs . status } ` ) ;
169
+ console . log ( `Modified status to ${ tempInputs . status } ` ) ;
183
170
}
184
171
return output ;
185
172
}
@@ -189,15 +176,14 @@ class Cns {
189
176
190
177
if ( deleteList . length > 0 ) {
191
178
console . log ( `Removing records which deployed by this project, but not in this records list` ) ;
192
- for ( let recordNum = 0 ; recordNum < deleteList . length ; recordNum ++ ) {
193
- console . log (
194
- `Removing record ${ deleteList [ recordNum ] . subDomain } ${ deleteList [ recordNum ] . recordId } ` ,
195
- ) ;
179
+ for ( let i = 0 ; i < deleteList . length ; i ++ ) {
180
+ const curRecord = deleteList [ i ] ;
181
+ console . log ( `Removing record ${ curRecord . subDomain } ${ curRecord . recordId } ` ) ;
196
182
const deleteInputs = {
197
183
Action : 'RecordDelete' ,
198
184
Region : this . region ,
199
- domain : deleteList [ recordNum ] . domain ,
200
- recordId : deleteList [ recordNum ] . recordId ,
185
+ domain : curRecord . domain ,
186
+ recordId : curRecord . recordId ,
201
187
} ;
202
188
try {
203
189
const deleteResult = await this . cnsClient . request ( deleteInputs ) ;
@@ -207,9 +193,7 @@ class Cns {
207
193
} catch ( e ) {
208
194
console . log ( `Error API_CNS_RecordDelete: ${ e . message } ` ) ;
209
195
}
210
- console . log (
211
- `Remove record ${ deleteList [ recordNum ] . subDomain } ${ deleteList [ recordNum ] . recordId } success` ,
212
- ) ;
196
+ console . log ( `Remove record ${ curRecord . subDomain } ${ curRecord . recordId } success` ) ;
213
197
}
214
198
}
215
199
return true ;
0 commit comments