2
2
import shutil
3
3
import os
4
4
import pathlib
5
-
6
- from pydantic import RootModel
7
5
from contentctl .objects .config import test
8
6
from contentctl .output .yml_writer import YmlWriter
9
7
@@ -17,42 +15,47 @@ def execute(self, config: test) -> None:
17
15
18
16
YmlWriter .writeYmlFile (str (config .path / 'contentctl.yml' ), config .model_dump ())
19
17
20
- if config .bare :
21
- #Create the following empty directories:
22
- for emptyDir in ['lookups' , 'baselines' , 'docs' , 'reporting' , 'investigations' , 'deployments' ,
23
- 'detections/application' , 'detections/cloud' , 'detections/endpoint' ,
24
- 'detections/network' , 'detections/web' , 'data_sources' , 'macros' , 'stories' ]:
25
- #Throw an error if this directory already exists
26
- (config .path / emptyDir ).mkdir (exist_ok = False , parents = True )
27
-
28
- # Copy the contents of the app_template directory
29
- source_directory = pathlib .Path (os .path .dirname (__file__ ))/ '../templates/app_template/'
30
- target_directory = config .path / 'app_template'
31
- shutil .copytree (source_directory , target_directory , dirs_exist_ok = False )
32
18
33
- else :
34
- #Create the following empty directories:
35
- for emptyDir in ['lookups' , 'baselines' , 'docs' , 'reporting' , 'investigations' ]:
36
- #Throw an error if this directory already exists
37
- (config .path / emptyDir ).mkdir (exist_ok = False )
38
-
19
+ #Create the following empty directories:
20
+ for emptyDir in ['lookups' , 'baselines' , 'data_sources' , 'docs' , 'reporting' , 'investigations' ,
21
+ 'detections/application' , 'detections/cloud' , 'detections/endpoint' ,
22
+ 'detections/network' , 'detections/web' , 'macros' , 'stories' ]:
23
+ #Throw an error if this directory already exists
24
+ (config .path / emptyDir ).mkdir (exist_ok = False , parents = True )
25
+
26
+ # If this is not a bare config, then populate
27
+ # a small amount of content into the directories
28
+ if not config .bare :
39
29
#copy the contents of all template directories
40
30
for templateDir , targetDir in [
41
- ('../templates/app_template/' , 'app_template' ),
42
- ('../templates/deployments/' , 'deployments' ),
43
31
('../templates/detections/' , 'detections' ),
44
32
('../templates/data_sources/' , 'data_sources' ),
45
- ('../templates/macros/' ,'macros' ),
33
+ ('../templates/macros/' , 'macros' ),
46
34
('../templates/stories/' , 'stories' ),
47
35
]:
48
36
source_directory = pathlib .Path (os .path .dirname (__file__ ))/ templateDir
49
37
target_directory = config .path / targetDir
50
- #Throw an exception if the target exists
51
- shutil .copytree (source_directory , target_directory , dirs_exist_ok = False )
38
+
39
+ # Do not throw an exception if the directory exists. In fact, it was
40
+ # created above when the structure of the app was created.
41
+ shutil .copytree (source_directory , target_directory , dirs_exist_ok = True )
52
42
53
- # Create a README.md file. Note that this is the README.md for the repository, not the
54
- # one which will actually be packaged into the app. That is located in the app_template folder.
55
- shutil .copyfile (pathlib .Path (os .path .dirname (__file__ ))/ '../templates/README.md' ,'README.md' )
43
+ # The contents of app_template must ALWAYS be copied because it contains
44
+ # several special files.
45
+ # For now, we also copy the deployments because the ability to create custom
46
+ # deployment files is limited with built-in functionality.
47
+ for templateDir , targetDir in [
48
+ ('../templates/app_template/' , 'app_template' ),
49
+ ('../templates/deployments/' , 'deployments' )
50
+ ]:
51
+ source_directory = pathlib .Path (os .path .dirname (__file__ ))/ templateDir
52
+ target_directory = config .path / targetDir
53
+ #Throw an exception if the target exists
54
+ shutil .copytree (source_directory , target_directory , dirs_exist_ok = False )
55
+
56
+ # Create a README.md file. Note that this is the README.md for the repository, not the
57
+ # one which will actually be packaged into the app. That is located in the app_template folder.
58
+ shutil .copyfile (pathlib .Path (os .path .dirname (__file__ ))/ '../templates/README.md' ,'README.md' )
56
59
57
60
58
61
print (f"The app '{ config .app .title } ' has been initialized. "
0 commit comments