Skip to content

Commit 3d500da

Browse files
authored
Merge pull request #68027 from dwoz/merge/3007.x/3006.x-2025-05-16
Merge forward 3006.x into 3007.x
2 parents dd82713 + f2b1f1f commit 3d500da

File tree

8 files changed

+80
-44
lines changed

8 files changed

+80
-44
lines changed

.github/actions/setup-relenv/action.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ runs:
4848
env:
4949
RELENV_FETCH_VERSION: "${{ inputs.version }}"
5050
run: |
51+
python3 -m pip install relenv[toolchain]
5152
python3 -m relenv toolchain fetch --arch=${{ inputs.arch }}
5253
5354
- name: Fetch Native Python Build

changelog/65514.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make sure the comment field is populated when test=True for the reg state

changelog/67903.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed if arguments are passed to the key delete all, -D, it will throw an error

doc/conf.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,6 @@
352352
]
353353

354354
man_pages = [
355-
("contents", "salt", "Salt Documentation", authors, 7),
356355
("ref/cli/salt", "salt", "salt", authors, 1),
357356
("ref/cli/salt-master", "salt-master", "salt-master Documentation", authors, 1),
358357
("ref/cli/salt-minion", "salt-minion", "salt-minion Documentation", authors, 1),

pkg/debian/rules

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ override_dh_auto_build:
2626
export PY=$$(build/onedir/venv/bin/python3 -c 'import sys; sys.stdout.write("{}.{}".format(*sys.version_info)); sys.stdout.flush()') \
2727
&& build/onedir/venv/bin/python3 -m pip install -r requirements/static/ci/py$${PY}/tools.txt
2828
build/onedir/venv/bin/relenv fetch --python=$${SALT_PYTHON_VERSION}
29+
build/onedir/venv/bin/pip3 install relenv[toolchain]
2930
build/onedir/venv/bin/relenv toolchain fetch
3031
build/onedir/venv/bin/tools pkg build onedir-dependencies --arch $${SALT_PACKAGE_ARCH} --relenv-version=$${SALT_RELENV_VERSION} --python-version $${SALT_PYTHON_VERSION} --package-name build/onedir/salt --platform linux
3132

pkg/rpm/salt.spec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ cd $RPM_BUILD_DIR
179179
export PY=$(build/venv/bin/python3 -c 'import sys; sys.stdout.write("{}.{}".format(*sys.version_info)); sys.stdout.flush()')
180180
build/venv/bin/python3 -m pip install -r %{_salt_src}/requirements/static/ci/py${PY}/tools.txt
181181
build/venv/bin/relenv fetch --python=${SALT_PYTHON_VERSION}
182+
build/venv/bin/pip3 install relenv[toolchain]
182183
build/venv/bin/relenv toolchain fetch
183184
cd %{_salt_src}
184185
$RPM_BUILD_DIR/build/venv/bin/tools pkg build onedir-dependencies --arch ${SALT_PACKAGE_ARCH} --relenv-version=${SALT_RELENV_VERSION} --python-version ${SALT_PYTHON_VERSION} --package-name $RPM_BUILD_DIR/build/salt --platform linux

salt/states/reg.py

Lines changed: 21 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@
7272
import logging
7373

7474
import salt.utils.stringutils
75+
import salt.utils.win_dacl as dacl
76+
import salt.utils.win_reg as reg
7577

7678
log = logging.getLogger(__name__)
7779

@@ -80,31 +82,6 @@ def __virtual__():
8082
"""
8183
Load this state if the reg module exists
8284
"""
83-
if "reg.read_value" not in __utils__:
84-
return (
85-
False,
86-
"reg state module failed to load: missing util function: reg.read_value",
87-
)
88-
89-
if "reg.set_value" not in __utils__:
90-
return (
91-
False,
92-
"reg state module failed to load: missing util function: reg.set_value",
93-
)
94-
95-
if "reg.delete_value" not in __utils__:
96-
return (
97-
False,
98-
"reg state module failed to load: missing util function: reg.delete_value",
99-
)
100-
101-
if "reg.delete_key_recursive" not in __utils__:
102-
return (
103-
False,
104-
"reg state module failed to load: "
105-
"missing util function: reg.delete_key_recursive",
106-
)
107-
10885
return "reg"
10986

11087

@@ -396,12 +373,12 @@ def present(
396373
hive, key = _parse_key(name)
397374

398375
# Determine what to do
399-
reg_current = __utils__["reg.read_value"](
376+
reg_current = reg.read_value(
400377
hive=hive, key=key, vname=vname, use_32bit_registry=use_32bit_registry
401378
)
402379

403380
# Cast the vdata according to the vtype
404-
vdata_decoded = __utils__["reg.cast_vdata"](vdata=vdata, vtype=vtype)
381+
vdata_decoded = reg.cast_vdata(vdata=vdata, vtype=vtype)
405382

406383
# Check if the key already exists
407384
# If so, check perms
@@ -411,7 +388,7 @@ def present(
411388
salt.utils.stringutils.to_unicode(vname, "utf-8") if vname else "(Default)",
412389
salt.utils.stringutils.to_unicode(name, "utf-8"),
413390
)
414-
return __utils__["dacl.check_perms"](
391+
return dacl.check_perms(
415392
obj_name="\\".join([hive, key]),
416393
obj_type="registry32" if use_32bit_registry else "registry",
417394
ret=ret,
@@ -437,10 +414,11 @@ def present(
437414
if __opts__["test"]:
438415
ret["result"] = None
439416
ret["changes"] = {"reg": {"Will add": add_change}}
417+
ret["comment"] = rf"Will add {vname} to {hive}\{key}"
440418
return ret
441419

442420
# Configure the value
443-
ret["result"] = __utils__["reg.set_value"](
421+
ret["result"] = reg.set_value(
444422
hive=hive,
445423
key=key,
446424
vname=vname,
@@ -457,7 +435,7 @@ def present(
457435
ret["comment"] = rf"Added {vname} to {hive}\{key}"
458436

459437
if ret["result"]:
460-
ret = __utils__["dacl.check_perms"](
438+
ret = dacl.check_perms(
461439
obj_name="\\".join([hive, key]),
462440
obj_type="registry32" if use_32bit_registry else "registry",
463441
ret=ret,
@@ -517,7 +495,7 @@ def absent(name, vname=None, use_32bit_registry=False):
517495
hive, key = _parse_key(name)
518496

519497
# Determine what to do
520-
reg_check = __utils__["reg.read_value"](
498+
reg_check = reg.read_value(
521499
hive=hive, key=key, vname=vname, use_32bit_registry=use_32bit_registry
522500
)
523501
if not reg_check["success"] or reg_check["vdata"] == "(value not set)":
@@ -533,10 +511,11 @@ def absent(name, vname=None, use_32bit_registry=False):
533511
if __opts__["test"]:
534512
ret["result"] = None
535513
ret["changes"] = {"reg": {"Will remove": remove_change}}
514+
ret["comment"] = rf"Will remove {vname} to {hive}\{key}"
536515
return ret
537516

538517
# Delete the value
539-
ret["result"] = __utils__["reg.delete_value"](
518+
ret["result"] = reg.delete_value(
540519
hive=hive, key=key, vname=vname, use_32bit_registry=use_32bit_registry
541520
)
542521
if not ret["result"]:
@@ -595,26 +574,27 @@ def key_absent(name, use_32bit_registry=False):
595574
hive, key = _parse_key(name)
596575

597576
# Determine what to do
598-
if not __utils__["reg.read_value"](
599-
hive=hive, key=key, use_32bit_registry=use_32bit_registry
600-
)["success"]:
577+
if not reg.read_value(hive=hive, key=key, use_32bit_registry=use_32bit_registry)[
578+
"success"
579+
]:
601580
ret["comment"] = f"{name} is already absent"
602581
return ret
603582

604583
ret["changes"] = {"reg": {"Removed": {"Key": rf"{hive}\{key}"}}}
584+
ret["comment"] = rf"Removed {hive}\{key}"
605585

606586
# Check for test option
607587
if __opts__["test"]:
608588
ret["result"] = None
589+
ret["changes"] = {"reg": {"Will remove": {"Key": rf"{hive}\{key}"}}}
590+
ret["comment"] = rf"Will remove {hive}\{key}"
609591
return ret
610592

611593
# Delete the value
612-
__utils__["reg.delete_key_recursive"](
613-
hive=hive, key=key, use_32bit_registry=use_32bit_registry
614-
)
615-
if __utils__["reg.read_value"](
616-
hive=hive, key=key, use_32bit_registry=use_32bit_registry
617-
)["success"]:
594+
reg.delete_key_recursive(hive=hive, key=key, use_32bit_registry=use_32bit_registry)
595+
if reg.read_value(hive=hive, key=key, use_32bit_registry=use_32bit_registry)[
596+
"success"
597+
]:
618598
ret["result"] = False
619599
ret["changes"] = {}
620600
ret["comment"] = f"Failed to remove registry key {name}"

tests/pytests/functional/states/test_reg.py

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ def test_present_string_dword_existing(reg_vars, clean):
281281

282282
def test_present_test_true(reg_vars, clean):
283283
expected = {
284-
"comment": "",
284+
"comment": f"Will add {reg_vars.vname} to {reg_vars.name}",
285285
"changes": {
286286
"reg": {
287287
"Will add": {
@@ -362,7 +362,7 @@ def test_absent(reg_vars, reset):
362362

363363
def test_absent_test_true(reg_vars, reset):
364364
expected = {
365-
"comment": "",
365+
"comment": f"Will remove {reg_vars.vname} to {reg_vars.name}",
366366
"changes": {
367367
"reg": {"Will remove": {"Entry": reg_vars.vname, "Key": reg_vars.name}}
368368
},
@@ -400,3 +400,55 @@ def test_absent_already_absent_test_true(reg_vars, clean):
400400
with patch.dict(reg.__opts__, {"test": True}):
401401
ret = reg.absent(reg_vars.name, reg_vars.vname)
402402
assert ret == expected
403+
404+
405+
def test_key_absent(reg_vars, reset):
406+
"""
407+
Test to remove a registry key entry.
408+
"""
409+
expected = {
410+
"comment": f"Removed {reg_vars.name}",
411+
"changes": {"reg": {"Removed": {"Key": reg_vars.name}}},
412+
"name": reg_vars.name,
413+
"result": True,
414+
}
415+
assert reg.key_absent(reg_vars.name) == expected
416+
417+
418+
def test_key_absent_already_absent(reg_vars, clean):
419+
"""
420+
Test to remove a registry key entry.
421+
"""
422+
expected = {
423+
"comment": f"{reg_vars.name} is already absent",
424+
"changes": {},
425+
"name": reg_vars.name,
426+
"result": True,
427+
}
428+
assert reg.key_absent(reg_vars.name) == expected
429+
430+
431+
def test_key_absent_test_true(reg_vars, reset):
432+
expected = {
433+
"comment": f"Will remove {reg_vars.name}",
434+
"changes": {"reg": {"Will remove": {"Key": reg_vars.name}}},
435+
"name": reg_vars.name,
436+
"result": None,
437+
}
438+
with patch.dict(reg.__opts__, {"test": True}):
439+
ret = reg.key_absent(reg_vars.name)
440+
assert ret == expected
441+
442+
443+
def test_key_absent_already_absent_test_true(reg_vars, clean):
444+
"""
445+
Test to remove a registry entry.
446+
"""
447+
expected = {
448+
"comment": f"{reg_vars.name} is already absent",
449+
"changes": {},
450+
"name": reg_vars.name,
451+
"result": True,
452+
}
453+
with patch.dict(reg.__opts__, {"test": True}):
454+
assert reg.key_absent(reg_vars.name) == expected

0 commit comments

Comments
 (0)