Valentin Lab
6 years ago
7 changed files with 218 additions and 0 deletions
-
63drone/hooks/init
-
24drone/hooks/vcs_manager-relation-joined
-
24drone/hooks/web_proxy-relation-joined
-
3drone/lib/common
-
49drone/metadata.yml
-
52gitea/actions/info
-
3gitea/metadata.yml
@ -0,0 +1,63 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
## Init is run on host |
||||
|
## For now it is run every time the script is launched, but |
||||
|
## it should be launched only once after build. |
||||
|
|
||||
|
## Accessible variables are: |
||||
|
## - SERVICE_NAME Name of current service |
||||
|
## - DOCKER_BASE_IMAGE Base image from which this service might be built if any |
||||
|
## - SERVICE_DATASTORE Location on host of the DATASTORE of this service |
||||
|
## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service |
||||
|
|
||||
|
|
||||
|
set -e |
||||
|
|
||||
|
. lib/common |
||||
|
|
||||
|
mode="$(options-get mode)" || exit 1 |
||||
|
|
||||
|
case "$mode" in |
||||
|
single) |
||||
|
capacity="$(options-get capacity)" || exit 1 |
||||
|
init-config-add "\ |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
DRONE_RUNNER_CAPACITY: $capacity |
||||
|
volumes: |
||||
|
- /var/run/docker.sock:/var/run/docker.sock |
||||
|
" |
||||
|
;; |
||||
|
multi) |
||||
|
secret="$(options-get secret)" || { |
||||
|
err "In 'multi' mode, you must set a 'secret' in $DARKYELLOW$SERVICE_NAME$NORMAL service's" \ |
||||
|
"options to share with slave drones." |
||||
|
echo " You can use: 'openssl rand -hex 16' to create one." >&2 |
||||
|
exit 1 |
||||
|
} |
||||
|
init-config-add "\ |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
DRONE_RPC_SECRET: $secret |
||||
|
" |
||||
|
|
||||
|
;; |
||||
|
esac |
||||
|
|
||||
|
|
||||
|
admin="$(options-get admin)" || exit 1 |
||||
|
if [ "$admin" ]; then |
||||
|
init-config-add "\ |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
DRONE_USER_CREATE: \"username:$admin,admin:true\" |
||||
|
" |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
init-config-add "\ |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
DRONE_SERVER_HOST: $MASTER_BASE_SERVICE_NAME |
||||
|
DRONE_SERVER_PROTO: http |
||||
|
" |
@ -0,0 +1,24 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
|
||||
|
. lib/common |
||||
|
|
||||
|
## XXXvlab: all this to escape forced stdout capture |
||||
|
VCS_MANAGER_NAME=$( |
||||
|
charm=$(get_service_charm "$TARGET_SERVICE_NAME") |
||||
|
SERVICE_DATASTORE="$DATASTORE/$TARGET_SERVICE_NAME" charm.run_direct_action "$charm" info name |
||||
|
#run_service_action "$TARGET_SERVICE_NAME" info name |
||||
|
) || { |
||||
|
err "vcs-manager $TARGET_SERVICE_NAME was not able to return a name upon query." |
||||
|
exit 1 |
||||
|
} |
||||
|
|
||||
|
|
||||
|
## this drone server url is a direct access to gitea, mainly |
||||
|
## to check credentials with the vcs manager. |
||||
|
config-add "\ |
||||
|
services: |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
DRONE_${VCS_MANAGER_NAME^^}_SERVER: http://$TARGET_SERVICE_NAME:3000/ |
||||
|
" |
@ -0,0 +1,24 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e |
||||
|
|
||||
|
. lib/common |
||||
|
|
||||
|
DOMAIN=$(relation-get domain) || exit 1 |
||||
|
PROTO=$(relation-get protocol) || true |
||||
|
PROTO=${PROTO:-https} |
||||
|
|
||||
|
|
||||
|
## These are mainly to setup the correct web-hook |
||||
|
if [ "$MASTER_BASE_SERVICE_NAME" == "$DOMAIN" ]; then |
||||
|
## This is because the IP will be the docker container version |
||||
|
PROTO=http |
||||
|
fi |
||||
|
|
||||
|
config-add "\ |
||||
|
services: |
||||
|
$MASTER_BASE_SERVICE_NAME: |
||||
|
environment: |
||||
|
DRONE_SERVER_HOST: $DOMAIN |
||||
|
DRONE_SERVER_PROTO: $PROTO |
||||
|
" |
@ -0,0 +1,3 @@ |
|||||
|
# -*- mode: shell-script -*- |
||||
|
|
||||
|
|
@ -0,0 +1,49 @@ |
|||||
|
description: "Drone Server" |
||||
|
maintainer: "Valentin Lab <valentin.lab@kalysto.org>" |
||||
|
## XXXvlab: docker uses the 'build' directory or the 'image:' option here. |
||||
|
docker-image: docker.0k.io/drone:1.0 |
||||
|
docker-compose: |
||||
|
environment: |
||||
|
DRONE_OPEN: "true" ## users are authenticated through the vcs-manager anyway |
||||
|
|
||||
|
DRONE_GIT_ALWAYS_AUTH: "false" |
||||
|
DRONE_TLS_AUTOCERT: "false" |
||||
|
|
||||
|
## default database |
||||
|
DATABASE_DRIVER: sqlite3 |
||||
|
DATABASE_CONFIG: /data/drone.sqlite |
||||
|
|
||||
|
# GIN_MODE: release |
||||
|
|
||||
|
## Should probably offer an option in charm, with 'log.{}' |
||||
|
# DRONE_LOGS_DEBUG: "true" |
||||
|
# DRONE_LOGS_TEXT=true |
||||
|
# DRONE_LOGS_PRETTY=true |
||||
|
# DRONE_LOGS_COLOR=true |
||||
|
|
||||
|
data-resources: |
||||
|
- /data |
||||
|
|
||||
|
default-options: |
||||
|
|
||||
|
mode: single ## mode is 'single' or 'multi' |
||||
|
capacity: 2 ## only if mode is 'single' |
||||
|
#secret: ## only if mode is 'multi' |
||||
|
|
||||
|
uses: |
||||
|
vcs-manager: |
||||
|
#constraint: required | recommended | optional |
||||
|
#auto: pair | summon | none ## default: pair |
||||
|
constraint: required |
||||
|
auto: pair |
||||
|
solves: |
||||
|
feature: "Version control system manager" |
||||
|
web-proxy: |
||||
|
#constraint: required | recommended | optional |
||||
|
#auto: pair | summon | none ## default: pair |
||||
|
constraint: recommended |
||||
|
auto: pair |
||||
|
solves: |
||||
|
proxy: "Public access" |
||||
|
default-options: |
||||
|
target: !var-expand ${MASTER_BASE_SERVICE_NAME}:80 |
@ -0,0 +1,52 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
## Load action gets a first argument a DIRECTORY holding the necessary files. |
||||
|
## |
||||
|
## |
||||
|
|
||||
|
if [ -z "$SERVICE_DATASTORE" ]; then |
||||
|
echo "This script is meant to be run through 'compose' to work properly." >&2 |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
usage="$exname [-h|--help] KEYWORD" |
||||
|
|
||||
|
KEYWORD= |
||||
|
while [ "$1" ]; do |
||||
|
case "$1" in |
||||
|
"--help"|"-h") |
||||
|
print_usage |
||||
|
exit 0 |
||||
|
;; |
||||
|
*) |
||||
|
[ -z "$KEYWORD" ] && { KEYWORD=$1 ; shift ; continue ; } |
||||
|
err "Unexpected argument '$1'." |
||||
|
exit 1 |
||||
|
;; |
||||
|
esac |
||||
|
shift |
||||
|
done |
||||
|
|
||||
|
|
||||
|
if [ -z "$KEYWORD" ]; then |
||||
|
err "You must provide a keyword as first argument." |
||||
|
print_usage |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
. "$CHARM_PATH/lib/common" |
||||
|
|
||||
|
## This can work only if ~/.pgpass is correctly created by init. |
||||
|
|
||||
|
case "$KEYWORD" in |
||||
|
url) |
||||
|
ini get server ROOT_URL || true |
||||
|
;; |
||||
|
name) |
||||
|
echo gitea |
||||
|
;; |
||||
|
*) |
||||
|
err "Unknown keyword $KEYWORD." |
||||
|
exit 1 |
||||
|
;; |
||||
|
esac |
Write
Preview
Loading…
Cancel
Save
Reference in new issue