Skip to content

Commit 06ae7fc

Browse files
committed
Merge branch 'dev' of github.com:WeBankPartners/wecube-plugins-terraform into dev
2 parents 002d065 + 9496adf commit 06ae7fc

File tree

15 files changed

+212
-111
lines changed

15 files changed

+212
-111
lines changed

apps/api/apibase_backend.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,30 @@ def fetech_property(instance_define, define_columns):
4444
return res
4545

4646

47+
def fetch_columns(datas, columns):
48+
if len(columns) == 0:
49+
c_data = []
50+
for data in datas:
51+
if isinstance(data, list):
52+
c_data += data
53+
else:
54+
c_data.append(data)
55+
return c_data
56+
column = columns.pop(0)
57+
if isinstance(datas, list):
58+
x_data = []
59+
for data in datas:
60+
x_data.append(data.get(column))
61+
datas = x_data
62+
return fetch_columns(datas, columns)
63+
elif isinstance(datas, dict):
64+
datas = datas.get(column)
65+
return fetch_columns(datas, columns)
66+
else:
67+
logger.info("data is not dict/list, no columns %s filter, skip.." % column)
68+
return datas
69+
70+
4771
class ApiBackendBase(TerraformResource):
4872
def __init__(self):
4973
super(ApiBackendBase, self).__init__()
@@ -328,7 +352,8 @@ def source_run_import(self, rid, provider, region, label_name,
328352
# if workpath:
329353
# self.rollback_workspace(workpath)
330354
logger.info(traceback.format_exc())
331-
logger.info("resource import failed. continue ... ")
355+
# logger.info("resource import failed. continue ... ")
356+
raise e
332357

333358
logger.info("state file not recovery, continue apply resource ... ")
334359
return True
@@ -556,17 +581,19 @@ def read_query_result_controller(self, provider, result, data_source_argument):
556581

557582
logger.info(format_json_dumps(result))
558583
try:
584+
instance_define = []
559585
_data = result.get("resources")[0]
560586
_instances = _data.get("instances")[0]
561587
_attributes = _instances.get("attributes")
562588

563589
outlines = data_source_argument.split(".")
564-
for outline in outlines:
565-
if outline:
566-
_attributes = _attributes.get(outline)
567-
568-
instance_list = _attributes
569-
instance_define = instance_list
590+
# for outline in outlines:
591+
# if outline:
592+
# _attributes = _attributes.get(outline)
593+
#
594+
# instance_list = _attributes
595+
# instance_define = instance_list
596+
instance_define = fetch_columns(datas=_attributes, columns=outlines)
570597
except:
571598
logger.info(traceback.format_exc())
572599
raise ValueError("query remote source failed, result read faild")
@@ -655,6 +682,7 @@ def run_query(self, rid, region, zone,
655682
data=out_data)
656683

657684
x_json = self.reverse_asset_object(provider=provider_object["name"], data=x_json)
685+
# x_json.update(query_data)
658686

659687
if x_json.get("instance_type"):
660688
instance_type, resource_info = InstanceTypeObject().convert_asset(provider=provider_object["name"],

apps/api/network/eip.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def __init__(self):
4646
self.resource_keys_config = None
4747

4848

49-
class EipBackendApi(Common, ApiBase):
49+
class EipBackendApi(Common, ApiBackendBase):
5050
def __init__(self):
5151
super(EipBackendApi, self).__init__()
5252
self.resource_name = "eip"

apps/api/network/nat_gateway.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ def generate_create_data(self, zone, create_data, **kwargs):
5252
"subnet_id": create_data.get("subnet_id")}
5353

5454
create_data = {"eip": create_data.get("eip"),
55-
"name": create_data.get("name")}
55+
"name": create_data.get("name"),
56+
"bandwidth": create_data.get("bandwidth")}
5657

5758
return create_data, r_create_data
5859

apps/api/network/route_entry.py

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
from lib.logs import logger
77
from lib.json_helper import format_json_dumps
88
from apps.common.convert_keys import define_relations_key
9-
from apps.api.apibase import ApiBase
10-
from apps.api.configer.provider import ProviderApi
119
from apps.background.resource.resource_base import CrsObject
10+
from apps.api.apibase import ApiBase
11+
from apps.api.conductor.valueReverse import ValueResetConductor
1212
from apps.api.apibase_backend import ApiBackendBase
1313

1414

@@ -25,29 +25,33 @@ def before_keys_checks(self, provider, create_data, is_update=None):
2525

2626
vpc_id = create_data.get("vpc_id")
2727
route_table_id = create_data.get("route_table_id")
28+
next_hub = create_data.get("next_hub")
2829

2930
self.resource_info(provider)
3031
resource_property = self.resource_keys_config["resource_property"]
3132
_vpc_status = define_relations_key("vpc_id", vpc_id, resource_property.get("vpc_id"))
3233
_rt_status = define_relations_key("route_table_id", route_table_id, resource_property.get("route_table_id"))
34+
_ne_status = define_relations_key("next_hub", next_hub, resource_property.get("next_hub"))
3335

