@@ -38,134 +38,76 @@ class DeployFunction extends AbstractHandler {
3838 async  addRole ( )  { 
3939 try  { 
4040 const  roleName  =  'SCF_QcsRole' 
41-  const  policyNameList  =  [ 
42-  'QcloudCOSFullAccess' , 
43-  'QcloudCOSBucketConfigWrite' , 
44-  'QcloudCOSBucketConfigRead' , 
45-  'QcloudCOSDataReadOnly' , 
46-  'QcloudAPIGWFullAccess' 
47-  ] 
41+  const  policyName  =  'QcloudAccessForScfRole' 
4842 const  listPoliciesModels  =  new  camModels . ListPoliciesRequest ( ) 
4943 const  listPoliciesHandler  =  util . promisify ( this . camClient . ListPolicies . bind ( this . camClient ) ) 
50-  const  policyIdList  =  new  Array ( ) 
44+  let  havePolicy  =  false 
45+  let  policyId 
5146 let  pagePolicyCount  =  200 
52-  let  body  =  {  Rp : 200 ,  Page : 0  } 
53-  while  ( policyIdList . length   <   5   ||  pagePolicyCount  ==  200 )  { 
47+  const  body  =  {  Rp : 200 ,  Page : 0  } 
48+  while  ( ! havePolicy   &&  pagePolicyCount  ==  200 )  { 
5449 body . Page  =  body . Page  +  1 
5550 listPoliciesModels . from_json_string ( JSON . stringify ( body ) ) 
5651 try  { 
5752 const  pagePolicList  =  await  listPoliciesHandler ( listPoliciesModels ) 
5853 for  ( let  i  =  0 ;  i  <  pagePolicList . List . length ;  i ++ )  { 
59-  if  ( policyNameList . indexOf ( pagePolicList . List [ i ] . PolicyName )  >  - 1 )  { 
60-  policyIdList . push ( pagePolicList . List [ i ] . PolicyId ) 
54+  if  ( policyName  ==  pagePolicList . List [ i ] . PolicyName )  { 
55+  havePolicy  =  true 
56+  policyId  =  pagePolicList . List [ i ] . PolicyId 
57+  break 
6158 } 
6259 } 
6360 pagePolicyCount  =  pagePolicList . List . length 
64-  }  catch  ( e )  { } 
61+  }  catch  ( e )  { 
62+  pagePolicyCount  =  0 
63+  } 
6564 await  utils . sleep ( 400 ) 
6665 } 
6766
68-  let  roleState  =  1 
69- 
70-  // Get role 
67+  // Create role and attach policy 
7168 try  { 
72-  const  getRoleModels  =  new  camModels . GetRoleRequest ( ) 
73-  getRoleModels . from_json_string ( JSON . stringify ( {  RoleName : roleName  } ) ) 
74-  const  getRoleHandler  =  util . promisify ( this . camClient . GetRole . bind ( this . camClient ) ) 
75-  await  getRoleHandler ( getRoleModels ) 
69+  const  createRoleModels  =  new  camModels . CreateRoleRequest ( ) 
70+  createRoleModels . from_json_string ( 
71+  JSON . stringify ( { 
72+  RoleName : roleName , 
73+  PolicyDocument : JSON . stringify ( { 
74+  version : '2.0' , 
75+  statement : [ 
76+  { 
77+  effect : 'allow' , 
78+  principal : { 
79+  service : 'scf.qcloud.com' 
80+  } , 
81+  action : 'sts:AssumeRole' 
82+  } 
83+  ] 
84+  } ) 
85+  } ) 
86+  ) 
87+  const  createRoleHandler  =  util . promisify ( this . camClient . CreateRole . bind ( this . camClient ) ) 
88+  await  createRoleHandler ( createRoleModels ) 
7689 }  catch  ( e )  { 
77-  if  ( e . message . includes ( 'role not exist' ) )  { 
78-  roleState  =  - 1 
90+  if  ( e  &&  e . message . match ( 'role name in use' ) )  { 
7991 }  else  { 
80-  roleState   =   0 
92+  this . serverless . cli . log ( 'Create role error : '   +   e ) 
8193 } 
8294 } 
83- 
84-  const  haveIdList  =  new  Array ( ) 
85-  const  addIdList  =  new  Array ( ) 
86- 
87-  // Get role policy list 
8895 try  { 
89-  pagePolicyCount  =  200 
90-  body  =  {  Rp : 200 ,  Page : 0 ,  RoleName : roleName  } 
91-  const  listRolePoliciesModels  =  new  camModels . ListAttachedRolePoliciesRequest ( ) 
92-  const  listRolePoliciesHandler  =  util . promisify ( 
93-  this . camClient . ListAttachedRolePolicies . bind ( this . camClient ) 
96+  const  attachRolePolicyModels  =  new  camModels . AttachRolePolicyRequest ( ) 
97+  const  attachRolePolicyHandler  =  util . promisify ( 
98+  this . camClient . AttachRolePolicy . bind ( this . camClient ) 
9499 ) 
95-  while  ( pagePolicyCount  ==  200 )  { 
96-  body . Page  =  body . Page  +  1 
97-  listRolePoliciesModels . from_json_string ( JSON . stringify ( body ) ) 
98-  try  { 
99-  const  pagePolicList  =  await  listRolePoliciesHandler ( listRolePoliciesModels ) 
100-  for  ( let  i  =  0 ;  i  <  pagePolicList . List . length ;  i ++ )  { 
101-  haveIdList . push ( pagePolicList . List [ i ] . PolicyId ) 
102-  } 
103-  pagePolicyCount  =  pagePolicList . List . length 
104-  }  catch  ( e )  { 
105-  pagePolicyCount  =  0 
106-  } 
107-  await  utils . sleep ( 400 ) 
108-  } 
109-  }  catch  ( e )  { } 
110- 
111-  // Get policy id which need to add in SCF_QcsRole 
112-  for  ( let  i  =  0 ;  i  <  policyIdList . length ;  i ++ )  { 
113-  if  ( haveIdList . indexOf ( policyIdList [ i ] )  <=  - 1 )  { 
114-  addIdList . push ( policyIdList [ i ] ) 
115-  } 
116-  } 
117- 
118-  // Create role and attach policy 
119-  if  ( roleState  <=  0 )  { 
120-  try  { 
121-  const  createRoleModels  =  new  camModels . CreateRoleRequest ( ) 
122-  createRoleModels . from_json_string ( 
123-  JSON . stringify ( { 
124-  RoleName : roleName , 
125-  PolicyDocument : JSON . stringify ( { 
126-  version : '2.0' , 
127-  statement : [ 
128-  { 
129-  effect : 'allow' , 
130-  principal : { 
131-  service : 'scf.qcloud.com' 
132-  } , 
133-  action : 'sts:AssumeRole' 
134-  } 
135-  ] 
136-  } ) 
137-  } ) 
138-  ) 
139-  const  createRoleHandler  =  util . promisify ( this . camClient . CreateRole . bind ( this . camClient ) ) 
140-  await  createRoleHandler ( createRoleModels ) 
141-  }  catch  ( e )  { 
142-  this . serverless . cli . log ( 'Create role error: '  +  e ) 
100+  const  attachRolePolicyBody  =  { 
101+  AttachRoleName : roleName 
143102 } 
144-  } 
145-  if  ( addIdList . length  >  0 )  { 
146103 try  { 
147-  const  attachRolePolicyModels  =  new  camModels . AttachRolePolicyRequest ( ) 
148-  const  attachRolePolicyHandler  =  util . promisify ( 
149-  this . camClient . AttachRolePolicy . bind ( this . camClient ) 
150-  ) 
151-  const  attachRolePolicyBody  =  { 
152-  AttachRoleName : roleName 
153-  } 
154-  for  ( let  i  =  0 ;  i  <  addIdList . length ;  i ++ )  { 
155-  try  { 
156-  attachRolePolicyBody . PolicyId  =  addIdList [ i ] 
157-  attachRolePolicyModels . from_json_string ( JSON . stringify ( attachRolePolicyBody ) ) 
158-  await  attachRolePolicyHandler ( attachRolePolicyModels ) 
159-  }  catch  ( e )  { 
160-  this . context . debug ( `Attach policy id '${ attachRolePolicyBody . PolicyId }  ' error: ${ e }  ` ) 
161-  } 
162-  await  utils . sleep ( 400 ) 
163-  } 
104+  attachRolePolicyBody . PolicyId  =  policyId 
105+  attachRolePolicyModels . from_json_string ( JSON . stringify ( attachRolePolicyBody ) ) 
106+  await  attachRolePolicyHandler ( attachRolePolicyModels ) 
164107 }  catch  ( e )  { } 
165-  } 
166-  }  catch  ( e )  { 
167-  this . serverless . cli . log ( 'Check policy list error: '  +  e ) 
168-  } 
108+  await  utils . sleep ( 400 ) 
109+  }  catch  ( e )  { } 
110+  }  catch  ( e )  { } 
169111 } 
170112
171113 async  updateFunctionCode ( ns ,  funcObject )  { 
0 commit comments