first try
This commit is contained in:
commit
5b1bb4e0bf
5 changed files with 178 additions and 0 deletions
54
.drone.yml
Normal file
54
.drone.yml
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: linting
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: gitleaks
|
||||||
|
image: plugins/gitleaks
|
||||||
|
settings:
|
||||||
|
path: .
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- tag
|
||||||
|
|
||||||
|
- name: hadolint
|
||||||
|
image: hadolint/hadolint:latest-debian
|
||||||
|
commands:
|
||||||
|
- hadolint Dockerfile
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: selfhosted
|
||||||
|
depends_on: # bezieht sich auf linting pipeline
|
||||||
|
- linting
|
||||||
|
steps:
|
||||||
|
- name: docker_build_and_push_selfhosted
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
repo: registry.mgrote.net/oxidized-selfmade
|
||||||
|
registry: registry.mgrote.net
|
||||||
|
tags:
|
||||||
|
- ${DRONE_COMMIT_SHA:0:8}
|
||||||
|
- ${DRONE_COMMIT_BRANCH}
|
||||||
|
- latest
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- pull_request
|
||||||
|
- tag
|
||||||
|
|
||||||
|
- name: docker_build_and_push_selfhosted_tag
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
repo: registry.mgrote.net/oxidized-selfmade
|
||||||
|
registry: registry.mgrote.net
|
||||||
|
tags:
|
||||||
|
- ${DRONE_TAG}
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- tag
|
16
Dockerfile
Normal file
16
Dockerfile
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
FROM ubuntu:latest
|
||||||
|
|
||||||
|
# Install necessary packages
|
||||||
|
RUN apt-get update && apt-get install -y openssh-client git
|
||||||
|
|
||||||
|
# Copy the script into the container
|
||||||
|
COPY app.sh /app/app.sh
|
||||||
|
|
||||||
|
# Set the working directory
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Make the script executable
|
||||||
|
RUN chmod +x app.sh
|
||||||
|
|
||||||
|
# Set the entrypoint to execute the script
|
||||||
|
ENTRYPOINT ["/app/app.sh"]
|
43
README.md
Normal file
43
README.md
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# python-api-server
|
||||||
|
|
||||||
|
a small flask-application for storing and downloading stuff like small binaries
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
- ``MAX_CONTENT_LENGTH``: maximal Filesize in MB; defaults to 5MB
|
||||||
|
- ``UPLOAD_DIRECTORY``: where to store the uploaded files; should be mapped to a volume; defaults to "/uploads"
|
||||||
|
- ``AUTH_TOKEN``: token used for authenticating
|
||||||
|
|
||||||
|
## Example Docker-Compose
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
python-api-server:
|
||||||
|
container_name: httpd-api
|
||||||
|
image: quotengrote/python-api-server:v2
|
||||||
|
ports:
|
||||||
|
- "5040:5000"
|
||||||
|
volumes:
|
||||||
|
- uploads:/uploads
|
||||||
|
environment:
|
||||||
|
# FLASK_DEBUG: 1 # for debugging
|
||||||
|
# FLASK_APP: app # for debugging
|
||||||
|
MAX_CONTENT_LENGTH: 10
|
||||||
|
UPLOAD_DIRECTORY: /uploads
|
||||||
|
AUTH_TOKEN: myuploadtoken
|
||||||
|
ENABLE_WEBSERVER: true # if enabled a list of files can be viewed in a webbrowser (see screenshot)
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
uploads:
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### ENABLE_WEBSERVER Screenshot
|
||||||
|
|
||||||
|
|
||||||
|
![](./assets/screenshot_webui.png)
|
||||||
|
|
||||||
|
## API-Endpoints
|
||||||
|
|
||||||
|
- see [Flasgger](https://github.com/flasgger/flasgger): ``http://<host>:5040/apidocs/``
|
52
app.sh
Normal file
52
app.sh
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# RouterOS devices SSH connection settings
|
||||||
|
DEVICE_CONFIGS="$DEVICE_CONFIGS" # Comma-separated list of device configurations in the format: "device,username,/path/to/ssh/key"
|
||||||
|
|
||||||
|
# Git repository settings
|
||||||
|
GIT_REPO_URL="$GIT_REPO_URL" # Git repository SSH URL
|
||||||
|
GIT_USERNAME="$GIT_USERNAME" # Git username for SSH authentication
|
||||||
|
GIT_SSH_KEY="$GIT_SSH_KEY" # Git SSH private key path (mounted in Docker container)
|
||||||
|
GIT_REPO_PATH="/app/config_repo" # Directory where the Git repository is cloned in the Docker container
|
||||||
|
|
||||||
|
# Function to export RouterOS configuration
|
||||||
|
export_routeros_config() {
|
||||||
|
local device="$1"
|
||||||
|
local username="$2"
|
||||||
|
local ssh_key="$3"
|
||||||
|
|
||||||
|
ssh -i "$ssh_key" "$username"@"$device" /export > "/app/${device}_config_export.txt"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to commit and push the configuration to the Git repository
|
||||||
|
commit_and_push_to_git() {
|
||||||
|
cd "$GIT_REPO_PATH"
|
||||||
|
|
||||||
|
git config --global user.email "$GIT_USERNAME"
|
||||||
|
git config --global user.name "$GIT_USERNAME"
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -m "Update configuration $(date +%Y-%m-%d)"
|
||||||
|
git push origin master
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script
|
||||||
|
IFS=',' read -r -a devices <<< "$DEVICE_CONFIGS"
|
||||||
|
for device_config in "${devices[@]}"; do
|
||||||
|
IFS=' ' read -r -a config <<< "$device_config"
|
||||||
|
device="${config[0]}"
|
||||||
|
username="${config[1]}"
|
||||||
|
ssh_key="${config[2]}"
|
||||||
|
|
||||||
|
export_routeros_config "$device" "$username" "$ssh_key"
|
||||||
|
done
|
||||||
|
|
||||||
|
cd "$GIT_REPO_PATH"
|
||||||
|
|
||||||
|
if [ -d "$GIT_REPO_PATH" ]; then
|
||||||
|
git pull origin master
|
||||||
|
else
|
||||||
|
git clone "$GIT_REPO_URL" "$GIT_REPO_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
commit_and_push_to_git
|
13
docker-compose.yml
Normal file
13
docker-compose.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
routeros-config-export:
|
||||||
|
image: registry.mgrote.net/oxidized-selfmade:latest
|
||||||
|
environment:
|
||||||
|
- DEVICE_CONFIGS=device1,username1,/path/to/ssh/key1 device2,username2,/path/to/ssh/key2
|
||||||
|
- GIT_REPO_URL=your_git_repo_ssh_url
|
||||||
|
- GIT_USERNAME=your_git_username
|
||||||
|
- GIT_SSH_KEY=/app/your_git_ssh_key_file
|
||||||
|
volumes:
|
||||||
|
- /path/to/your_git_ssh_key_file:/app/your_git_ssh_key_file:ro
|
||||||
|
# Add any other volumes or configurations needed
|
Loading…
Reference in a new issue