3436
ext_info = {}
3537
if vpc_id and (not _vpc_status):
3638
ext_info["vpc_id"] = CrsObject("vpc").object_resource_id(vpc_id)
3739
if route_table_id and (not _rt_status):
3840
ext_info["route_table_id"] = CrsObject(self.owner_resource).object_resource_id(route_table_id)
41+
if next_hub and (not _ne_status):
42+
ext_info["next_hub"] = CrsObject(self.owner_resource).object_resource_assetid(next_hub)
3943

4044
logger.info("before_keys_checks add info: %s" % (format_json_dumps(ext_info)))
4145
return ext_info
4246

4347
def generate_create_data(self, zone, create_data, **kwargs):
4448
r_create_data = {"vpc_id": create_data.get("vpc_id"),
49+
"next_hub": create_data.get("next_hub"),
4550
"route_table_id": create_data.get("route_table_id")}
4651

4752
create_data = {"name": create_data.get("name"),
4853
"destination": create_data.get("destination"),
4954
"next_type": create_data.get("next_type"),
50-
"next_hub": create_data.get("next_hub")
5155
}
5256

5357
return create_data, r_create_data
@@ -77,12 +81,62 @@ def __init__(self):
7781
self.resource_keys_config = None
7882

7983
def before_source_asset(self, provider, query_data):
80-
for key in ["route_table_id", "vpc_id"]:
84+
for key in ["route_table_id", "vpc_id", "next_hub"]:
8185
if query_data.get(key):
8286
query_data[key] = CrsObject().object_asset_id(query_data.get(key))
8387

8488
return query_data
8589

8690
def reverse_asset_ids(self):
87-
return ['vpc_id', "route_table_id"]
91+
return ['vpc_id', "route_table_id", "next_hub"]
92+
93+
def run_query(self, rid, region, zone,
94+
provider_object, provider_info,
95+
query_data, **kwargs):
96+
'''
97+
98+
:param rid:
99+
:param region:
100+
:param zone:
101+
:param owner_id:
102+
:param relation_id:
103+
:param create_data:
104+
:param extend_info:
105+
:param kwargs:
106+
:return:
107+
'''
108+
109+
# extend_info = extend_info or {}
110+
label_name = self.resource_name + "_q_" + rid
111+
112+
define_json, resource_keys_config = self.source_filter_controller(provider_name=provider_object["name"],
113+
label_name=label_name,
114+
query_data=query_data
115+
)
116+
117+
result = self._run_create_and_read_result(rid, provider=provider_object["name"],
118+
region=region, provider_info=provider_info,
119+
define_json=define_json)
120+
121+
data_source_argument = resource_keys_config.get("data_source_argument")
122+
output_json = self.read_query_result_controller(provider_object["name"], result,
123+
data_source_argument)
124+
125+
result_list = []
126+
for out_data in output_json:
127+
count = 0
128+
for _, x_value in out_data.items():
129+
if not x_value:
130+
count += 1
131+
if count == len(out_data):
132+
logger.info("out data columns is null, skip ...")
133+
continue
134+
135+
x_json = ValueResetConductor().reset_values(provider=provider_object["name"],
136+
resource_name=self.resource_name,
137+
data=out_data)
138+
139+
x_json = self.reverse_asset_object(provider=provider_object["name"], data=x_json)
140+
result_list.append(x_json)
88141

142+
return result_list

apps/background/resource/resource_base.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@ def object_resource_id(self, rid):
184184
raise local_exceptions.ValueValidateError(self.resource_name, "资源 %s 不存在" % rid)
185185
return data["resource_id"]
186186

187+
def object_resource_assetid(self, rid):
188+
data = self.show(rid)
189+
if not data:
190+
return rid
191+
return data["resource_id"]
192+
187193
def object_asset_id(self, rid):
188194
data = self.show(rid)
189195
if data:

apps/common/convert_keys.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99

