11const { cns } = require ( 'tencent-cloud-sdk' ) ;
22const { TypeError } = require ( '../../utils/error' ) ;
3+ const { getRealType } = require ( '../../utils' ) ;
34
45class Cns {
56 constructor ( credentials = { } , region = 'ap-guangzhou' ) {
@@ -9,21 +10,19 @@ class Cns {
910 }
1011
1112 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 } .` ;
2515 }
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 ;
2726 }
2827
2928 async deploy ( inputs = { } ) {
@@ -35,7 +34,7 @@ class Cns {
3534 const output = { records : [ ] } ;
3635
3736 // 获取线上的域名记录列表
38- console . log ( `Getting release domain records ... ` ) ;
37+ console . log ( `Getting release domain records` ) ;
3938 try {
4039 while ( domainLength == 100 ) {
4140 const statusInputs = {
@@ -45,40 +44,30 @@ class Cns {
4544 length : domainLength ,
4645 domain : inputs . domain ,
4746 } ;
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 } ` ) ;
6550 break ;
6651 }
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 ] ;
7059 recordRelease . push ( {
7160 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 ,
7968 } ) ;
8069 }
81- domainLength = recordReleaseList [ ' records' ] . length ;
70+ domainLength = records . length ;
8271 } else {
8372 domainLength = 0 ;
8473 }
@@ -88,30 +77,28 @@ class Cns {
8877 } catch ( e ) { }
8978
9079 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 ] ;
9282 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 ;
9684 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 ;
10088
101- for ( let subDomainNum = 0 ; subDomainNum < tempSubDomain . length ; subDomainNum ++ ) {
89+ for ( let j = 0 ; j < tempSubDomain . length ; j ++ ) {
10290 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 ] ;
10593 tempRecord . recordLine = tempRecordLine [ recordLineNum ] ;
10694 records . push ( tempRecord ) ;
10795 }
10896 }
10997 }
11098
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 ) ) ;
115102 tempInputs . domain = inputs . domain ;
116103 tempInputs . Region = this . region ;
117104 if ( ! tempInputs . status ) {
@@ -125,7 +112,7 @@ class Cns {
125112 tempInputs . recordId = releseHistory . recordId ;
126113 }
127114 tempInputs . recordId = Number ( tempInputs . recordId ) ;
128- console . log ( `Modifying (recordId is ${ tempInputs . recordId } )... ` ) ;
115+ console . log ( `Modifying dns record ${ tempInputs . recordId } ` ) ;
129116 tempInputs . Action = 'RecordModify' ;
130117 try {
131118 const modifyResult = await this . cnsClient . request ( tempInputs ) ;
@@ -135,10 +122,10 @@ class Cns {
135122 } catch ( e ) {
136123 throw new TypeError ( `API_CNS_RecordModify` , e . message , e . stack ) ;
137124 }
138- console . log ( `Modified (recordId is ${ tempInputs . recordId } ) ` ) ;
125+ console . log ( `Modified dns record ${ tempInputs . recordId } success ` ) ;
139126 } else {
140127 // 新建
141- console . log ( `Creating ... ` ) ;
128+ console . log ( `Creating dns record ` ) ;
142129 tempInputs . Action = 'RecordCreate' ;
143130 try {
144131 let createOutputs = await this . cnsClient . request ( tempInputs ) ;
@@ -150,7 +137,7 @@ class Cns {
150137 } catch ( e ) {
151138 throw e ;
152139 }
153- console . log ( `Created (recordId is ${ tempInputs . recordId } ) ` ) ;
140+ console . log ( `Created dns record ${ tempInputs . recordId } ` ) ;
154141 }
155142 recordList . push ( tempInputs ) ;
156143 output . records . push ( {
@@ -163,7 +150,7 @@ class Cns {
163150 domain : inputs . domain ,
164151 } ) ;
165152 // 改状态
166- console . log ( `Modifying status to ${ tempInputs . status } ` ) ;
153+ console . log ( `Modifying status to ${ tempInputs . status } ` ) ;
167154 const statusInputs = {
168155 Action : 'RecordStatus' ,
169156 Region : this . region ,
@@ -179,7 +166,7 @@ class Cns {
179166 } catch ( e ) {
180167 throw new TypeError ( `API_CNS_RecordStatus` , e . message , e . stack ) ;
181168 }
182- console . log ( `Modified status to ${ tempInputs . status } ` ) ;
169+ console . log ( `Modified status to ${ tempInputs . status } ` ) ;
183170 }
184171 return output ;
185172 }
@@ -189,15 +176,14 @@ class Cns {
189176
190177 if ( deleteList . length > 0 ) {
191178 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 } ` ) ;
196182 const deleteInputs = {
197183 Action : 'RecordDelete' ,
198184 Region : this . region ,
199- domain : deleteList [ recordNum ] . domain ,
200- recordId : deleteList [ recordNum ] . recordId ,
185+ domain : curRecord . domain ,
186+ recordId : curRecord . recordId ,
201187 } ;
202188 try {
203189 const deleteResult = await this . cnsClient . request ( deleteInputs ) ;
@@ -207,9 +193,7 @@ class Cns {
207193 } catch ( e ) {
208194 console . log ( `Error API_CNS_RecordDelete: ${ e . message } ` ) ;
209195 }
210- console . log (
211- `Remove record ${ deleteList [ recordNum ] . subDomain } ${ deleteList [ recordNum ] . recordId } success` ,
212- ) ;
196+ console . log ( `Remove record ${ curRecord . subDomain } ${ curRecord . recordId } success` ) ;
213197 }
214198 }
215199 return true ;
0 commit comments