in rdk/rdk.py [0:0]
def create(self):
#Parse the command-line arguments relevant for creating a Config Rule.
self.__parse_rule_args(True)
print ("Running create!")
if not self.args.source_identifier:
if not self.args.runtime:
print("Runtime is required for 'create' command.")
return 1
extension_mapping = {
'java8': '.java',
'python3.6': '.py',
'python3.6-managed': '.py',
'python3.6-lib': '.py',
'python3.7': '.py',
'python3.7-lib': '.py',
'python3.8': '.py',
'python3.8-lib': '.py',
'python3.9': '.py',
'python3.9-lib': '.py',
'nodejs4.3': '.js',
'dotnetcore1.0': 'cs',
'dotnetcore2.0': 'cs',
}
if self.args.runtime not in extension_mapping:
print ("rdk does not support that runtime yet.")
#if not self.args.maximum_frequency:
# self.args.maximum_frequency = "TwentyFour_Hours"
# print("Defaulting to TwentyFour_Hours Maximum Frequency.")
#create rule directory.
rule_path = os.path.join(os.getcwd(), rules_dir, self.args.rulename)
if os.path.exists(rule_path):
print("Local Rule directory already exists.")
return 1
try:
os.makedirs(os.path.join(os.getcwd(), rules_dir, self.args.rulename))
if not self.args.source_identifier:
#copy rule template into rule directory
if self.args.runtime == 'java8':
self.__create_java_rule()
elif self.args.runtime in ['dotnetcore1.0', 'dotnetcore2.0']:
self.__create_dotnet_rule()
else:
src = os.path.join(path.dirname(__file__), 'template', 'runtime', self.args.runtime, rule_handler + extension_mapping[self.args.runtime])
dst = os.path.join(os.getcwd(), rules_dir, self.args.rulename, self.args.rulename + extension_mapping[self.args.runtime])
shutil.copyfile(src, dst)
f = fileinput.input(files=dst, inplace=True)
for line in f:
if self.args.runtime in ['python3.6-lib', 'python3.7-lib', 'python3.8-lib', 'python3.9-lib']:
if self.args.resource_types:
applicable_resource_list = ''
for resource_type in self.args.resource_types.split(','):
applicable_resource_list += "'" + resource_type + "', "
print(line.replace('<%RuleName%>', self.args.rulename).replace('<%ApplicableResources1%>', '\nAPPLICABLE_RESOURCES = [' + applicable_resource_list[:-2] + ']\n').replace('<%ApplicableResources2%>', ', APPLICABLE_RESOURCES'), end='')
else:
print(line.replace('<%RuleName%>', self.args.rulename).replace('<%ApplicableResources1%>', '').replace('<%ApplicableResources2%>', ''), end='')
else:
print(line.replace('<%RuleName%>', self.args.rulename), end='')
f.close()
src = os.path.join(path.dirname(__file__), 'template', 'runtime', self.args.runtime, 'rule_test' + extension_mapping[self.args.runtime])
if os.path.exists(src):
dst = os.path.join(os.getcwd(), rules_dir, self.args.rulename, self.args.rulename+"_test"+extension_mapping[self.args.runtime])
shutil.copyfile(src, dst)
f = fileinput.input(files=dst, inplace=True)
for line in f:
print(line.replace('<%RuleName%>', self.args.rulename), end='')
f.close()
src = os.path.join(path.dirname(__file__), 'template', 'runtime', self.args.runtime, util_filename + extension_mapping[self.args.runtime])
if os.path.exists(src):
dst = os.path.join(os.getcwd(), rules_dir, self.args.rulename, util_filename + extension_mapping[self.args.runtime])
shutil.copyfile(src, dst)
#Write the parameters to a file in the rule directory.
self.__populate_params()
print ("Local Rule files created.")
except Exception as e:
print("Error during create: " + str(e))
print("Rolling back...")
shutil.rmtree(rule_path)
raise e
return 0