gowalk-cicd 1.0.152 → 1.0.153
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action/.daemux-version +1 -1
- package/android-action/.daemux-version +1 -1
- package/backend-action/.daemux-version +1 -1
- package/backend-action/network_pools.py +3 -1
- package/backend-action/test_network_rule_diagnostics.py +16 -0
- package/docs/BACKEND_NETWORKS.md +3 -0
- package/package.json +1 -1
package/action/.daemux-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.153
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.153
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.153
|
|
@@ -204,7 +204,9 @@ def validate_rules(rows):
|
|
|
204
204
|
expected += [dict(marked, priority=5210, table='main'), dict(marked, priority=5230, table='default'),
|
|
205
205
|
dict(marked, priority=5250, action='unreachable'), {'priority': 5270, 'src': 'all', 'table': 52}]
|
|
206
206
|
actual = []
|
|
207
|
-
|
|
207
|
+
# iproute2 iprule.c prints table names/numbers as JSON strings, including Tailscale's "52".
|
|
208
|
+
tables = {255: 'local', 254: 'main', 253: 'default',
|
|
209
|
+
'255': 'local', '254': 'main', '253': 'default', '52': 52}
|
|
208
210
|
for row in rows:
|
|
209
211
|
if not isinstance(row, dict) or set(row) - {'priority', 'src', 'table', 'protocol',
|
|
210
212
|
'fwmark', 'fwmask', 'action'}:
|
|
@@ -12,6 +12,22 @@ from test_network_inventory import FakeHost, RULES
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class RuleDiagnosticTests(unittest.TestCase):
|
|
15
|
+
def test_iproute_decimal_table_strings_keep_exact_policy_semantics(self):
|
|
16
|
+
marked = {'src': 'all', 'fwmark': '0x80000', 'fwmask': '0xff0000'}
|
|
17
|
+
rules = [dict(row, table=str({'local': 255, 'main': 254, 'default': 253}[row['table']]))
|
|
18
|
+
for row in RULES]
|
|
19
|
+
validate_rules(rules)
|
|
20
|
+
rules += [dict(marked, priority=5210, table='254'), dict(marked, priority=5230, table='253'),
|
|
21
|
+
dict(marked, priority=5250, action='unreachable'),
|
|
22
|
+
{'priority': 5270, 'src': 'all', 'table': '52'}]
|
|
23
|
+
validate_rules(rules)
|
|
24
|
+
for invalid in ('53', '052', '0x34', 'private table alias', 53, True):
|
|
25
|
+
changed = copy.deepcopy(rules)
|
|
26
|
+
changed[-1]['table'] = invalid
|
|
27
|
+
with self.subTest(table=invalid), self.assertRaises(InventoryFailure) as caught:
|
|
28
|
+
validate_rules(changed)
|
|
29
|
+
self.assertEqual(caught.exception.code, 'host_rules_unsupported_table')
|
|
30
|
+
|
|
15
31
|
def test_each_rejected_shape_keeps_a_closed_reason_without_values(self):
|
|
16
32
|
marked = {'src': 'all', 'fwmark': '0x80000', 'fwmask': '0xff0000'}
|
|
17
33
|
valid = RULES + [dict(marked, priority=5210, table='main'), dict(marked, priority=5230, table='default'),
|
package/docs/BACKEND_NETWORKS.md
CHANGED
|
@@ -82,6 +82,9 @@ Raw container data, labels, environment, daemon configuration and command errors
|
|
|
82
82
|
Policy-rule refusals use `host_rules_unsupported_<reason>` to distinguish count, fields, priority,
|
|
83
83
|
source, table, structure, fwmark, fwmask, action and duplicate mismatches. These fixed classifications
|
|
84
84
|
retain the strict supported-rule comparison and publish no rejected keys or values.
|
|
85
|
+
The exact decimal-string spellings of supported table IDs are normalized because
|
|
86
|
+
[iproute2 prints rule tables as JSON strings](https://github.com/iproute2/iproute2/blob/v6.8.0/ip/iprule.c#L370).
|
|
87
|
+
This does not admit additional routing tables, aliases, priorities or forwarding policies.
|
|
85
88
|
|
|
86
89
|
The deployment emits its own `gowalk-cicd/backend-networks.v1` receipt. The existing
|
|
87
90
|
`backend_deploy_failed` phase remains `compose_up` on a preparation refusal. Normal public health,
|