1010
def validate_convert_key(defines):
11+
x_res = {}
1112
for key, define in defines.items():
1213
if (not isinstance(define, (basestring, dict))) or isinstance(define, list):
1314
raise ValueError("错误的定义 合法值为 string "
@@ -18,8 +19,14 @@ def validate_convert_key(defines):
1819
if isinstance(define, dict):
1920
if define.get("type", "string") not in ["string", "json", "int", "float", "list", "bool"]:
2021
raise ValueError("未知的类型约束 %s" % define.get("type"))
21-
if define.get("allow_null", 1) not in [0, 1]:
22+
if define.get("allow_null", 1) not in [0, 1, '0', '1']:
2223
raise ValueError("allow_null 合法值为 0/1")
24+
else:
25+
define["allow_null"] = int(define.get("allow_null", 1))
26+
27+
x_res[key] = define
28+
29+
return x_res
2330

2431

2532
def validate_convert_value(defines):
@@ -62,7 +69,10 @@ def validate_type(value, type):
6269
try:
6370
if isinstance(value, basestring):
6471
if value.startswith("["):
65-
value = json.loads(value)
72+
try:
73+
value = json.loads(value)
74+
except:
75+
value = eval(value)
6676
elif "," in value:
6777
value = value.split(",")
6878
elif ";" in value:

apps/controller/configer/defines.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@
226226
"method": "POST",
227227
"notnull": ['name', 'provider', 'vpc_id', 'region'],
228228
"inputParameters": ['id', 'name', 'secret', 'provider', 'vpc_id', 'subnet_id', 'eip', 'zone', 'region',
229-
'asset_id', 'resource_id', 'extend_info'],
229+
'asset_id', 'resource_id', 'extend_info', 'bandwidth'],
230230
"outputParameters": ['errorMessage', 'errorCode', 'ipaddress', 'id', 'resource_id']
231231
},
232232
"destroy": {
@@ -242,7 +242,7 @@
242242
"notnull": ["region", "provider"],
243243
"inputParameters": ['region', 'secret', 'provider', 'resource_id', 'name', 'type', 'tag', 'vpc_id'],
244244
"outputParameters": ['region', 'secret', 'provider', 'resource_id', 'errorMessage', 'errorCode', 'name',
245-
'vpc_id', 'eip', 'ipaddress']
245+
'vpc_id', 'eip', 'ipaddress', 'bandwidth']
246246
}
247247
},
248248
"eip": {
@@ -365,7 +365,8 @@
365365
"path": "/terraform/v1/storage/backend/disk/source",
366366
"method": "POST",
367367
"notnull": ["region", "provider"],
368-
"inputParameters": ['region', 'secret', 'provider', 'resource_id', 'name', 'instance_id', 'type', 'tag'],
368+
"inputParameters": ['region', 'secret', 'provider', 'resource_id',
369+
'name', 'instance_id', 'type', 'tag', 'zone'],
369370
"outputParameters": ['region', 'secret', 'provider', 'resource_id', 'errorMessage', 'errorCode', 'name',
370371
'type', 'size', 'zone', "charge_type"]
371372
}

apps/controller/configer/model_args.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"name",
4747
"vpc_id",
4848
"subnet_id",
49-
"eip"
49+
"eip",
50+
"bandwidth"
5051
],
5152
"peer_connection": [
5253
"name",
@@ -516,7 +517,8 @@
516517
"name",
517518
"type",
518519
"tag",
519-
"vpc_id"
520+
"vpc_id",
521+
"bandwidth"
520522
],
521523
"peer_connection": [
522524
"resource_id",
@@ -558,7 +560,8 @@
558560
"name",
559561
"instance_id",
560562
"type",
561-
"tag"
563+
"tag",
564+
"zone"
562565
],
563566
"disk_attach": [
564567
"resource_id",

apps/controller/configer/provider_controller.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def create(self, request, data, **kwargs):
6666
name = data.get("name")
6767
extend_info = validation.validate_dict("extend_info", data.get("extend_info")) or {}
6868
provider_property = validation.validate_dict("provider_property", data.get("provider_property")) or {}
69-
validate_convert_key(provider_property)
69+
provider_property = validate_convert_key(provider_property)
7070
validate_convert_value(extend_info)
7171
property_necessary(resource_name="provider",
7272
resource_property=provider_property)
@@ -115,7 +115,7 @@ def update(self, request, data, **kwargs):
115115

116116
if data.get("provider_property") is not None:
117117
provider_property = validation.validate_dict("provider_property", data.get("provider_property")) or {}
118-
validate_convert_key(provider_property)
118+
provider_property = validate_convert_key(provider_property)
119119
property_necessary(resource_name="provider",
120120
resource_property=provider_property)
121121
data["provider_property"] = json.dumps(provider_property)

apps/controller/configer/resource_controller.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ def create(self, request, data, **kwargs):
8787
# if not isinstance(value, basestring):
8888
# raise ValueError("data_source_output 为key-value定义")
8989

90-
validate_convert_key(resource_property)
90+
resource_property = validate_convert_key(resource_property)
9191
validate_convert_value(extend_info)
9292
validate_convert_value(resource_output)
93-
validate_convert_key(data_source_output)
93+
data_source_output = validate_convert_key(data_source_output)
9494
property_necessary(resource_name=data["resource_name"],
9595
resource_property=resource_property)
9696

@@ -158,7 +158,7 @@ def update(self, request, data, **kwargs):
158158

159159
if data.get("resource_property") is not None:
160160
resource_property = validation.validate_dict("resource_property", data.get("resource_property")) or {}
161-
validate_convert_key(resource_property)
161+
resource_property = validate_convert_key(resource_property)
162162
property_necessary(resource_name=data["resource_name"],
163163
resource_property=resource_property)
164164

@@ -181,6 +181,7 @@ def update(self, request, data, **kwargs):
181181

182182
if data.get("data_source_output") is not None:
183183
data_source_output = validation.validate_dict("data_source_output", data.get("data_source_output"))
184+
data_source_output = validate_convert_key(data_source_output)
184185

185186
property_necessary(resource_name=data["resource_name"],
186187
resource_property=data_source_output)

0 commit comments

Comments
 (0)