function cmd::export::_full() { local no_config="${1:-false}" no_peers="${2:-false}" local sections=() # Config if ! $no_config; then local config_json="{}" [[ -f "$(ctx::config_file)" ]] && config_json=$(cmd::export::_compact_json "$(ctx::config_file)") sections+=("\"config\":${config_json}") fi # Peers if ! $no_peers; then local -a peer_jsons=() for conf in "$(ctx::clients)"/*.conf; do [[ -f "$conf" ]] || continue local pname pname=$(basename "$conf" .conf) local peer_export peer_export=$(cmd::export::_peer_data "$pname") [[ -n "$peer_export" ]] && peer_jsons+=("$peer_export") done local peers_array peers_array=$(printf '%s\n' "${peer_jsons[@]:-}" | paste -sd ',' -) sections+=("\"peers\":[${peers_array:-}]") fi # Rules — raw JSON files local -a rule_jsons=() for rule_file in "$(ctx::rules)"/*.rule "$(ctx::rules)/base"/*.rule; do [[ -f "$rule_file" ]] || continue rule_jsons+=("$(cmd::export::_compact_json "$rule_file")") done local rules_array rules_array=$(printf '%s\n' "${rule_jsons[@]:-}" | paste -sd ',' -) sections+=("\"rules\":[${rules_array:-}]") # Identities local -a id_jsons=() for id_file in "$(ctx::identities)"/*.identity; do [[ -f "$id_file" ]] || continue id_jsons+=("$(cmd::export::_compact_json "$id_file")") done local ids_array ids_array=$(printf '%s\n' "${id_jsons[@]:-}" | paste -sd ',' -) sections+=("\"identities\":[${ids_array:-}]") # Groups local -a grp_jsons=() for grp_file in "$(ctx::groups)"/*.group; do [[ -f "$grp_file" ]] || continue grp_jsons+=("$(cmd::export::_compact_json "$grp_file")") done local grps_array grps_array=$(printf '%s\n' "${grp_jsons[@]:-}" | paste -sd ',' -) sections+=("\"groups\":[${grps_array:-}]") # Flat JSON files [[ -f "$(ctx::policies)" ]] && sections+=("\"policies\":$(cat "$(ctx::policies)")") [[ -f "$(ctx::subnets)" ]] && sections+=("\"subnets\":$(cat "$(ctx::subnets)")") [[ -f "$(ctx::net)" ]] && sections+=("\"services\":$(cat "$(ctx::net)")") [[ -f "$(ctx::hosts)" ]] && sections+=("\"hosts\":$(cat "$(ctx::hosts)")") local data data=$(printf '%s\n' "${sections[@]}" | paste -sd ',' -) cmd::export::_envelope "full" "{${data}}" }