mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2025-12-06 09:12:45 +01:00
Merge pull request #15219 from Security-Onion-Solutions/jertel/wip
add support to so-yaml for using yaml file content for values
This commit is contained in:
2
.github/workflows/pythontest.yml
vendored
2
.github/workflows/pythontest.yml
vendored
@@ -4,7 +4,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- "salt/sensoroni/files/analyzers/**"
|
- "salt/sensoroni/files/analyzers/**"
|
||||||
- "salt/manager/tools/sbin"
|
- "salt/manager/tools/sbin/**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ def showUsage(args):
|
|||||||
print(' Where:', file=sys.stderr)
|
print(' Where:', file=sys.stderr)
|
||||||
print(' YAML_FILE - Path to the file that will be modified. Ex: /opt/so/conf/service/conf.yaml', file=sys.stderr)
|
print(' YAML_FILE - Path to the file that will be modified. Ex: /opt/so/conf/service/conf.yaml', file=sys.stderr)
|
||||||
print(' KEY - YAML key, does not support \' or " characters at this time. Ex: level1.level2', file=sys.stderr)
|
print(' KEY - YAML key, does not support \' or " characters at this time. Ex: level1.level2', file=sys.stderr)
|
||||||
print(' VALUE - Value to set for a given key', file=sys.stderr)
|
print(' VALUE - Value to set for a given key. Can be a literal value or file:<path> to load from a YAML file.', file=sys.stderr)
|
||||||
print(' LISTITEM - Item to append to a given key\'s list value', file=sys.stderr)
|
print(' LISTITEM - Item to append to a given key\'s list value. Can be a literal value or file:<path> to load from a YAML file.', file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
@@ -58,7 +58,13 @@ def appendItem(content, key, listItem):
|
|||||||
|
|
||||||
|
|
||||||
def convertType(value):
|
def convertType(value):
|
||||||
if isinstance(value, str) and len(value) > 0 and (not value.startswith("0") or len(value) == 1):
|
if isinstance(value, str) and value.startswith("file:"):
|
||||||
|
path = value[5:] # Remove "file:" prefix
|
||||||
|
if not os.path.exists(path):
|
||||||
|
print(f"File '{path}' does not exist.", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
return loadYaml(path)
|
||||||
|
elif isinstance(value, str) and len(value) > 0 and (not value.startswith("0") or len(value) == 1):
|
||||||
if "." in value:
|
if "." in value:
|
||||||
try:
|
try:
|
||||||
value = float(value)
|
value = float(value)
|
||||||
|
|||||||
@@ -361,6 +361,29 @@ class TestRemove(unittest.TestCase):
|
|||||||
self.assertEqual(soyaml.convertType("FALSE"), False)
|
self.assertEqual(soyaml.convertType("FALSE"), False)
|
||||||
self.assertEqual(soyaml.convertType(""), "")
|
self.assertEqual(soyaml.convertType(""), "")
|
||||||
|
|
||||||
|
def test_convert_file(self):
|
||||||
|
import tempfile
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Create a temporary YAML file
|
||||||
|
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f:
|
||||||
|
f.write("test:\n - name: hi\n color: blue\n")
|
||||||
|
temp_file = f.name
|
||||||
|
|
||||||
|
try:
|
||||||
|
result = soyaml.convertType(f"file:{temp_file}")
|
||||||
|
expected = {"test": [{"name": "hi", "color": "blue"}]}
|
||||||
|
self.assertEqual(result, expected)
|
||||||
|
finally:
|
||||||
|
os.unlink(temp_file)
|
||||||
|
|
||||||
|
def test_convert_file_nonexistent(self):
|
||||||
|
with self.assertRaises(SystemExit) as cm:
|
||||||
|
with patch('sys.stderr', new=StringIO()) as mock_stderr:
|
||||||
|
soyaml.convertType("file:/nonexistent/file.yaml")
|
||||||
|
self.assertEqual(cm.exception.code, 1)
|
||||||
|
self.assertIn("File '/nonexistent/file.yaml' does not exist.", mock_stderr.getvalue())
|
||||||
|
|
||||||
def test_get_int(self):
|
def test_get_int(self):
|
||||||
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
||||||
filename = "/tmp/so-yaml_test-get.yaml"
|
filename = "/tmp/so-yaml_test-get.yaml"
|
||||||
|
|||||||
Reference in New Issue
Block a user