Последняя активность 1 month ago

nuno ревизий этого фрагмента 1 month ago. К ревизии

1 file changed, 45 insertions

gistfile1.txt(файл создан)

@@ -0,0 +1,45 @@
1 + function cmd::rule::assign() {
2 + local name="" peer="" type=""
3 + while [[ $# -gt 0 ]]; do
4 + case "$1" in
5 + --name) name="$2"; shift 2 ;;
6 + --peer) peer="$2"; shift 2 ;;
7 + --type) type="$2"; shift 2 ;;
8 + --help) cmd::rule::help; return ;;
9 + *)
10 + log::error "Unknown flag: $1"
11 + return 1
12 + ;;
13 + esac
14 + done
15 +
16 + if [[ -z "$name" || -z "$peer" ]]; then
17 + log::error "Missing required flags: --name and --peer"
18 + return 1
19 + fi
20 +
21 + rule::require_exists "$name" || return 1
22 +
23 + # Support --type for peer resolution
24 + peer=$(peers::resolve_and_require "$peer" "$type") || return 1
25 +
26 + # Unapply existing rule first if any
27 + local existing_rule
28 + existing_rule=$(peers::get_meta "$peer" "rule")
29 +
30 + local ip
31 + ip=$(peers::get_ip "$peer")
32 + log::debug "rule::assign: peer=$peer ip=$ip"
33 + [[ -z "$ip" ]] && log::error "Could not resolve IP for: $peer" && return 1
34 +
35 + log::debug "assign: peer=$peer ip=$ip clients=$(ctx::clients)"
36 +
37 + if [[ -n "$existing_rule" && "$existing_rule" != "$name" ]]; then
38 + rule::unapply "$existing_rule" "$ip"
39 + log::wg "Removed existing rule '${existing_rule}' from: ${peer}"
40 + fi
41 +
42 + rule::apply "$name" "$ip"
43 +
44 + log::wg_success "Assigned rule '${name}' to: ${peer}"
45 + }
Новее Позже