Remove 'enroll diff --enforce' option. Tighten yaml data re: handlers - use listen: instead of notify:
This commit is contained in:
parent
e9d7d74445
commit
903125976d
15 changed files with 851 additions and 1288 deletions
|
|
@ -6,11 +6,9 @@ from pathlib import Path
|
|||
|
||||
import pytest
|
||||
|
||||
from enroll.ansible import _role_tag
|
||||
from enroll.diff import (
|
||||
_Spinner,
|
||||
_enforcement_plan,
|
||||
has_enforceable_drift,
|
||||
_role_tag,
|
||||
_utc_now_iso,
|
||||
_report_markdown,
|
||||
)
|
||||
|
|
@ -798,150 +796,6 @@ def test_role_tag_empty():
|
|||
assert _role_tag(" ") == "role_other"
|
||||
|
||||
|
||||
def test_has_enforceable_drift_packages_removed():
|
||||
report = {"packages": {"removed": ["vim"]}}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_services_removed():
|
||||
report = {"services": {"enabled_removed": ["nginx.service"]}}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_service_changed():
|
||||
report = {
|
||||
"services": {
|
||||
"changed": [
|
||||
{
|
||||
"unit": "nginx.service",
|
||||
"changes": {"active_state": {"old": "active", "new": "inactive"}},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_service_package_only_changed():
|
||||
# Service changed only in packages - should NOT be enforceable
|
||||
report = {
|
||||
"services": {
|
||||
"changed": [
|
||||
{
|
||||
"unit": "nginx.service",
|
||||
"changes": {"packages": {"added": ["nginx-extra"]}},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
assert has_enforceable_drift(report) is False
|
||||
|
||||
|
||||
def test_has_enforceable_drift_users_removed():
|
||||
report = {"users": {"removed": ["alice"]}}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_users_changed():
|
||||
report = {
|
||||
"users": {
|
||||
"changed": [
|
||||
{"name": "alice", "changes": {"uid": {"old": 1000, "new": 1001}}}
|
||||
]
|
||||
}
|
||||
}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_files_removed():
|
||||
report = {
|
||||
"files": {
|
||||
"removed": [{"path": "/etc/passwd", "role": "users", "reason": "conffile"}]
|
||||
}
|
||||
}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_files_changed():
|
||||
report = {
|
||||
"files": {
|
||||
"changed": [
|
||||
{
|
||||
"path": "/etc/passwd",
|
||||
"changes": {"content": {"old": "sha1", "new": "sha2"}},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
assert has_enforceable_drift(report) is True
|
||||
|
||||
|
||||
def test_has_enforceable_drift_no_drift():
|
||||
report = {
|
||||
"packages": {"added": ["newpkg"]},
|
||||
"services": {"enabled_added": ["new.service"]},
|
||||
"users": {"added": ["bob"]},
|
||||
"files": {"added": ["/opt/newfile"]},
|
||||
}
|
||||
assert has_enforceable_drift(report) is False
|
||||
|
||||
|
||||
def test_enforcement_plan_packages_removed(monkeypatch, tmp_path: Path):
|
||||
old_state = {
|
||||
"roles": {
|
||||
"services": [{"role_name": "nginx", "packages": ["nginx"]}],
|
||||
"packages": [{"role_name": "vim", "package": "vim"}],
|
||||
}
|
||||
}
|
||||
report = {"packages": {"removed": ["nginx", "vim"]}}
|
||||
|
||||
result = _enforcement_plan(report, old_state, tmp_path)
|
||||
assert "nginx" in result.get("roles", [])
|
||||
assert "vim" in result.get("roles", [])
|
||||
assert "role_nginx" in result.get("tags", [])
|
||||
|
||||
|
||||
def test_enforcement_plan_users_changed():
|
||||
old_state = {
|
||||
"roles": {"users": {"role_name": "users", "users": [{"name": "alice"}]}}
|
||||
}
|
||||
report = {"users": {"changed": [{"name": "alice", "changes": {"uid": {}}}]}}
|
||||
|
||||
result = _enforcement_plan(report, old_state, Path("/tmp"))
|
||||
assert "users" in result.get("roles", [])
|
||||
|
||||
|
||||
def test_enforcement_plan_files_removed(tmp_path: Path):
|
||||
# Create the artifacts directory structure that _file_index expects
|
||||
artifacts_dir = tmp_path / "artifacts" / "etc_custom"
|
||||
artifacts_dir.mkdir(parents=True)
|
||||
|
||||
old_state = {
|
||||
"roles": {
|
||||
"etc_custom": {
|
||||
"role_name": "etc_custom",
|
||||
"managed_files": [
|
||||
{"path": "/etc/custom.conf", "src_rel": "custom.conf"}
|
||||
],
|
||||
}
|
||||
}
|
||||
}
|
||||
report = {
|
||||
"files": {"removed": [{"path": "/etc/custom.conf", "role": "etc_custom"}]}
|
||||
}
|
||||
|
||||
result = _enforcement_plan(report, old_state, tmp_path)
|
||||
assert "etc_custom" in result.get("roles", [])
|
||||
|
||||
|
||||
def test_enforcement_plan_no_drift():
|
||||
old_state = {"roles": {}}
|
||||
report = {"packages": {"added": ["newpkg"]}}
|
||||
|
||||
result = _enforcement_plan(report, old_state, Path("/tmp"))
|
||||
assert result.get("roles", []) == []
|
||||
|
||||
|
||||
def test_bundle_from_input_tgz(monkeypatch, tmp_path: Path):
|
||||
bundle_dir = tmp_path / "bundle"
|
||||
bundle_dir.mkdir()
|
||||
|
|
@ -989,64 +843,6 @@ def test_report_markdown_basic():
|
|||
assert "+ vim" in result
|
||||
|
||||
|
||||
def test_report_markdown_with_enforcement_applied():
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
"old": {"input": "old.tar.gz"},
|
||||
"new": {"input": "new.tar.gz"},
|
||||
"packages": {"added": [], "removed": [], "version_changed": []},
|
||||
"services": {"enabled_added": [], "enabled_removed": [], "changed": []},
|
||||
"users": {"added": [], "removed": [], "changed": []},
|
||||
"files": {"added": [], "removed": [], "changed": []},
|
||||
"enforcement": {
|
||||
"status": "applied",
|
||||
"tags": ["role_users"],
|
||||
"returncode": 0,
|
||||
"finished_at": "2024-01-01T00:01:00Z",
|
||||
},
|
||||
}
|
||||
result = _report_markdown(report)
|
||||
assert "Applied old harvest" in result
|
||||
assert "role_users" in result
|
||||
|
||||
|
||||
def test_report_markdown_with_enforcement_failed():
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
"old": {"input": "old.tar.gz"},
|
||||
"new": {"input": "new.tar.gz"},
|
||||
"packages": {"added": [], "removed": [], "version_changed": []},
|
||||
"services": {"enabled_added": [], "enabled_removed": [], "changed": []},
|
||||
"users": {"added": [], "removed": [], "changed": []},
|
||||
"files": {"added": [], "removed": [], "changed": []},
|
||||
"enforcement": {
|
||||
"status": "failed",
|
||||
"returncode": 1,
|
||||
},
|
||||
}
|
||||
result = _report_markdown(report)
|
||||
assert "but failed" in result
|
||||
|
||||
|
||||
def test_report_markdown_with_enforcement_skipped():
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
"old": {"input": "old.tar.gz"},
|
||||
"new": {"input": "new.tar.gz"},
|
||||
"packages": {"added": [], "removed": [], "version_changed": []},
|
||||
"services": {"enabled_added": [], "enabled_removed": [], "changed": []},
|
||||
"users": {"added": [], "removed": [], "changed": []},
|
||||
"files": {"added": [], "removed": [], "changed": []},
|
||||
"enforcement": {
|
||||
"status": "skipped",
|
||||
"reason": "no drift",
|
||||
},
|
||||
}
|
||||
result = _report_markdown(report)
|
||||
assert "Skipped" in result
|
||||
assert "no drift" in result
|
||||
|
||||
|
||||
def test_report_markdown_with_version_ignored():
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
|
|
@ -1355,67 +1151,3 @@ def test_report_text_with_ignore_package_versions():
|
|||
result = d._report_text(report)
|
||||
assert "package version drift: ignored" in result
|
||||
assert "ignored 5 changes" in result
|
||||
|
||||
|
||||
def test_report_text_with_enforcement_applied():
|
||||
"""Test _report_text includes enforcement applied status."""
|
||||
import enroll.diff as d
|
||||
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
"old": {"input": "old.tar.gz", "host": "host1", "state_mtime": "mtime1"},
|
||||
"new": {"input": "new.tar.gz", "host": "host2", "state_mtime": "mtime2"},
|
||||
"packages": {"added": [], "removed": [], "version_changed": []},
|
||||
"services": {"enabled_added": [], "enabled_removed": [], "changed": []},
|
||||
"users": {"added": [], "removed": [], "changed": []},
|
||||
"files": {"added": [], "removed": [], "changed": []},
|
||||
"enforcement": {
|
||||
"status": "applied",
|
||||
"returncode": 0,
|
||||
"tags": ["test"],
|
||||
"finished_at": "2024-01-01T01:00:00Z",
|
||||
},
|
||||
}
|
||||
result = d._report_text(report)
|
||||
assert "Enforcement" in result
|
||||
assert "applied old harvest" in result
|
||||
assert "tags=test" in result
|
||||
|
||||
|
||||
def test_report_text_with_enforcement_failed():
|
||||
"""Test _report_text includes enforcement failed status."""
|
||||
import enroll.diff as d
|
||||
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
"old": {"input": "old.tar.gz", "host": "host1", "state_mtime": "mtime1"},
|
||||
"new": {"input": "new.tar.gz", "host": "host2", "state_mtime": "mtime2"},
|
||||
"packages": {"added": [], "removed": [], "version_changed": []},
|
||||
"services": {"enabled_added": [], "enabled_removed": [], "changed": []},
|
||||
"users": {"added": [], "removed": [], "changed": []},
|
||||
"files": {"added": [], "removed": [], "changed": []},
|
||||
"enforcement": {"status": "failed", "returncode": 1},
|
||||
}
|
||||
result = d._report_text(report)
|
||||
assert "Enforcement" in result
|
||||
assert "failed" in result
|
||||
|
||||
|
||||
def test_report_text_with_enforcement_skipped():
|
||||
"""Test _report_text includes enforcement skipped status."""
|
||||
import enroll.diff as d
|
||||
|
||||
report = {
|
||||
"generated_at": "2024-01-01T00:00:00Z",
|
||||
"old": {"input": "old.tar.gz", "host": "host1", "state_mtime": "mtime1"},
|
||||
"new": {"input": "new.tar.gz", "host": "host2", "state_mtime": "mtime2"},
|
||||
"packages": {"added": [], "removed": [], "version_changed": []},
|
||||
"services": {"enabled_added": [], "enabled_removed": [], "changed": []},
|
||||
"users": {"added": [], "removed": [], "changed": []},
|
||||
"files": {"added": [], "removed": [], "changed": []},
|
||||
"enforcement": {"status": "skipped", "reason": "no changes"},
|
||||
}
|
||||
result = d._report_text(report)
|
||||
assert "Enforcement" in result
|
||||
assert "skipped" in result
|
||||
assert "no changes" in result
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue