feat: Add 1 and update 6 files
This commit is contained in:
@@ -168,6 +168,5 @@ _root_remove_tree() {
|
|||||||
docker run --rm -v "$abs_parent":/data alpine rm -rf "/data/$child"
|
docker run --rm -v "$abs_parent":/data alpine rm -rf "/data/$child"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Load autocommands
|
# Load autocommands
|
||||||
source "${AGENT_PATH}/datacommands.sh"
|
source "${AGENT_PATH}/datacommands_v2.sh"
|
428
source/agent-remote/datacommands_v2.sh
Normal file
428
source/agent-remote/datacommands_v2.sh
Normal file
@@ -0,0 +1,428 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Refactored data commands with type-specific functions and standardized labels
|
||||||
|
# Format: <command>_<type> <label> <location>
|
||||||
|
# where:
|
||||||
|
# - command: create, destroy, backup, restore
|
||||||
|
# - type: file, path, volume
|
||||||
|
# - label: standardized identifier (e.g., "config", "data", "logs")
|
||||||
|
# - location: actual path/volume name (varies per installation)
|
||||||
|
|
||||||
|
MYID=$(id -u)
|
||||||
|
MYGRP=$(id -g)
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# FILE OPERATIONS
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
create_file() {
|
||||||
|
local label="$1"
|
||||||
|
local filepath="$2"
|
||||||
|
|
||||||
|
echo "[create_file] label=$label filepath=$filepath"
|
||||||
|
|
||||||
|
local file_parent
|
||||||
|
file_parent=$(dirname "${filepath}")
|
||||||
|
local file_name
|
||||||
|
file_name=$(basename "${filepath}")
|
||||||
|
|
||||||
|
if [ ! -d "${file_parent}" ]; then
|
||||||
|
echo "Creating parent directory ${file_parent}"
|
||||||
|
mkdir -p "${file_parent}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${filepath}" ]; then
|
||||||
|
echo "Creating file ${filepath}"
|
||||||
|
touch "${filepath}"
|
||||||
|
else
|
||||||
|
echo "File ${filepath} already exists - unchanged"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy_file() {
|
||||||
|
local label="$1"
|
||||||
|
local filepath="$2"
|
||||||
|
|
||||||
|
echo "[destroy_file] label=$label filepath=$filepath"
|
||||||
|
|
||||||
|
if [ -f "${filepath}" ]; then
|
||||||
|
echo "Removing file ${filepath}"
|
||||||
|
rm -f "${filepath}"
|
||||||
|
else
|
||||||
|
echo "File ${filepath} does not exist - nothing to destroy"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
backup_file() {
|
||||||
|
local label="$1"
|
||||||
|
local filepath="$2"
|
||||||
|
local backup_folder="$3"
|
||||||
|
|
||||||
|
echo "[backup_file] label=$label filepath=$filepath backup_folder=$backup_folder"
|
||||||
|
|
||||||
|
# Create subfolder using the label
|
||||||
|
local target_dir="${backup_folder}/file_${label}"
|
||||||
|
mkdir -p "${target_dir}"
|
||||||
|
|
||||||
|
if [ -f "${filepath}" ]; then
|
||||||
|
local file_parent
|
||||||
|
file_parent=$(dirname "${filepath}")
|
||||||
|
local file_name
|
||||||
|
file_name=$(basename "${filepath}")
|
||||||
|
|
||||||
|
# Store metadata about the file
|
||||||
|
echo "${filepath}" > "${target_dir}/original_path.txt"
|
||||||
|
|
||||||
|
# Copy the file
|
||||||
|
docker run --rm \
|
||||||
|
-v "${file_parent}":/source \
|
||||||
|
-v "${target_dir}":/backup \
|
||||||
|
debian bash -c "cp /source/${file_name} /backup/${file_name} && chown -R $MYID:$MYGRP /backup"
|
||||||
|
|
||||||
|
echo "File ${filepath} backed up successfully"
|
||||||
|
else
|
||||||
|
echo "File ${filepath} does not exist - nothing to backup"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
restore_file() {
|
||||||
|
local label="$1"
|
||||||
|
local filepath="$2"
|
||||||
|
local backup_folder="$3"
|
||||||
|
|
||||||
|
echo "[restore_file] label=$label filepath=$filepath backup_folder=$backup_folder"
|
||||||
|
|
||||||
|
local source_dir="${backup_folder}/file_${label}"
|
||||||
|
|
||||||
|
if [ ! -d "${source_dir}" ]; then
|
||||||
|
echo "Backup for label '${label}' not found in ${backup_folder}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local file_name
|
||||||
|
file_name=$(basename "${filepath}")
|
||||||
|
|
||||||
|
if [ -f "${source_dir}/${file_name}" ]; then
|
||||||
|
# Ensure parent directory exists
|
||||||
|
local file_parent
|
||||||
|
file_parent=$(dirname "${filepath}")
|
||||||
|
mkdir -p "${file_parent}"
|
||||||
|
|
||||||
|
# Remove existing file if present
|
||||||
|
rm -f "${filepath}"
|
||||||
|
|
||||||
|
# Copy from backup
|
||||||
|
cp "${source_dir}/${file_name}" "${filepath}"
|
||||||
|
echo "File ${filepath} restored successfully"
|
||||||
|
else
|
||||||
|
echo "Backup file ${source_dir}/${file_name} not found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# PATH OPERATIONS
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
create_path() {
|
||||||
|
local label="$1"
|
||||||
|
local path="$2"
|
||||||
|
|
||||||
|
echo "[create_path] label=$label path=$path"
|
||||||
|
|
||||||
|
if [ -d "${path}" ]; then
|
||||||
|
echo "Path ${path} already exists - unchanged"
|
||||||
|
else
|
||||||
|
echo "Creating path ${path}"
|
||||||
|
mkdir -p "${path}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy_path() {
|
||||||
|
local label="$1"
|
||||||
|
local path="$2"
|
||||||
|
|
||||||
|
echo "[destroy_path] label=$label path=$path"
|
||||||
|
|
||||||
|
if [ -d "${path}" ]; then
|
||||||
|
local path_parent
|
||||||
|
path_parent=$(dirname "${path}")
|
||||||
|
local path_child
|
||||||
|
path_child=$(basename "${path}")
|
||||||
|
|
||||||
|
echo "Destroying path ${path}"
|
||||||
|
docker run --rm -v "${path_parent}":/volume debian bash -c "rm -rf /volume/${path_child}"
|
||||||
|
else
|
||||||
|
echo "Path ${path} does not exist - nothing to destroy"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
backup_path() {
|
||||||
|
local label="$1"
|
||||||
|
local path="$2"
|
||||||
|
local backup_folder="$3"
|
||||||
|
|
||||||
|
echo "[backup_path] label=$label path=$path backup_folder=$backup_folder"
|
||||||
|
|
||||||
|
# Create subfolder using the label
|
||||||
|
local target_dir="${backup_folder}/path_${label}"
|
||||||
|
mkdir -p "${target_dir}"
|
||||||
|
|
||||||
|
if [ -d "${path}" ]; then
|
||||||
|
# Store metadata about the path
|
||||||
|
echo "${path}" > "${target_dir}/original_path.txt"
|
||||||
|
|
||||||
|
# Create tar archive of the path contents
|
||||||
|
docker run --rm \
|
||||||
|
-v "${path}":/source \
|
||||||
|
-v "${target_dir}":/backup \
|
||||||
|
debian bash -c "tar -czf /backup/data.tar.gz -C /source . && chown -R $MYID:$MYGRP /backup"
|
||||||
|
|
||||||
|
echo "Path ${path} backed up successfully"
|
||||||
|
else
|
||||||
|
echo "Path ${path} does not exist - nothing to backup"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
restore_path() {
|
||||||
|
local label="$1"
|
||||||
|
local path="$2"
|
||||||
|
local backup_folder="$3"
|
||||||
|
|
||||||
|
echo "[restore_path] label=$label path=$path backup_folder=$backup_folder"
|
||||||
|
|
||||||
|
local source_dir="${backup_folder}/path_${label}"
|
||||||
|
|
||||||
|
if [ ! -d "${source_dir}" ]; then
|
||||||
|
echo "Backup for label '${label}' not found in ${backup_folder}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "${source_dir}/data.tar.gz" ]; then
|
||||||
|
# Ensure path exists
|
||||||
|
mkdir -p "${path}"
|
||||||
|
|
||||||
|
# Clear existing contents
|
||||||
|
echo "Clearing existing contents of ${path}"
|
||||||
|
docker run --rm -v "${path}":/target debian bash -c "rm -rf /target/{*,.*} 2>/dev/null || true"
|
||||||
|
|
||||||
|
# Extract backup
|
||||||
|
docker run --rm \
|
||||||
|
-v "${path}":/target \
|
||||||
|
-v "${source_dir}":/backup \
|
||||||
|
debian bash -c "tar -xzf /backup/data.tar.gz -C /target"
|
||||||
|
|
||||||
|
echo "Path ${path} restored successfully"
|
||||||
|
else
|
||||||
|
echo "Backup file ${source_dir}/data.tar.gz not found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# VOLUME OPERATIONS
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
create_volume() {
|
||||||
|
local label="$1"
|
||||||
|
local volume_name="$2"
|
||||||
|
|
||||||
|
echo "[create_volume] label=$label volume=$volume_name"
|
||||||
|
|
||||||
|
if docker volume ls | grep -q "^local[[:space:]]*${volume_name}$"; then
|
||||||
|
echo "Volume ${volume_name} already exists - unchanged"
|
||||||
|
else
|
||||||
|
echo "Creating volume ${volume_name}"
|
||||||
|
docker volume create "${volume_name}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy_volume() {
|
||||||
|
local label="$1"
|
||||||
|
local volume_name="$2"
|
||||||
|
|
||||||
|
echo "[destroy_volume] label=$label volume=$volume_name"
|
||||||
|
|
||||||
|
if docker volume ls | grep -q "^local[[:space:]]*${volume_name}$"; then
|
||||||
|
echo "Destroying volume ${volume_name}"
|
||||||
|
docker volume rm "${volume_name}"
|
||||||
|
else
|
||||||
|
echo "Volume ${volume_name} does not exist - nothing to destroy"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
backup_volume() {
|
||||||
|
local label="$1"
|
||||||
|
local volume_name="$2"
|
||||||
|
local backup_folder="$3"
|
||||||
|
|
||||||
|
echo "[backup_volume] label=$label volume=$volume_name backup_folder=$backup_folder"
|
||||||
|
|
||||||
|
# Create subfolder using the label
|
||||||
|
local target_dir="${backup_folder}/volume_${label}"
|
||||||
|
mkdir -p "${target_dir}"
|
||||||
|
|
||||||
|
if docker volume ls | grep -q "^local[[:space:]]*${volume_name}$"; then
|
||||||
|
# Store metadata about the volume
|
||||||
|
echo "${volume_name}" > "${target_dir}/original_volume.txt"
|
||||||
|
|
||||||
|
# Create tar archive of the volume contents
|
||||||
|
docker run --rm \
|
||||||
|
-v "${volume_name}":/source \
|
||||||
|
-v "${target_dir}":/backup \
|
||||||
|
debian bash -c "tar -czf /backup/data.tar.gz -C /source . && chown -R $MYID:$MYGRP /backup"
|
||||||
|
|
||||||
|
echo "Volume ${volume_name} backed up successfully"
|
||||||
|
else
|
||||||
|
echo "Volume ${volume_name} does not exist - nothing to backup"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
restore_volume() {
|
||||||
|
local label="$1"
|
||||||
|
local volume_name="$2"
|
||||||
|
local backup_folder="$3"
|
||||||
|
|
||||||
|
echo "[restore_volume] label=$label volume=$volume_name backup_folder=$backup_folder"
|
||||||
|
|
||||||
|
local source_dir="${backup_folder}/volume_${label}"
|
||||||
|
|
||||||
|
if [ ! -d "${source_dir}" ]; then
|
||||||
|
echo "Backup for label '${label}' not found in ${backup_folder}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "${source_dir}/data.tar.gz" ]; then
|
||||||
|
# Remove existing volume if present
|
||||||
|
if docker volume ls | grep -q "^local[[:space:]]*${volume_name}$"; then
|
||||||
|
echo "Removing existing volume ${volume_name}"
|
||||||
|
docker volume rm "${volume_name}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create new volume
|
||||||
|
docker volume create "${volume_name}"
|
||||||
|
|
||||||
|
# Extract backup into volume
|
||||||
|
docker run --rm \
|
||||||
|
-v "${volume_name}":/target \
|
||||||
|
-v "${source_dir}":/backup \
|
||||||
|
debian bash -c "tar -xzf /backup/data.tar.gz -C /target"
|
||||||
|
|
||||||
|
echo "Volume ${volume_name} restored successfully"
|
||||||
|
else
|
||||||
|
echo "Backup file ${source_dir}/data.tar.gz not found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# # ============================================================================
|
||||||
|
# # MAIN BACKUP/RESTORE ORCHESTRATION
|
||||||
|
# # ============================================================================
|
||||||
|
|
||||||
|
# # Process multiple items for backup
|
||||||
|
# # Usage: backup_items <backup_file> <temp_dir> type1:label1:location1 type2:label2:location2 ...
|
||||||
|
# backup_items() {
|
||||||
|
# local backup_file="$1"
|
||||||
|
# local temp_dir="$2"
|
||||||
|
# shift 2
|
||||||
|
|
||||||
|
# local backup_temp_path="${temp_dir}/backup"
|
||||||
|
# mkdir -p "$backup_temp_path"
|
||||||
|
|
||||||
|
# echo "Starting backup to ${backup_file}"
|
||||||
|
|
||||||
|
# # Process each item
|
||||||
|
# for item in "$@"; do
|
||||||
|
# IFS=':' read -r type label location <<< "$item"
|
||||||
|
|
||||||
|
# case "$type" in
|
||||||
|
# file)
|
||||||
|
# backup_file "$label" "$location" "$backup_temp_path"
|
||||||
|
# ;;
|
||||||
|
# path)
|
||||||
|
# backup_path "$label" "$location" "$backup_temp_path"
|
||||||
|
# ;;
|
||||||
|
# volume)
|
||||||
|
# backup_volume "$label" "$location" "$backup_temp_path"
|
||||||
|
# ;;
|
||||||
|
# *)
|
||||||
|
# echo "Unknown type: $type (must be file, path, or volume)"
|
||||||
|
# ;;
|
||||||
|
# esac
|
||||||
|
# done
|
||||||
|
|
||||||
|
# # Create final backup archive
|
||||||
|
# echo "Creating backup archive ${backup_file}"
|
||||||
|
# tar -czf "$backup_file" -C "$backup_temp_path" .
|
||||||
|
|
||||||
|
# # Clean up temp directory
|
||||||
|
# rm -rf "$backup_temp_path"
|
||||||
|
|
||||||
|
# echo "Backup completed successfully"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# # Process multiple items for restore
|
||||||
|
# # Usage: restore_items <backup_file> <temp_dir> type1:label1:location1 type2:label2:location2 ...
|
||||||
|
# restore_items() {
|
||||||
|
# local backup_file="$1"
|
||||||
|
# local temp_dir="$2"
|
||||||
|
# shift 2
|
||||||
|
|
||||||
|
# if [ ! -f "$backup_file" ]; then
|
||||||
|
# echo "Backup file $backup_file not found"
|
||||||
|
# return 1
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# local restore_temp_path="${temp_dir}/restore"
|
||||||
|
# mkdir -p "$restore_temp_path"
|
||||||
|
|
||||||
|
# echo "Starting restore from ${backup_file}"
|
||||||
|
|
||||||
|
# # Extract backup archive
|
||||||
|
# echo "Extracting backup archive"
|
||||||
|
# tar -xzf "$backup_file" -C "$restore_temp_path"
|
||||||
|
|
||||||
|
# # Process each item
|
||||||
|
# for item in "$@"; do
|
||||||
|
# IFS=':' read -r type label location <<< "$item"
|
||||||
|
|
||||||
|
# case "$type" in
|
||||||
|
# file)
|
||||||
|
# restore_file "$label" "$location" "$restore_temp_path"
|
||||||
|
# ;;
|
||||||
|
# path)
|
||||||
|
# restore_path "$label" "$location" "$restore_temp_path"
|
||||||
|
# ;;
|
||||||
|
# volume)
|
||||||
|
# restore_volume "$label" "$location" "$restore_temp_path"
|
||||||
|
# ;;
|
||||||
|
# *)
|
||||||
|
# echo "Unknown type: $type (must be file, path, or volume)"
|
||||||
|
# ;;
|
||||||
|
# esac
|
||||||
|
# done
|
||||||
|
|
||||||
|
# # Clean up temp directory
|
||||||
|
# rm -rf "$restore_temp_path"
|
||||||
|
|
||||||
|
# echo "Restore completed successfully"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# # ============================================================================
|
||||||
|
# # LEGACY COMPATIBILITY WRAPPER (can be removed once migration is complete)
|
||||||
|
# # ============================================================================
|
||||||
|
|
||||||
|
# # Convert old format to new format
|
||||||
|
# # Input: key=value (e.g., "volume=myapp_data")
|
||||||
|
# # Output: type:label:location (e.g., "volume:data:myapp_data")
|
||||||
|
# convert_legacy_format() {
|
||||||
|
# local pair="$1"
|
||||||
|
# local key="${pair%%=*}"
|
||||||
|
# local value="${pair#*=}"
|
||||||
|
|
||||||
|
# # Generate a label from the value (simplified - you may want more sophisticated logic)
|
||||||
|
# local label
|
||||||
|
# label=$(echo "$value" | sed 's/[^a-zA-Z0-9_-]/_/g')
|
||||||
|
|
||||||
|
# echo "${key}:${label}:${value}"
|
||||||
|
# }
|
@@ -14,7 +14,6 @@ namespace autocomplete {
|
|||||||
const std::set<std::string> system_commands_noargs = {"templates","autocomplete_list_servers","autocomplete_list_services","autocomplete_list_commands"};
|
const std::set<std::string> system_commands_noargs = {"templates","autocomplete_list_servers","autocomplete_list_services","autocomplete_list_commands"};
|
||||||
const std::set<std::string> system_commands_always_available = {"help","edit"};
|
const std::set<std::string> system_commands_always_available = {"help","edit"};
|
||||||
const std::set<std::string> system_commands_require_config = {"server","templates","create-service","create-template","create-server","ssh","list"};
|
const std::set<std::string> system_commands_require_config = {"server","templates","create-service","create-template","create-server","ssh","list"};
|
||||||
const std::set<std::string> system_commands_hidden = {"_allservicesstatus"};
|
|
||||||
|
|
||||||
void merge_commands(std::set<std::string> &commands, const std::set<std::string> &new_commands)
|
void merge_commands(std::set<std::string> &commands, const std::set<std::string> &new_commands)
|
||||||
{
|
{
|
||||||
|
@@ -303,92 +303,6 @@ bool recreate_tree(std::string destination_folder) {
|
|||||||
delete[] decoded_data;
|
delete[] decoded_data;
|
||||||
any_written = any_written || file_written;
|
any_written = any_written || file_written;
|
||||||
}
|
}
|
||||||
{
|
|
||||||
// File: _allservicesstatus.sh
|
|
||||||
fs::path outpath = fs::path(destination_folder) / "_allservicesstatus.sh";
|
|
||||||
static const char filedata_base64[] = "IyEvYmluL2Jhc2gKCiMgVGhpcyBzY3JpcHQgY2hlY2tzIEFMTCBzZXJ2aWNlcyBvbiB0aGUgc2Vy"\
|
|
||||||
"dmVyIGFuZCByZXR1cm5zIGEgc3RhdHVzIGZvciBlYWNoLgoKIyBSZXR1cm4gZm9ybWF0IGlzIHNp"\
|
|
||||||
"bXBsZSBFTlYgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKIyBTRVJWSUNFX05BTUVfSEVBTFRI"\
|
|
||||||
"PWhlYWx0aHl8dW5oZWFsdGh5fHVua25vd24KIyBTRVJWSUNFX05BTUVfUE9SVFM9cG9ydDEscG9y"\
|
|
||||||
"dDIscG9ydDMKCiMgR2V0IGFsbCBzZXJ2aWNlcyBvbiB0aGUgc2VydmVyClNDUklQVF9ESVI9IiQo"\
|
|
||||||
"ZGlybmFtZSAiJDAiKSIKCiAgICAjIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t"\
|
|
||||||
"LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t"\
|
|
||||||
"LS0tLS0tCiAgICAjIC8vIHJlbW90ZSBwYXRocwogICAgIyAvLyBEUk9QU0hFTExfRElSCiAgICAj"\
|
|
||||||
"IC8vICAgfC0tIGJhY2t1cHMKICAgICMgLy8gICB8LS0gdGVtcF9maWxlcwogICAgIyAvLyAgIHwt"\
|
|
||||||
"LSBhZ2VudAogICAgIyAvLyAgIHwgICB8LS0gYmI2NAogICAgIyAvLyAgIHwgICB8LS0gKG90aGVy"\
|
|
||||||
"IGFnZW50IGZpbGVzLCBpbmNsdWRpbmcgX2FsbHNlcnZpY2Vzc3RhdHVzLnNoKQogICAgIyAvLyAg"\
|
|
||||||
"IHwtLSBzZXJ2aWNlcwogICAgIyAvLyAgICAgICB8LS0gc2VydmljZSBuYW1lCiAgICAjIC8vICAg"\
|
|
||||||
"ICAgICAgICB8LS0gY29uZmlnCiAgICAjIC8vICAgICAgICAgICAgICAgfC0tIHNlcnZpY2UuZW52"\
|
|
||||||
"IChhY3R1YWwgc2VydmljZSBjb25maWcpCiAgICAjIC8vICAgICAgICAgICAgICAgfC0tIC50ZW1w"\
|
|
||||||
"bGF0ZV9pbmZvLmVudgogICAgIyAvLyAgICAgICAgICAgfC0tIHRlbXBsYXRlCiAgICAjIC8vICAg"\
|
|
||||||
"ICAgICAgICAgICAgfC0tIChzY3JpcHQgZmlsZXMpCiAgICAjIC8vICAgICAgICAgICAgICAgfC0t"\
|
|
||||||
"IGNvbmZpZwogICAgIyAvLyAgICAgICAgICAgICAgICAgICB8LS0gc2VydmljZS5lbnYgKGRlZmF1"\
|
|
||||||
"bHQgc2VydmljZSBjb25maWcpCiAgICAjIC8vICAgICAgICAgICAgICAgICAgIHwtLSAudGVtcGxh"\
|
|
||||||
"dGVfaW5mby5lbnYKICAgICMgLy8gICAgICAgICAgICAgICAgICAgfC0tIChvdGhlciBjb25maWcg"\
|
|
||||||
"ZmlsZXMgZm9yIHNwZWNpZmljIHNlcnZlciZzZXJ2aWNlKQoKIyBHZXQgYWxsIHNlcnZpY2VzIG9u"\
|
|
||||||
"IHRoZSBzZXJ2ZXIKU0VSVklDRVNfUEFUSD0kKHJlYWxwYXRoICIke1NDUklQVF9ESVJ9Ly4uL3Nl"\
|
|
||||||
"cnZpY2VzLyIpCgpDVVJSRU5UX09VVFBVVD0iIgpDVVJSRU5UX0VYSVRfQ09ERT0wCgpsb2FkX2Rv"\
|
|
||||||
"dGVudigpewogICAgbG9jYWwgZmlsZV9wYXRoPSQxCiAgICBpZiBbIC1mICIke2ZpbGVfcGF0aH0i"\
|
|
||||||
"IF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9L2Rldi9udWxsCiAgICAgICAgc291cmNl"\
|
|
||||||
"ICIke2ZpbGVfcGF0aH0iCiAgICBmaQp9CgpfY2hlY2tfcmVxdWlyZWRfZW52X3ZhcnNfYWxsc2Vy"\
|
|
||||||
"dmljZXNzdGF0dXMoKSB7CiAgICBsb2NhbCByZXF1aXJlZF92YXJzPSgiJEAiKQogICAgZm9yIHZh"\
|
|
||||||
"ciBpbiAiJHtyZXF1aXJlZF92YXJzW0BdfSI7IGRvCiAgICAgICAgaWYgWyAteiAiJHshdmFyfSIg"\
|
|
||||||
"XTsgdGhlbgogICAgICAgICAgICBfZGllICJSZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAk"\
|
|
||||||
"dmFyIGlzIG5vdCBzZXQiCiAgICAgICAgZmkKICAgIGRvbmUKfQoKZnVuY3Rpb24gcnVuX2NvbW1h"\
|
|
||||||
"bmQoKSB7CiAgICBsb2NhbCBzZXJ2aWNlX3BhdGg9JDEKICAgIGxvY2FsIGNvbW1hbmQ9JDIKICAg"\
|
|
||||||
"IGxvY2FsIGNhcHR1cmVfb3V0cHV0PSR7MzotZmFsc2V9ICAjIGRlZmF1bHQgdG8gZmFsc2UgaWYg"\
|
|
||||||
"bm90IHNwZWNpZmllZAoKICAgICMgY2hlY2sgaWYgdGhlIGNvbW1hbmQgaXMgYSBmaWxlCiAgICBp"\
|
|
||||||
"ZiBbICEgLWYgIiR7c2VydmljZV9wYXRofS90ZW1wbGF0ZS8ke2NvbW1hbmR9LnNoIiBdOyB0aGVu"\
|
|
||||||
"CiAgICAgICAgcmV0dXJuOwogICAgZmkKCiAgICAjIHJ1biB0aGUgY29tbWFuZCBpbiBhIHN1YnNo"\
|
|
||||||
"ZWxsIHRvIHByZXZlbnQgZW52aXJvbm1lbnQgY2hhbmdlcwogICAgQ1VSUkVOVF9PVVRQVVQ9JCgK"\
|
|
||||||
"ICAgICAgICBzZXQgLWEKCiAgICAgICAgbG9hZF9kb3RlbnYgIiR7c2VydmljZV9wYXRofS9jb25m"\
|
|
||||||
"aWcvc2VydmljZS5lbnYiCiAgICAgICAgbG9hZF9kb3RlbnYgIiR7c2VydmljZV9wYXRofS9jb25m"\
|
|
||||||
"aWcvLnRlbXBsYXRlX2luZm8uZW52IgoKICAgICAgICAjIHVwZGF0ZSB0aGUgbWFpbiB2YXJpYWJs"\
|
|
||||||
"ZXMuCiAgICAgICAgZXhwb3J0IENPTkZJR19QQVRIPSIke3NlcnZpY2VfcGF0aH0vY29uZmlnIgog"\
|
|
||||||
"ICAgICAgIGV4cG9ydCBTRVJWSUNFPSIke1NFUlZJQ0VfTkFNRX0iCiAgICAgICAgZXhwb3J0IERP"\
|
|
||||||
"Q0tFUl9DTElfSElOVFM9ZmFsc2UKCiAgICAgICAgc2V0ICthCgogICAgICAgIF9jaGVja19yZXF1"\
|
|
||||||
"aXJlZF9lbnZfdmFyc19hbGxzZXJ2aWNlc3N0YXR1cyAiQ09ORklHX1BBVEgiICJTRVJWRVIiICJT"\
|
|
||||||
"RVJWSUNFIiAiQUdFTlRfUEFUSCIgIkhPU1RfTkFNRSIgIlRFTVBMQVRFIgoKICAgICAgICBpZiBb"\
|
|
||||||
"ICIkY2FwdHVyZV9vdXRwdXQiID0gInRydWUiIF07IHRoZW4KICAgICAgICAgICAgIyBDYXB0dXJl"\
|
|
||||||
"IGFuZCByZXR1cm4gb3V0cHV0CiAgICAgICAgICAgIGJhc2ggIiR7c2VydmljZV9wYXRofS90ZW1w"\
|
|
||||||
"bGF0ZS8ke2NvbW1hbmR9LnNoIiAyPiYxCiAgICAgICAgZWxzZQogICAgICAgICAgICAjIFJ1biBz"\
|
|
||||||
"aWxlbnRseSBhbmQgcmV0dXJuIGV4aXQgY29kZQogICAgICAgICAgICBiYXNoICIke3NlcnZpY2Vf"\
|
|
||||||
"cGF0aH0vdGVtcGxhdGUvJHtjb21tYW5kfS5zaCIgPiAvZGV2L251bGwgMj4mMQogICAgICAgIGZp"\
|
|
||||||
"CiAgICApCiAgICBDVVJSRU5UX0VYSVRfQ09ERT0kPwp9CgpmdW5jdGlvbiBjb21tYW5kX2V4aXN0"\
|
|
||||||
"cygpIHsKICAgIGxvY2FsIHNlcnZpY2VfcGF0aD0kMQogICAgbG9jYWwgY29tbWFuZD0kMgogICAg"\
|
|
||||||
"aWYgWyAhIC1mICIke3NlcnZpY2VfcGF0aH0vdGVtcGxhdGUvJHtjb21tYW5kfS5zaCIgXTsgdGhl"\
|
|
||||||
"bgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgcmV0dXJuIDAKfQoKCmlmIFsgISAtZCAiJHtT"\
|
|
||||||
"RVJWSUNFU19QQVRIfSIgXTsgdGhlbgogICAgZWNobyAiU2VydmljZXMgcGF0aCBkb2VzIG5vdCBl"\
|
|
||||||
"eGlzdDogJHtTRVJWSUNFU19QQVRIfSIKICAgIGV4aXQgMApmaQoKIyBHZXQgYWxsIHNlcnZpY2Ug"\
|
|
||||||
"bmFtZXMKU0VSVklDRV9OQU1FUz0kKGxzICIke1NFUlZJQ0VTX1BBVEh9IikKCiMgSXRlcmF0ZSBv"\
|
|
||||||
"dmVyIGFsbCBzZXJ2aWNlIG5hbWVzCmZvciBTRVJWSUNFX05BTUUgaW4gJHtTRVJWSUNFX05BTUVT"\
|
|
||||||
"fTsgZG8KCiAgICBTRVJWSUNFX1BBVEg9JChyZWFscGF0aCAiJHtTRVJWSUNFU19QQVRIfS8ke1NF"\
|
|
||||||
"UlZJQ0VfTkFNRX0iKQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg"\
|
|
||||||
"IyBHZXQgdGhlIHNlcnZpY2UgaGVhbHRoCiAgICBpZiAhIGNvbW1hbmRfZXhpc3RzICIke1NFUlZJ"\
|
|
||||||
"Q0VfUEFUSH0iICJzdGF0dXMiOyB0aGVuCiAgICAgICAgU0VSVklDRV9IRUFMVEg9InVua25vd24i"\
|
|
||||||
"CiAgICBlbHNlCiAgICAgICAgcnVuX2NvbW1hbmQgIiR7U0VSVklDRV9QQVRIfSIgInN0YXR1cyIg"\
|
|
||||||
"ImZhbHNlIgogICAgICAgIGlmIFsgIiR7Q1VSUkVOVF9FWElUX0NPREV9IiAtZXEgMCBdOyB0aGVu"\
|
|
||||||
"CiAgICAgICAgICAgIFNFUlZJQ0VfSEVBTFRIPSJoZWFsdGh5IgogICAgICAgIGVsc2UKICAgICAg"\
|
|
||||||
"ICAgICAgU0VSVklDRV9IRUFMVEg9InVuaGVhbHRoeSIKICAgICAgICBmaQogICAgZmkKCiAgICAj"\
|
|
||||||
"LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgR2V0IHRoZSBzZXJ2aWNlIHBv"\
|
|
||||||
"cnRzCiAgICBpZiAhIGNvbW1hbmRfZXhpc3RzICIke1NFUlZJQ0VfUEFUSH0iICJwb3J0cyI7IHRo"\
|
|
||||||
"ZW4KICAgICAgICBTRVJWSUNFX1BPUlRTPSIiCiAgICBlbHNlCiAgICAgICAgcnVuX2NvbW1hbmQg"\
|
|
||||||
"IiR7U0VSVklDRV9QQVRIfSIgInBvcnRzIiAidHJ1ZSIKICAgICAgICBTRVJWSUNFX1BPUlRTPSIk"\
|
|
||||||
"e0NVUlJFTlRfT1VUUFVUfSIKICAgIGZpCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t"\
|
|
||||||
"LS0tLS0tCiAgICAjIHJldHVybiB0aGUgaGVhbHRoIGFuZCBwb3J0cwogICAgZWNobyAiJHtTRVJW"\
|
|
||||||
"SUNFX05BTUV9X0hFQUxUSD0ke1NFUlZJQ0VfSEVBTFRIfSIKICAgIGVjaG8gIiR7U0VSVklDRV9O"\
|
|
||||||
"QU1FfV9QT1JUUz0ke1NFUlZJQ0VfUE9SVFN9Igpkb25lCg==";
|
|
||||||
|
|
||||||
// Decode Base64 data
|
|
||||||
size_t decoded_size = (strlen(filedata_base64) * 3) / 4;
|
|
||||||
unsigned char* decoded_data = new unsigned char[decoded_size];
|
|
||||||
size_t actual_size;
|
|
||||||
base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size);
|
|
||||||
|
|
||||||
bool file_written = _recreate_file_(outpath, 5357556424345185129ULL, std::filesystem::perms(493), decoded_data, actual_size);
|
|
||||||
delete[] decoded_data;
|
|
||||||
any_written = any_written || file_written;
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
// File: common.sh
|
// File: common.sh
|
||||||
fs::path outpath = fs::path(destination_folder) / "common.sh";
|
fs::path outpath = fs::path(destination_folder) / "common.sh";
|
||||||
|
@@ -241,7 +241,6 @@ namespace dropshell
|
|||||||
|
|
||||||
|
|
||||||
// add in some simple variables first, as others below may depend on/use these in bash.
|
// add in some simple variables first, as others below may depend on/use these in bash.
|
||||||
// if we change these, we also need to update agent/_allservicesstatus.sh
|
|
||||||
all_env_vars["SERVER"] = server_name;
|
all_env_vars["SERVER"] = server_name;
|
||||||
all_env_vars["SERVICE"] = service_name;
|
all_env_vars["SERVICE"] = service_name;
|
||||||
all_env_vars["DOCKER_CLI_HINTS"] = "false"; // turn off docker junk.
|
all_env_vars["DOCKER_CLI_HINTS"] = "false"; // turn off docker junk.
|
||||||
|
@@ -142,7 +142,7 @@ namespace dropshell
|
|||||||
// |-- temp_files
|
// |-- temp_files
|
||||||
// |-- agent
|
// |-- agent
|
||||||
// | |-- bb64
|
// | |-- bb64
|
||||||
// | |-- (other agent files, including _allservicesstatus.sh)
|
// | |-- (other agent files)
|
||||||
// |-- services
|
// |-- services
|
||||||
// |-- service name
|
// |-- service name
|
||||||
// |-- config
|
// |-- config
|
||||||
|
@@ -18,10 +18,9 @@ namespace dropshell {
|
|||||||
// |-- bb64 (only used locally, as it's for the local machine's architecture!)
|
// |-- bb64 (only used locally, as it's for the local machine's architecture!)
|
||||||
// |-- template_example
|
// |-- template_example
|
||||||
// |-- agent-remote
|
// |-- agent-remote
|
||||||
// |-- (remote agent files, including _allservicesstatus.sh)
|
// |-- (remote agent files)
|
||||||
// |-- temp_files
|
// |-- temp_files
|
||||||
// |-- template_cache
|
// |-- template_cache
|
||||||
// |-- templates
|
|
||||||
// | |-- <template_name>.json
|
// | |-- <template_name>.json
|
||||||
// | |-- <template_name>
|
// | |-- <template_name>
|
||||||
// | |-- (...script files...)
|
// | |-- (...script files...)
|
||||||
@@ -85,7 +84,7 @@ namespace dropshell {
|
|||||||
// |-- temp_files
|
// |-- temp_files
|
||||||
// |-- agent
|
// |-- agent
|
||||||
// | |-- bb64
|
// | |-- bb64
|
||||||
// | |-- (other agent files, including _allservicesstatus.sh)
|
// | |-- (other agent files)
|
||||||
// |-- services
|
// |-- services
|
||||||
// |-- service name
|
// |-- service name
|
||||||
// |-- config
|
// |-- config
|
||||||
|
Reference in New Issue
Block a user