Skip to content

Commit 3cda211

Browse files
authored
Merge pull request #288 from splunk/bareinit
Bareinit
2 parents c62eeb9 + cde4459 commit 3cda211

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

contentctl/actions/initialize.py

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
import shutil
33
import os
44
import pathlib
5-
6-
from pydantic import RootModel
75
from contentctl.objects.config import test
86
from contentctl.output.yml_writer import YmlWriter
97

@@ -17,26 +15,44 @@ def execute(self, config: test) -> None:
1715

1816
YmlWriter.writeYmlFile(str(config.path/'contentctl.yml'), config.model_dump())
1917

18+
2019
#Create the following empty directories:
21-
for emptyDir in ['lookups', 'baselines', 'docs', 'reporting', 'investigations']:
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']:
2223
#Throw an error if this directory already exists
23-
(config.path/emptyDir).mkdir(exist_ok=False)
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:
29+
#copy the contents of all template directories
30+
for templateDir, targetDir in [
31+
('../templates/detections/', 'detections'),
32+
('../templates/data_sources/', 'data_sources'),
33+
('../templates/macros/', 'macros'),
34+
('../templates/stories/', 'stories'),
35+
]:
36+
source_directory = pathlib.Path(os.path.dirname(__file__))/templateDir
37+
target_directory = config.path/targetDir
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)
2442

25-
26-
#copy the contents of all template directories
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.
2747
for templateDir, targetDir in [
2848
('../templates/app_template/', 'app_template'),
29-
('../templates/deployments/', 'deployments'),
30-
('../templates/detections/', 'detections'),
31-
('../templates/data_sources/', 'data_sources'),
32-
('../templates/macros/','macros'),
33-
('../templates/stories/', 'stories'),
49+
('../templates/deployments/', 'deployments')
3450
]:
3551
source_directory = pathlib.Path(os.path.dirname(__file__))/templateDir
3652
target_directory = config.path/targetDir
3753
#Throw an exception if the target exists
3854
shutil.copytree(source_directory, target_directory, dirs_exist_ok=False)
39-
55+
4056
# Create a README.md file. Note that this is the README.md for the repository, not the
4157
# one which will actually be packaged into the app. That is located in the app_template folder.
4258
shutil.copyfile(pathlib.Path(os.path.dirname(__file__))/'../templates/README.md','README.md')

contentctl/objects/config.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,13 @@ def serialize_path(path: DirectoryPath)->str:
171171
return str(path)
172172

173173
class init(Config_Base):
174-
pass
174+
model_config = ConfigDict(use_enum_values=True,validate_default=True, arbitrary_types_allowed=True)
175+
bare: bool = Field(default=False, description="contentctl normally provides some some example content "
176+
"(macros, stories, data_sources, and/or analytic stories). This option disables "
177+
"initialization with that additional contnet. Note that even if --bare is used, it "
178+
"init will still create the directory structure of the app, "
179+
"include the app_template directory with default content, and content in "
180+
"the deployment/ directory (since it is not yet easily customizable).")
175181

176182

177183
# TODO (#266): disable the use_enum_values configuration

0 commit comments

Comments
 (0)