Commit 099dd47
committed
gw: admin RPC to override per-instance port policy
Operators can now override an instance's port policy through the Admin
service, taking precedence over what the instance reports for itself.
Three new methods on the Admin service:
- SetInstancePortPolicy(instance_id, policy)
Persists an admin override on the instance record. Errors with
"instance not found" (404 semantics) if the instance is not
registered — operators don't pre-create policy rows.
- ClearInstancePortPolicy(instance_id)
Removes the override. Effective policy reverts to whatever the
instance reported (or none, fail-close again).
- GetInstancePortPolicy(instance_id) -> { effective, source,
instance_reported, admin_override }
Returns both layers and the resolved effective policy. The `source`
string ("admin" | "instance" | "none") makes "why was port X
rejected" answerable in one call.
Storage and resolution:
- `InstanceData.admin_port_policy: Option<PortPolicy>` lives next to
the existing `port_policy` field, persisted to WaveKV under the
same `inst/{id}` record so overrides sync across nodes for free.
- `instance_port_policy()` (used by both `is_port_allowed` and
`should_send_pp`) now returns `admin_port_policy.or(port_policy)`.
- App upgrade (compose_hash change) clears the instance-reported
policy as before, but the admin override survives. Operator intent
is stronger than app updates; they can re-evaluate explicitly.
- Lazy fetch only ever writes `port_policy`, never touches the
override.
Tests:
- 5 new unit tests: override beats instance, override can open what
the instance restricts (and vice versa), clearing reverts, unknown
instance errors, override survives compose_hash change.1 parent 7f372f3 commit 099dd47
8 files changed
Lines changed: 356 additions & 15 deletions
File tree
- gateway
- rpc/proto
- src
- kv
- main_service
- snapshots
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
439 | 439 | | |
440 | 440 | | |
441 | 441 | | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
442 | 454 | | |
443 | 455 | | |
444 | 456 | | |
| |||
648 | 660 | | |
649 | 661 | | |
650 | 662 | | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
18 | | - | |
19 | | - | |
20 | | - | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
21 | 23 | | |
22 | 24 | | |
23 | 25 | | |
| |||
26 | 28 | | |
27 | 29 | | |
28 | 30 | | |
29 | | - | |
| 31 | + | |
30 | 32 | | |
| 33 | + | |
31 | 34 | | |
32 | 35 | | |
33 | 36 | | |
| |||
625 | 628 | | |
626 | 629 | | |
627 | 630 | | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
628 | 698 | | |
629 | 699 | | |
630 | 700 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
84 | 90 | | |
85 | 91 | | |
86 | 92 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
491 | 491 | | |
492 | 492 | | |
493 | 493 | | |
| 494 | + | |
494 | 495 | | |
495 | 496 | | |
496 | 497 | | |
| |||
786 | 787 | | |
787 | 788 | | |
788 | 789 | | |
| 790 | + | |
789 | 791 | | |
790 | 792 | | |
791 | 793 | | |
| |||
914 | 916 | | |
915 | 917 | | |
916 | 918 | | |
| 919 | + | |
917 | 920 | | |
918 | 921 | | |
919 | 922 | | |
| |||
934 | 937 | | |
935 | 938 | | |
936 | 939 | | |
| 940 | + | |
937 | 941 | | |
938 | 942 | | |
939 | 943 | | |
| |||
945 | 949 | | |
946 | 950 | | |
947 | 951 | | |
948 | | - | |
949 | | - | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
950 | 955 | | |
951 | | - | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
952 | 960 | | |
953 | 961 | | |
954 | 962 | | |
| |||
957 | 965 | | |
958 | 966 | | |
959 | 967 | | |
960 | | - | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
961 | 1022 | | |
962 | 1023 | | |
963 | 1024 | | |
964 | 1025 | | |
965 | 1026 | | |
966 | | - | |
| 1027 | + | |
967 | 1028 | | |
| 1029 | + | |
968 | 1030 | | |
969 | 1031 | | |
970 | | - | |
| 1032 | + | |
971 | 1033 | | |
972 | 1034 | | |
973 | 1035 | | |
| |||
980 | 1042 | | |
981 | 1043 | | |
982 | 1044 | | |
| 1045 | + | |
983 | 1046 | | |
984 | 1047 | | |
985 | 1048 | | |
| |||
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
0 commit comments