Added the template for Project Harbor (Cattle only)
This commit is contained in:
parent
fd6e652191
commit
f6bcbf9ffd
14
templates/project-harbor/0/README.md
Normal file
14
templates/project-harbor/0/README.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
##Harbor 0.5.0 deployment: single-host (revision 0)
|
||||||
|
|
||||||
|
This version deploys `Harbor` 0.5.0 on a single host of a Cattle cluster.
|
||||||
|
|
||||||
|
The host is identified, by default, by the `harbor-host=true` label (can be changed at deployment time to point to another key).
|
||||||
|
|
||||||
|
Note that:
|
||||||
|
- the `IP/Hostname/FQDN` parameter needs to be set to the exact same name you will use to access the registry (e.g. IP or FQDN of the host)
|
||||||
|
- the host needs to have port `80` and port `443` free for use (the Harbor proxy container will bind to those ports)
|
||||||
|
- this catalog entry only supports `http` (`https` access is not supported)
|
||||||
|
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
|
||||||
|
- if you want to re-provision Harbor on the same Docker host and you want to use different inputs (e.g. a different password) you need to remove the `/data` directory on the host. If you fail to do so the new Harbor instance will use the same parameters entered in the previous deployment (saved in the `/data` directory)
|
||||||
|
|
||||||
|

|
168
templates/project-harbor/0/docker-compose.yml
Normal file
168
templates/project-harbor/0/docker-compose.yml
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
harbor-setupwrapper:
|
||||||
|
image: mreferre/harbor-setupwrapper:0.5.0
|
||||||
|
container_name: harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- HARBORHOSTNAME=${harborhostname}
|
||||||
|
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
|
||||||
|
volumes:
|
||||||
|
- /etc/registry
|
||||||
|
- /etc/ui
|
||||||
|
- /etc/jobservice
|
||||||
|
- /etc/nginx
|
||||||
|
- /configdb
|
||||||
|
- /configui
|
||||||
|
- /configjobservice
|
||||||
|
command: ["/harbor/harbor-setupwrapper.sh"]
|
||||||
|
network_mode: "none"
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.container.start_once: 'true'
|
||||||
|
io.rancher.sidekicks: registry, ui, jobservice, mysql, proxy
|
||||||
|
log:
|
||||||
|
image: vmware/harbor-log:0.5.0
|
||||||
|
container_name: harbor-log
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/log/harbor:/var/log/docker/
|
||||||
|
ports:
|
||||||
|
- 1514:514
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
registry:
|
||||||
|
image: library/registry:2.5.0
|
||||||
|
container_name: registry
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/registry:/storage
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- GODEBUG=netdns=cgo
|
||||||
|
command:
|
||||||
|
["serve", "/etc/registry/config.yml"]
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "registry"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
mysql:
|
||||||
|
image: vmware/harbor-db:0.5.0
|
||||||
|
container_name: harbor-db
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/database:/var/lib/mysql
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "mysql"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configdb/entrypointdb.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
ui:
|
||||||
|
image: vmware/harbor-ui:0.5.0
|
||||||
|
container_name: harbor-ui
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data:/harbor_storage
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "ui"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configui/entrypointui.sh
|
||||||
|
external_links:
|
||||||
|
- registry
|
||||||
|
- mysql
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
jobservice:
|
||||||
|
image: vmware/harbor-jobservice:0.5.0
|
||||||
|
container_name: harbor-jobservice
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/job_logs:/var/log/jobs
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
#external_links:
|
||||||
|
# - registry
|
||||||
|
# - ui
|
||||||
|
# - mysql
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "jobservice"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configjobservice/entrypointjobservice.sh
|
||||||
|
#external_links:
|
||||||
|
# - registry
|
||||||
|
# - ui
|
||||||
|
# - mysql
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
proxy:
|
||||||
|
image: nginx:1.11.5
|
||||||
|
container_name: nginx
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
- 443:443
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
#external_links:
|
||||||
|
# - registry
|
||||||
|
# - ui
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "proxy"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
48
templates/project-harbor/0/rancher-compose.yml
Normal file
48
templates/project-harbor/0/rancher-compose.yml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
version: '2'
|
||||||
|
.catalog:
|
||||||
|
name: Harbor
|
||||||
|
version: 0.5.0-singlehost-rev0
|
||||||
|
description: |
|
||||||
|
Enterprise Class Container Registry by VMware
|
||||||
|
minimum_rancher_version: v0.59.0
|
||||||
|
uuid: harbor-0
|
||||||
|
questions:
|
||||||
|
- variable: "harborhostname"
|
||||||
|
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
|
||||||
|
label: "IP/Hostname/FQDN:"
|
||||||
|
required: true
|
||||||
|
default: myregistry
|
||||||
|
type: "string"
|
||||||
|
- variable: "harbor_admin_password"
|
||||||
|
label: "Harbor password:"
|
||||||
|
description: |
|
||||||
|
Harbor admin password
|
||||||
|
default: Vmware123!
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "harborhostlabel"
|
||||||
|
label: "Harbor will be deployed on the host with this label (default: harbor-host=true)"
|
||||||
|
description: |
|
||||||
|
Harbor host label
|
||||||
|
default: harbor-host=true
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
services:
|
||||||
|
registry:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
proxy:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
jobservice:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
ui:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
mysql:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
harbor-setupwrapper:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: true
|
BIN
templates/project-harbor/0/singlehost.png
Normal file
BIN
templates/project-harbor/0/singlehost.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 222 KiB |
18
templates/project-harbor/1/README.md
Normal file
18
templates/project-harbor/1/README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
##Harbor 0.5.0 deployment: distributed (revision 0)
|
||||||
|
|
||||||
|
This version deploys `Harbor` 0.5.0 on a Cattle cluster.
|
||||||
|
|
||||||
|
All hosts have to have the `harbor-log=true` label (the log container needs to be deployed on all of them).
|
||||||
|
|
||||||
|
Also, `Traefik` needs to be enabled on one of the host and a proper DNS configuration needs to be in place.
|
||||||
|
|
||||||
|
Last but not least a storage service for named volumes needs to be available (this catalog entry has been tested with `rancher-nfs` which needs to be activated separately and prior to launch the distributed Harbor deployment).
|
||||||
|
|
||||||
|
Note that:
|
||||||
|
- the `IP/Hostname/FQDN` can be arbitrary set but the `(Traefik) domain` parameter needs to be a domain name that resolves to the host where `Traefik` is running
|
||||||
|
- this catalog entry only supports `http` (`https` access is not supported)
|
||||||
|
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
|
||||||
|
- while the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
|
||||||
|
- sometimes the proxy front-end fails to configure properly (due to a race condition) and it shows the "welcome to NGINX" page. If it happens, try to re-deploy the restart the `proxy` container
|
||||||
|
|
||||||
|

|
BIN
templates/project-harbor/1/distributed.png
Normal file
BIN
templates/project-harbor/1/distributed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 253 KiB |
210
templates/project-harbor/1/docker-compose.yml
Normal file
210
templates/project-harbor/1/docker-compose.yml
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
version: '2'
|
||||||
|
volumes: #most volumes mappings require optimization (now all volumes map all containers)
|
||||||
|
etcjobservice:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcnginx:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcregistry:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcui:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configjobservice:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configdb:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configui:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data: #according to the eng team this is not even needed (but leaving it in for consistency)
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-registry:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-database:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-job_logs:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
services:
|
||||||
|
harbor-setupwrapper:
|
||||||
|
image: mreferre/harbor-setupwrapper:0.5.0
|
||||||
|
container_name: harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- HARBORHOSTNAME=${harborhostname}.${traefikdomain}
|
||||||
|
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
|
||||||
|
volumes:
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
command: ["/harbor/harbor-setupwrapper.sh"]
|
||||||
|
network_mode: "none"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.container.start_once: 'true'
|
||||||
|
log:
|
||||||
|
image: vmware/harbor-log:0.5.0
|
||||||
|
container_name: harbor-log
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/log/harbor/:/var/log/docker/
|
||||||
|
ports:
|
||||||
|
- 1514:514
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.global: 'true'
|
||||||
|
io.rancher.scheduler.affinity:host_label: harbor-log=true
|
||||||
|
io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
registry:
|
||||||
|
image: library/registry:2.5.0
|
||||||
|
container_name: registry
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-registry:/storage
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
environment:
|
||||||
|
- GODEBUG=netdns=cgo
|
||||||
|
command:
|
||||||
|
["serve", "/etc/registry/config.yml"]
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "registry"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
mysql:
|
||||||
|
image: vmware/harbor-db:0.5.0
|
||||||
|
container_name: harbor-db
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "mysql"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configdb/entrypointdb.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
ui:
|
||||||
|
image: vmware/harbor-ui:0.5.0
|
||||||
|
container_name: harbor-ui
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data:/harbor_storage #according to the eng team this is not even needed (but leaving it in for consistency)
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "ui"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configui/entrypointui.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
jobservice:
|
||||||
|
image: vmware/harbor-jobservice:0.5.0
|
||||||
|
container_name: harbor-jobservice
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "jobservice"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configjobservice/entrypointjobservice.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
proxy:
|
||||||
|
image: nginx:1.11.5
|
||||||
|
container_name: nginx
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
external_links: #these entries seem to be required for the proxy service to start correctly
|
||||||
|
- registry
|
||||||
|
- ui
|
||||||
|
- mysql
|
||||||
|
- jobservice
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "proxy"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
traefik.alias: ${harborhostname}
|
||||||
|
traefik.port: 80
|
||||||
|
traefik.domain: ${traefikdomain}
|
||||||
|
traefik.enable: stack
|
56
templates/project-harbor/1/rancher-compose.yml
Normal file
56
templates/project-harbor/1/rancher-compose.yml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
version: '2'
|
||||||
|
.catalog:
|
||||||
|
name: Harbor
|
||||||
|
version: 0.5.0-distributed-rev0
|
||||||
|
description: |
|
||||||
|
Enterprise Class Container Registry by VMware
|
||||||
|
minimum_rancher_version: v0.59.0
|
||||||
|
uuid: harbor-0
|
||||||
|
questions:
|
||||||
|
- variable: "harborhostname"
|
||||||
|
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
|
||||||
|
label: "IP/Hostname/FQDN:"
|
||||||
|
required: true
|
||||||
|
default: myregistry
|
||||||
|
type: "string"
|
||||||
|
- variable: "harbor_admin_password"
|
||||||
|
label: "Harbor password:"
|
||||||
|
description: |
|
||||||
|
Harbor admin password
|
||||||
|
default: Vmware123!
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "traefikdomain"
|
||||||
|
description: "Harbor domain name (if you are using Traefik you should call out the domain here and the harbor host name should just represent the hostname)"
|
||||||
|
label: "(Traefik) domain:"
|
||||||
|
required: true
|
||||||
|
default: mycompany.com
|
||||||
|
type: "string"
|
||||||
|
- variable: "volumedriver"
|
||||||
|
description: "Volume Driver being used (default: rancher-nfs)"
|
||||||
|
label: "Volume Driver:"
|
||||||
|
required: true
|
||||||
|
default: rancher-nfs
|
||||||
|
type: "string"
|
||||||
|
services:
|
||||||
|
registry:
|
||||||
|
scale: 1
|
||||||
|
proxy:
|
||||||
|
scale: 1
|
||||||
|
health_check:
|
||||||
|
healthy_threshold: 2
|
||||||
|
response_timeout: 2000
|
||||||
|
port: 80
|
||||||
|
unhealthy_threshold: 3
|
||||||
|
initializing_timeout: 60000
|
||||||
|
interval: 2000
|
||||||
|
strategy: recreate
|
||||||
|
request_line:
|
||||||
|
jobservice:
|
||||||
|
scale: 1
|
||||||
|
ui:
|
||||||
|
scale: 1
|
||||||
|
mysql:
|
||||||
|
scale: 1
|
||||||
|
harbor-setupwrapper:
|
||||||
|
scale: 1
|
15
templates/project-harbor/2/README.md
Normal file
15
templates/project-harbor/2/README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
##Harbor 1.1.1 deployment: single-host (revision 0)
|
||||||
|
|
||||||
|
This version deploys `Harbor` 1.1.1 on a single host of a Cattle cluster.
|
||||||
|
|
||||||
|
The host is identified, by default, by the `harbor-host=true` label (can be changed at deployment time to point to another key).
|
||||||
|
|
||||||
|
Note that:
|
||||||
|
- the `IP/Hostname/FQDN` parameter needs to be set to the exact same name you will use to access the registry (e.g. IP or FQDN of the host)
|
||||||
|
- the host needs to have port `80` and port `443` free for use (the Harbor proxy container will bind to those ports)
|
||||||
|
- this catalog entry only supports `http` (`https` access is not supported)
|
||||||
|
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
|
||||||
|
- if you want to re-provision Harbor on the same Docker host and you want to use different inputs (e.g. a different password) you need to remove the `/data` directory on the host. If you fail to do so the new Harbor instance will use the same parameters entered in the previous deployment (saved in the `/data` directory)
|
||||||
|
- While the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
|
||||||
|
|
||||||
|

|
207
templates/project-harbor/2/docker-compose.yml
Normal file
207
templates/project-harbor/2/docker-compose.yml
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
harbor-setupwrapper:
|
||||||
|
image: mreferre/harbor-setupwrapper:1.1.1-1
|
||||||
|
container_name: harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- HARBORHOSTNAME=${harborhostname}
|
||||||
|
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
|
||||||
|
volumes:
|
||||||
|
- /data:/data
|
||||||
|
- /etc/registry
|
||||||
|
- /etc/ui
|
||||||
|
- /etc/jobservice
|
||||||
|
- /etc/nginx
|
||||||
|
- /configdb
|
||||||
|
- /configui
|
||||||
|
- /configjobservice
|
||||||
|
- /configadminserver
|
||||||
|
command: ["/harbor/harbor-setupwrapper.sh"]
|
||||||
|
network_mode: "none"
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.container.start_once: 'true'
|
||||||
|
io.rancher.sidekicks: registry, ui, jobservice, mysql, proxy, adminserver
|
||||||
|
log:
|
||||||
|
image: vmware/harbor-log:v1.1.1
|
||||||
|
container_name: harbor-log
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/log/harbor:/var/log/docker/:z
|
||||||
|
ports:
|
||||||
|
- 1514:514
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
registry:
|
||||||
|
image: vmware/registry:photon-2.6.0
|
||||||
|
container_name: registry
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/registry:/storage:z
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- GODEBUG=netdns=cgo
|
||||||
|
command:
|
||||||
|
["serve", "/etc/registry/config.yml"]
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "registry"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
mysql:
|
||||||
|
image: vmware/harbor-db:v1.1.1
|
||||||
|
container_name: harbor-db
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/database:/var/lib/mysql:z
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "mysql"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configdb/entrypointdb.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
adminserver:
|
||||||
|
image: vmware/harbor-adminserver:v1.1.1
|
||||||
|
container_name: harbor-adminserver
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/config/:/etc/adminserver/config/:z
|
||||||
|
# - /data/secretkey:/etc/adminserver/key:z
|
||||||
|
# - /data/:/data/:z
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "adminserver"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configadminserver/entrypointadminserver.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
ui:
|
||||||
|
image: vmware/harbor-ui:v1.1.1
|
||||||
|
container_name: harbor-ui
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
# - /data/secretkey:/etc/ui/key:z
|
||||||
|
- /data/ca_download/:/etc/ui/ca/:z
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- adminserver
|
||||||
|
- registry
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "ui"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configui/entrypointui.sh
|
||||||
|
external_links:
|
||||||
|
- registry
|
||||||
|
- mysql
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
jobservice:
|
||||||
|
image: vmware/harbor-jobservice:v1.1.1
|
||||||
|
container_name: harbor-jobservice
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes: #original directory mapping has been moved to named volumes
|
||||||
|
- /data/job_logs:/var/log/jobs:z
|
||||||
|
# - /data/secretkey:/etc/jobservice/key:z
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- ui
|
||||||
|
- adminserver
|
||||||
|
#external_links:
|
||||||
|
# - registry
|
||||||
|
# - ui
|
||||||
|
# - mysql
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "jobservice"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configjobservice/entrypointjobservice.sh
|
||||||
|
#external_links:
|
||||||
|
# - registry
|
||||||
|
# - ui
|
||||||
|
# - mysql
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
proxy:
|
||||||
|
image: vmware/nginx:1.11.5-patched
|
||||||
|
container_name: nginx
|
||||||
|
restart: always
|
||||||
|
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
|
||||||
|
- harbor-setupwrapper
|
||||||
|
volumes_from:
|
||||||
|
- harbor-setupwrapper
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
- 443:443
|
||||||
|
- 4443:4443
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
- registry
|
||||||
|
- ui
|
||||||
|
- log
|
||||||
|
#external_links:
|
||||||
|
# - registry
|
||||||
|
# - ui
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "proxy"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
51
templates/project-harbor/2/rancher-compose.yml
Normal file
51
templates/project-harbor/2/rancher-compose.yml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
version: '2'
|
||||||
|
.catalog:
|
||||||
|
name: Harbor
|
||||||
|
version: 1.1.1-singlehost-rev0
|
||||||
|
description: |
|
||||||
|
Enterprise Class Container Registry [by VMware]
|
||||||
|
minimum_rancher_version: v0.59.0
|
||||||
|
uuid: harbor-2
|
||||||
|
questions:
|
||||||
|
- variable: "harborhostname"
|
||||||
|
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
|
||||||
|
label: "IP/Hostname/FQDN:"
|
||||||
|
required: true
|
||||||
|
default: myregistry
|
||||||
|
type: "string"
|
||||||
|
- variable: "harbor_admin_password"
|
||||||
|
label: "Harbor password:"
|
||||||
|
description: |
|
||||||
|
Harbor admin password
|
||||||
|
default: Vmware123!
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "harborhostlabel"
|
||||||
|
label: "Harbor will be deployed on the host with this label (default: harbor-host=true)"
|
||||||
|
description: |
|
||||||
|
Harbor host label
|
||||||
|
default: harbor-host=true
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
services:
|
||||||
|
registry:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
adminserver:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
proxy:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
jobservice:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
ui:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
mysql:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: false
|
||||||
|
harbor-setupwrapper:
|
||||||
|
scale: 1
|
||||||
|
start_on_create: true
|
BIN
templates/project-harbor/2/singlehost.png
Normal file
BIN
templates/project-harbor/2/singlehost.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 222 KiB |
18
templates/project-harbor/3/README.md
Normal file
18
templates/project-harbor/3/README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
##Harbor 1.1.1 deployment: distributed (revision 0)
|
||||||
|
|
||||||
|
This version deploys `Harbor` 1.1.1 on a Cattle cluster.
|
||||||
|
|
||||||
|
All hosts have to have the `harbor-log=true` label (the log container needs to be deployed on all of them).
|
||||||
|
|
||||||
|
Also, `Traefik` needs to be enabled on one of the host and a proper DNS configuration needs to be in place.
|
||||||
|
|
||||||
|
Last but not least a storage service for named volumes needs to be available (this catalog entry has been tested with `rancher-nfs` which needs to be activated separately and prior to launch the distributed Harbor deployment).
|
||||||
|
|
||||||
|
Note that:
|
||||||
|
- the `IP/Hostname/FQDN` can be arbitrary set but the `(Traefik) domain` parameter needs to be a domain name that resolves to the host where `Traefik` is running
|
||||||
|
- this catalog entry only supports `http` (`https` access is not supported)
|
||||||
|
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
|
||||||
|
- while the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
|
||||||
|
- sometimes the proxy front-end fails to configure properly (due to a race condition) and it shows the "welcome to NGINX" page. If it happens, try to re-deploy the restart the `proxy` container
|
||||||
|
|
||||||
|

|
BIN
templates/project-harbor/3/distributed.png
Normal file
BIN
templates/project-harbor/3/distributed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 253 KiB |
290
templates/project-harbor/3/docker-compose.yml
Normal file
290
templates/project-harbor/3/docker-compose.yml
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
version: '2'
|
||||||
|
volumes: #most volumes mappings require optimization (now all volumes map all containers)
|
||||||
|
etcjobservice:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcnginx:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcregistry:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcui:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configjobservice:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configdb:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configui:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configadminserver:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data: #according to the eng team this is not even needed (but leaving it in for consistency)
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-registry:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-database:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-job_logs:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-ca_download:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-config:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
services:
|
||||||
|
harbor-setupwrapper:
|
||||||
|
image: mreferre/harbor-setupwrapper:1.1.1-1
|
||||||
|
container_name: harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- HARBORHOSTNAME=${harborhostname}.${traefikdomain}
|
||||||
|
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
|
||||||
|
volumes:
|
||||||
|
- data:/data
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
command: ["/harbor/harbor-setupwrapper.sh"]
|
||||||
|
network_mode: "none"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.container.start_once: 'true'
|
||||||
|
log:
|
||||||
|
image: vmware/harbor-log:v1.1.1
|
||||||
|
container_name: harbor-log
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/log/harbor/:/var/log/docker/:z
|
||||||
|
ports:
|
||||||
|
- 1514:514
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.global: 'true'
|
||||||
|
io.rancher.scheduler.affinity:host_label: harbor-log=true
|
||||||
|
io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
registry:
|
||||||
|
image: vmware/registry:photon-2.6.0
|
||||||
|
container_name: registry
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-registry:/storage
|
||||||
|
- data:/data
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
environment:
|
||||||
|
- GODEBUG=netdns=cgo
|
||||||
|
command:
|
||||||
|
["serve", "/etc/registry/config.yml"]
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "registry"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
mysql:
|
||||||
|
image: vmware/harbor-db:v1.1.1
|
||||||
|
container_name: harbor-db
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data:/data:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "mysql"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configdb/entrypointdb.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
adminserver:
|
||||||
|
image: vmware/harbor-adminserver:v1.1.1
|
||||||
|
container_name: harbor-adminserver
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
# - /data/secretkey:/etc/adminserver/key
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data:/data/:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "adminserver"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configadminserver/entrypointadminserver.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
ui:
|
||||||
|
image: vmware/harbor-ui:v1.1.1
|
||||||
|
container_name: harbor-ui
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
# - /data/secretkey:/etc/ui/key:z
|
||||||
|
# - data:/harbor_storage #according to the eng team this is not even needed (but leaving it in for consistency)
|
||||||
|
- data:/data/:z
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
- adminserver
|
||||||
|
- registry
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "ui"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configui/entrypointui.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
jobservice:
|
||||||
|
image: vmware/harbor-jobservice:v1.1.1
|
||||||
|
container_name: harbor-jobservice
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
# - /data/secretkey:/etc/jobservice/key:z
|
||||||
|
- data:/data/:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
- ui
|
||||||
|
- adminserver
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "jobservice"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configjobservice/entrypointjobservice.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
proxy:
|
||||||
|
image: vmware/nginx:1.11.5-patched
|
||||||
|
container_name: nginx
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data:/data/:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
- registry
|
||||||
|
- ui
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
external_links: #these entries seem to be required for the proxy service to start correctly
|
||||||
|
- registry
|
||||||
|
- ui
|
||||||
|
- mysql
|
||||||
|
- jobservice
|
||||||
|
- adminserver
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "proxy"
|
||||||
|
labels:
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
traefik.alias: ${harborhostname}
|
||||||
|
traefik.port: 80
|
||||||
|
traefik.domain: ${traefikdomain}
|
||||||
|
traefik.enable: stack
|
58
templates/project-harbor/3/rancher-compose.yml
Normal file
58
templates/project-harbor/3/rancher-compose.yml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
version: '2'
|
||||||
|
.catalog:
|
||||||
|
name: Harbor
|
||||||
|
version: 1.1.1-distributed-rev0
|
||||||
|
description: |
|
||||||
|
Enterprise Class Container Registry [by VMware]
|
||||||
|
minimum_rancher_version: v0.59.0
|
||||||
|
uuid: harbor-3
|
||||||
|
questions:
|
||||||
|
- variable: "harborhostname"
|
||||||
|
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
|
||||||
|
label: "IP/Hostname/FQDN:"
|
||||||
|
required: true
|
||||||
|
default: myregistry
|
||||||
|
type: "string"
|
||||||
|
- variable: "harbor_admin_password"
|
||||||
|
label: "Harbor password:"
|
||||||
|
description: |
|
||||||
|
Harbor admin password
|
||||||
|
default: Vmware123!
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "traefikdomain"
|
||||||
|
description: "Harbor domain name (if you are using Traefik you should call out the domain here and the harbor host name should just represent the hostname)"
|
||||||
|
label: "(Traefik) domain:"
|
||||||
|
required: true
|
||||||
|
default: mycompany.com
|
||||||
|
type: "string"
|
||||||
|
- variable: "volumedriver"
|
||||||
|
description: "Volume Driver being used (default: rancher-nfs)"
|
||||||
|
label: "Volume Driver:"
|
||||||
|
required: true
|
||||||
|
default: rancher-nfs
|
||||||
|
type: "string"
|
||||||
|
services:
|
||||||
|
registry:
|
||||||
|
scale: 1
|
||||||
|
adminserver:
|
||||||
|
scale: 1
|
||||||
|
proxy:
|
||||||
|
scale: 1
|
||||||
|
health_check:
|
||||||
|
healthy_threshold: 2
|
||||||
|
response_timeout: 2000
|
||||||
|
port: 80
|
||||||
|
unhealthy_threshold: 3
|
||||||
|
initializing_timeout: 60000
|
||||||
|
interval: 2000
|
||||||
|
strategy: recreate
|
||||||
|
request_line:
|
||||||
|
jobservice:
|
||||||
|
scale: 1
|
||||||
|
ui:
|
||||||
|
scale: 1
|
||||||
|
mysql:
|
||||||
|
scale: 1
|
||||||
|
harbor-setupwrapper:
|
||||||
|
scale: 1
|
44
templates/project-harbor/4/README.md
Normal file
44
templates/project-harbor/4/README.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
### Harbor 1.1.1 deployment (revision 1) ###
|
||||||
|
|
||||||
|
This catalog item version deploys `Harbor` 1.1.1 on a Cattle cluster and leverages [Harbor setup wrapper](https://hub.docker.com/r/mreferre/harbor-setupwrapper/tags/) version 1.1.1-1.
|
||||||
|
|
||||||
|
This catalog item version supports both a basic (i.e. standalone) as well as advanced (i.e. distributed) deployment model for Harbor.
|
||||||
|
|
||||||
|
The basic model has less pre-requisites but it's less powerful. The advanced model has more pre-requisites but it's more powerful.
|
||||||
|
|
||||||
|
#### Governing the deployment model ####
|
||||||
|
|
||||||
|
You govern the deployment model being used by setting the `harbor-host` label:
|
||||||
|
- if you set the label on one host, you opt in for the basic model.
|
||||||
|
- if you set the label on two or more hosts, you opt in for the advanced model.
|
||||||
|
|
||||||
|
#### Storage pre-requisites ####
|
||||||
|
|
||||||
|
If you opt in for the basic model there is no storage prerequisite and you can use the `local` volume driver. All volumes will be created locally and transparently on the host with the `harbor-host` label.
|
||||||
|
|
||||||
|
If you opt in for the advanced model you have to configure a volume driver that supports sharing among containers (this catalog entry has been tested with `rancher-nfs` which needs to be activated separately and prior to launch the advanced deployment model).
|
||||||
|
|
||||||
|
You can use a volume driver that supports sharing among containers when deploying with the basic model but it is not required.
|
||||||
|
|
||||||
|
#### Network pre-requisites ####
|
||||||
|
|
||||||
|
The network pre-requisites as described in this section apply to both the basic and advanced deployment models.
|
||||||
|
|
||||||
|
> **Note:** the Harbor name you choose at deployment time must be the exact same end-point (IP, FQDN, etc) that you are going to use with your Docker client to `login` into Harbor, `pull` and `push` images from and to Harbor. This has ramification on how you configure access to the Harbor service.
|
||||||
|
|
||||||
|
In this implementation, access to Harbor is fullfilled by a Rancher load balancer that forwards the host port 80 to port 80 of the Harbor proxy container. The Rancher load balancer is deployed on all hosts that have the `harbor-lb-host` label.
|
||||||
|
|
||||||
|
The simplest way to configure the deployment is to set the `harbor-lb-host` label on a single host and use the IP address (or FQDN) of that host in the Harbor `IP/Hostname/FQDN` field. This IP (or FQDN) is what you will use to consume Harbor.
|
||||||
|
|
||||||
|
A more sophisticated way to configure the deployment is to set the `harbor-lb-host` label on multiple hosts and have an external component (e.g. DNS with RR, or external LB) that can send requests to multiple hosts. In this case the Harbor `IP/Hostname/FQDN` field will need to be filled with the FQDN as provided by the DNS or by the external LB (virtual IP). This DNS name (or virtual IP) is what you will use to consume Harbor.
|
||||||
|
|
||||||
|
In general, the only real prerequisite is that the `IP/Hostname/FQDN` field at deployment time maps exactly what the user will be using as an endpoint when interacting with the Harbor service. You should have a certain degree of flexibility to configure your deployment as long as you fullfill this requirement.
|
||||||
|
|
||||||
|
#### Additional considerations and known issues ####
|
||||||
|
|
||||||
|
- this catalog entry only supports `http` (`https` access is not supported)
|
||||||
|
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
|
||||||
|
- the host(s) with the `harbor-lb-host` label need to have port `80` free for use (different port forwarding configurations hasn't been tested)
|
||||||
|
- while the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
|
||||||
|
- sometimes the proxy front-end fails to configure properly (due to a race condition) and it shows the "welcome to NGINX" page. If it happens, try to re-deploy the restart the `proxy` container
|
||||||
|
- every Harbor deployment will create a certain number of volumes. Note that these volumes may not always be properly deleted on the NFS share or on the local Docker host due to bug and/or limitations in the driver(s). It is suggested to keep an eye on volumes sprawl.
|
299
templates/project-harbor/4/docker-compose.yml
Normal file
299
templates/project-harbor/4/docker-compose.yml
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
version: '2'
|
||||||
|
volumes: #most volumes mappings require optimization (now all volumes map all containers)
|
||||||
|
etcjobservice:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcnginx:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcregistry:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
etcui:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configjobservice:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configdb:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configui:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
configadminserver:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data: #according to the eng team this is not even needed (but leaving it in for consistency)
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-registry:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-database:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-job_logs:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-ca_download:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
data-config:
|
||||||
|
#external: true
|
||||||
|
driver: ${volumedriver}
|
||||||
|
services:
|
||||||
|
harbor-setupwrapper:
|
||||||
|
image: mreferre/harbor-setupwrapper:1.1.1-1
|
||||||
|
container_name: harbor-setupwrapper
|
||||||
|
environment:
|
||||||
|
- HARBORHOSTNAME=${harborhostname}.${traefikdomain}
|
||||||
|
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
|
||||||
|
volumes:
|
||||||
|
- data:/data
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
command: ["/harbor/harbor-setupwrapper.sh"]
|
||||||
|
network_mode: "none"
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
io.rancher.container.start_once: 'true'
|
||||||
|
log:
|
||||||
|
image: vmware/harbor-log:v1.1.1
|
||||||
|
container_name: harbor-log
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/log/harbor/:/var/log/docker/:z
|
||||||
|
ports:
|
||||||
|
- 1514:514
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.global: 'true'
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
registry:
|
||||||
|
image: vmware/registry:photon-2.6.0
|
||||||
|
container_name: registry
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-registry:/storage
|
||||||
|
- data:/data
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
environment:
|
||||||
|
- GODEBUG=netdns=cgo
|
||||||
|
command:
|
||||||
|
["serve", "/etc/registry/config.yml"]
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "registry"
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
mysql:
|
||||||
|
image: vmware/harbor-db:v1.1.1
|
||||||
|
container_name: harbor-db
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data:/data:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "mysql"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configdb/entrypointdb.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
adminserver:
|
||||||
|
image: vmware/harbor-adminserver:v1.1.1
|
||||||
|
container_name: harbor-adminserver
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
# - /data/secretkey:/etc/adminserver/key
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data:/data/:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "adminserver"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configadminserver/entrypointadminserver.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
ui:
|
||||||
|
image: vmware/harbor-ui:v1.1.1
|
||||||
|
container_name: harbor-ui
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data:/data/:z
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
- adminserver
|
||||||
|
- registry
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "ui"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configui/entrypointui.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
jobservice:
|
||||||
|
image: vmware/harbor-jobservice:v1.1.1
|
||||||
|
container_name: harbor-jobservice
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
# - /data/secretkey:/etc/jobservice/key:z
|
||||||
|
- data:/data/:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
- ui
|
||||||
|
- adminserver
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "jobservice"
|
||||||
|
entrypoint:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- /configjobservice/entrypointjobservice.sh
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
proxy:
|
||||||
|
image: vmware/nginx:1.11.5-patched
|
||||||
|
container_name: nginx
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- data-database:/var/lib/mysql
|
||||||
|
- data:/data/:z
|
||||||
|
- data-job_logs:/var/log/jobs
|
||||||
|
- data-ca_download:/etc/ui/ca/
|
||||||
|
- data-config:/etc/adminserver/config/
|
||||||
|
- etcui:/etc/ui
|
||||||
|
- etcjobservice:/etc/jobservice
|
||||||
|
- etcregistry:/etc/registry
|
||||||
|
- etcnginx:/etc/nginx
|
||||||
|
- configdb:/configdb
|
||||||
|
- configui:/configui
|
||||||
|
- configjobservice:/configjobservice
|
||||||
|
- configadminserver:/configadminserver
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
- registry
|
||||||
|
- ui
|
||||||
|
- log
|
||||||
|
- harbor-setupwrapper
|
||||||
|
external_links: #these entries seem to be required for the proxy service to start correctly
|
||||||
|
- registry
|
||||||
|
- ui
|
||||||
|
- mysql
|
||||||
|
- jobservice
|
||||||
|
- adminserver
|
||||||
|
logging:
|
||||||
|
driver: "syslog"
|
||||||
|
options:
|
||||||
|
syslog-address: "tcp://127.0.0.1:1514"
|
||||||
|
tag: "proxy"
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
||||||
|
harbor-lb:
|
||||||
|
image: rancher/lb-service-haproxy
|
||||||
|
ports:
|
||||||
|
- 80
|
||||||
|
labels:
|
||||||
|
io.rancher.scheduler.global: 'true'
|
||||||
|
io.rancher.scheduler.affinity:host_label: ${harborlbhostlabel}
|
||||||
|
io.rancher.container.hostname_override: container_name
|
75
templates/project-harbor/4/rancher-compose.yml
Normal file
75
templates/project-harbor/4/rancher-compose.yml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
version: '2'
|
||||||
|
.catalog:
|
||||||
|
name: Harbor
|
||||||
|
version: 1.1.1-1-rev1
|
||||||
|
description: |
|
||||||
|
Enterprise Class Container Registry [by VMware]
|
||||||
|
minimum_rancher_version: v0.59.0
|
||||||
|
uuid: harbor-4
|
||||||
|
questions:
|
||||||
|
- variable: "harborhostname"
|
||||||
|
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
|
||||||
|
label: "IP/Hostname/FQDN:"
|
||||||
|
required: true
|
||||||
|
default: myregistry
|
||||||
|
type: "string"
|
||||||
|
- variable: "harbor_admin_password"
|
||||||
|
label: "Harbor password:"
|
||||||
|
description: |
|
||||||
|
Harbor admin password
|
||||||
|
default: Vmware123!
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "harborhostlabel"
|
||||||
|
label: "Harbor will be deployed on the host(s) with this label (default: harbor-host=true)"
|
||||||
|
description: |
|
||||||
|
The various Harbor containers will be deployed on host(s) with this label
|
||||||
|
Set the label on one host if you want Harbor to be deployed on a single host (rancher-nfs volume driver is required for multiple hosts)
|
||||||
|
default: harbor-host=true
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "harborlbhostlabel"
|
||||||
|
label: "Rancher load balancer will be deployed on the host(s) with this label (default: harbor-lb-host=true)"
|
||||||
|
description: |
|
||||||
|
The Rancher load balancer will be deployed on host(s) with this label
|
||||||
|
Make sure you understand the pre-requisite as outlined in the README document above
|
||||||
|
default: harbor-lb-host=true
|
||||||
|
required: true
|
||||||
|
type: "string"
|
||||||
|
- variable: "volumedriver"
|
||||||
|
description: "Volume Driver being used. Set rancher-nfs if you run in distributed mode"
|
||||||
|
label: "Volume Driver:"
|
||||||
|
required: true
|
||||||
|
default: local
|
||||||
|
type: "enum"
|
||||||
|
options:
|
||||||
|
- local
|
||||||
|
- rancher-nfs
|
||||||
|
services:
|
||||||
|
registry:
|
||||||
|
scale: 1
|
||||||
|
adminserver:
|
||||||
|
scale: 1
|
||||||
|
proxy:
|
||||||
|
scale: 1
|
||||||
|
harbor-lb:
|
||||||
|
scale: 1
|
||||||
|
lb_config:
|
||||||
|
port_rules:
|
||||||
|
- source_port: 80
|
||||||
|
target_port: 80
|
||||||
|
service: proxy
|
||||||
|
health_check:
|
||||||
|
port: 42
|
||||||
|
interval: 2000
|
||||||
|
unhealthy_threshold: 3
|
||||||
|
healthy_threshold: 2
|
||||||
|
response_timeout: 2000
|
||||||
|
jobservice:
|
||||||
|
scale: 1
|
||||||
|
ui:
|
||||||
|
scale: 1
|
||||||
|
mysql:
|
||||||
|
scale: 1
|
||||||
|
harbor-setupwrapper:
|
||||||
|
scale: 1
|
270
templates/project-harbor/catalogIcon-vmwareharbor.svg
Normal file
270
templates/project-harbor/catalogIcon-vmwareharbor.svg
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 637.5 225"
|
||||||
|
height="225"
|
||||||
|
width="637.5"
|
||||||
|
xml:space="preserve"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"><metadata
|
||||||
|
id="metadata8"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs6"><clipPath
|
||||||
|
id="clipPath34"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path36"
|
||||||
|
d="M 1006.51,526.57 798.98,618.02 787.426,487.43 1015.64,414.922 1006.51,526.57 Z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient38"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(228.215,0,0,-228.215,787.427,516.47)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop40"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop42"
|
||||||
|
offset="0.28177946"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop44"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
|
||||||
|
id="clipPath52"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path54"
|
||||||
|
d="m 839.609,1031.79 116.543,0 0,-99.427 -27.656,0 0,42.469 c 0,16.84 -13.773,30.618 -30.613,30.618 -16.84,0 -30.617,-13.778 -30.617,-30.618 l 0,-42.469 -27.657,0 0,99.427 z m -23.285,-217.767 172.906,-76.195 -11.921,145.813 22.629,0 0,48.722 -16.79,0 0,99.427 16.79,0 0,28.58 -93.254,91.25 0,6.42 c 0,4.84 -3.961,8.8 -8.801,8.8 -4.84,0 -8.801,-3.96 -8.801,-8.8 l 0,-6.42 -93.258,-91.25 0,-28.58 16.793,0 0,-99.427 -16.793,0 0,-48.722 26.66,0 -6.16,-69.618 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient56"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(204.111,0,0,-204.111,795.826,952.335)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop58"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop60"
|
||||||
|
offset="0.28177946"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop62"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
|
||||||
|
id="clipPath70"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path72"
|
||||||
|
d="m 806.199,699.59 193.121,-85.11 -2.898,35.442 -187.317,82.539 -2.906,-32.871 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient74"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(193.121,0,0,-193.121,806.199,673.47)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop76"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop78"
|
||||||
|
offset="0.28177946"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop80"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
|
||||||
|
id="clipPath88"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path90"
|
||||||
|
d="m 801.137,642.371 203.223,-89.562 -2.89,35.429 -197.423,87 -2.91,-32.867 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient92"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(203.228,0,0,-203.228,801.136,614.03)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop94"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop96"
|
||||||
|
offset="0.28177946"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop98"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
|
||||||
|
id="clipPath106"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path108"
|
||||||
|
d="m 814.172,789.68 -2.91,-32.879 183.015,-80.641 -2.898,35.43 -177.207,78.09 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient110"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(183.014,0,0,-183.014,811.262,732.92)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop112"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop114"
|
||||||
|
offset="0.28177946"
|
||||||
|
style="stop-opacity:1;stop-color:#60b932" /><stop
|
||||||
|
id="stop116"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
|
||||||
|
id="clipPath130"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path132"
|
||||||
|
d="m 1425.85,1236.72 c -26.54,31.73 -56.72,60.31 -89.93,85.04 -4.76,3.54 -9.6,6.96 -14.47,10.34 l -68.19,-70.92 -248.9,-258.85 342.73,177.37 87.87,45.47 c -3.04,3.85 -5.97,7.79 -9.11,11.55 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient134"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(398.333,295,295,-398.333,1007.12,1003.81)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop136"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#4596d8" /><stop
|
||||||
|
id="stop138"
|
||||||
|
offset="0.2"
|
||||||
|
style="stop-opacity:1;stop-color:#4596d8" /><stop
|
||||||
|
id="stop140"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient><clipPath
|
||||||
|
id="clipPath148"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path150"
|
||||||
|
d="m 1548.16,904.152 c -0.05,6.012 -0.41,11.946 -0.66,17.911 l -97.38,6.988 -445.76,31.992 437.31,-151.719 91.93,-31.894 c 0.27,1.09 0.58,2.16 0.84,3.261 8.94,38.36 13.82,78.262 13.82,119.309 0,1.391 -0.09,2.762 -0.1,4.152 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient152"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(571.667,-116.667,-116.667,-571.667,1004,959.247)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop154"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#4194d7" /><stop
|
||||||
|
id="stop156"
|
||||||
|
offset="0.2"
|
||||||
|
style="stop-opacity:1;stop-color:#4194d7" /><stop
|
||||||
|
id="stop158"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient><clipPath
|
||||||
|
id="clipPath166"
|
||||||
|
clipPathUnits="userSpaceOnUse"><path
|
||||||
|
id="path168"
|
||||||
|
d="m 1533.81,1022.04 c -9.54,39.96 -23.71,78.1 -41.81,113.96 l -93.52,-30.05 -387.37,-124.485 429.18,14.613 98.25,3.348 c -1.46,7.574 -2.95,15.144 -4.73,22.614 z" /></clipPath><linearGradient
|
||||||
|
id="linearGradient170"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(526.667,95,95,-526.667,1012.79,977.078)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="0"
|
||||||
|
x2="1"
|
||||||
|
y1="0"
|
||||||
|
x1="0"><stop
|
||||||
|
id="stop172"
|
||||||
|
offset="0"
|
||||||
|
style="stop-opacity:1;stop-color:#4194d7" /><stop
|
||||||
|
id="stop174"
|
||||||
|
offset="0.332637"
|
||||||
|
style="stop-opacity:1;stop-color:#4496d8" /><stop
|
||||||
|
id="stop176"
|
||||||
|
offset="1"
|
||||||
|
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient></defs><g
|
||||||
|
transform="matrix(1.25,0,0,-1.25,0,225)"
|
||||||
|
id="g10"><g
|
||||||
|
transform="scale(0.1,0.1)"
|
||||||
|
id="g12"><path
|
||||||
|
id="path14"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 572.695,900 c 0,248.53 201.473,450 450.005,450 248.52,0 450,-201.47 450,-450 0,-248.531 -201.48,-450 -450,-450 -248.532,0 -450.005,201.469 -450.005,450" /><path
|
||||||
|
id="path16"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 1776.93,1083.54 c 0,13.16 10.77,23.94 23.34,23.94 13.16,0 23.93,-10.78 23.93,-23.94 l 0,-165.177 241.78,0 0,165.177 c 0,13.16 10.77,23.94 23.93,23.94 12.57,0 23.34,-10.78 23.34,-23.94 l 0,-377.028 c 0,-13.172 -10.77,-23.942 -23.34,-23.942 -13.16,0 -23.93,10.77 -23.93,23.942 l 0,167.566 -241.78,0 0,-167.566 c 0,-13.172 -10.77,-23.942 -23.93,-23.942 -12.57,0 -23.34,10.77 -23.34,23.942 l 0,377.028" /><path
|
||||||
|
id="path18"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 2483.73,839.371 -96.35,214.239 -96.35,-214.239 192.7,0 z M 2187.5,716.68 l 169.96,371.64 c 5.98,13.17 14.96,20.95 29.92,20.95 l 2.4,0 c 14.36,0 23.93,-7.78 29.32,-20.95 l 169.95,-371.031 c 1.8,-4.187 3,-8.379 3,-11.969 0,-12.57 -10.17,-22.75 -22.74,-22.75 -11.37,0 -19.15,7.782 -23.34,17.36 l -43.68,96.351 -229.81,0 -43.69,-97.551 c -4.19,-10.171 -11.96,-16.16 -22.75,-16.16 -11.96,0 -21.54,9.578 -21.54,21.551 0,3.59 0.61,7.777 3,12.559" /><path
|
||||||
|
id="path20"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 2839.84,890.836 c 62.84,0 107.72,32.312 107.72,86.176 l 0,1.195 c 0,51.463 -39.49,82.593 -107.12,82.593 l -129.27,0 0,-169.964 128.67,0 z M 2663.9,1080.54 c 0,13.17 10.77,23.94 23.34,23.94 l 156.78,0 c 51.48,0 92.77,-15.56 119.1,-41.89 20.35,-20.35 32.32,-49.67 32.32,-82.586 l 0,-1.195 c 0,-68.825 -46.68,-108.922 -111.91,-121.489 l 104.13,-134.05 c 4.78,-5.391 7.78,-10.77 7.78,-17.36 0,-12.57 -11.97,-23.34 -23.95,-23.34 -9.57,0 -16.74,5.391 -22.13,12.571 l -117.9,153.203 -120.29,0 0,-141.832 c 0,-13.172 -10.77,-23.942 -23.93,-23.942 -12.57,0 -23.34,10.77 -23.34,23.942 l 0,374.028" /><path
|
||||||
|
id="path22"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 3265.37,728.059 c 63.44,0 102.93,28.121 102.93,74.8 l 0,1.2 c 0,45.484 -38.3,71.816 -111.31,71.816 l -132.25,0 0,-147.816 140.63,0 z m -16.76,189.707 c 56.86,0 96.35,25.73 96.35,74.808 l 0,1.196 c 0,41.29 -32.91,68.22 -92.75,68.22 l -127.47,0 0,-144.224 123.87,0 z m -170.55,162.774 c 0,13.17 10.77,23.94 23.34,23.94 l 155,0 c 47.87,0 85.57,-13.76 109.51,-37.1 17.35,-17.95 26.93,-40.1 26.93,-67.03 l 0,-1.194 c 0,-54.461 -33.51,-82.59 -66.42,-96.949 49.66,-14.961 89.76,-43.687 89.76,-101.137 l 0,-1.199 c 0,-71.812 -60.45,-114.301 -152.01,-114.301 l -162.77,0 c -12.57,0 -23.34,10.77 -23.34,23.93 l 0,371.04" /><path
|
||||||
|
id="path24"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 3851.28,893.828 0,1.195 c 0,95.153 -69.42,172.947 -165.18,172.947 -95.75,0 -163.97,-76.599 -163.97,-171.747 l 0,-1.2 c 0,-95.152 69.42,-172.953 165.17,-172.953 95.76,0 163.98,76.602 163.98,171.758 z m -378.22,0 0,1.195 c 0,115.497 86.77,216.637 214.24,216.637 127.48,0 213.05,-99.94 213.05,-215.437 l 0,-1.2 c 0,-115.503 -86.78,-216.644 -214.25,-216.644 -127.47,0 -213.04,99.949 -213.04,215.449" /><path
|
||||||
|
id="path26"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 4157.73,890.836 c 62.84,0 107.72,32.312 107.72,86.176 l 0,1.195 c 0,51.463 -39.49,82.593 -107.12,82.593 l -129.27,0 0,-169.964 128.67,0 z m -175.94,189.704 c 0,13.17 10.77,23.94 23.34,23.94 l 156.78,0 c 51.48,0 92.77,-15.56 119.1,-41.89 20.35,-20.35 32.32,-49.67 32.32,-82.586 l 0,-1.195 c 0,-68.825 -46.68,-108.922 -111.91,-121.489 l 104.13,-134.05 c 4.78,-5.391 7.78,-10.77 7.78,-17.36 0,-12.57 -11.97,-23.34 -23.95,-23.34 -9.57,0 -16.74,5.391 -22.13,12.571 l -117.89,153.203 -120.3,0 0,-141.832 c 0,-13.172 -10.77,-23.942 -23.93,-23.942 -12.57,0 -23.34,10.77 -23.34,23.942 l 0,374.028" /><path
|
||||||
|
id="path28"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 4453.96,1101.82 c 0,4.53 3.13,7.68 7.67,7.68 l 2.09,0 c 3.15,0 5.24,-1.4 6.98,-3.85 l 37.69,-58.62 38.39,58.62 c 1.75,2.45 3.84,3.85 6.63,3.85 l 2.09,0 c 3.85,0 7.33,-3.49 7.33,-7.68 l 0,-94.22 c 0,-4.19 -3.48,-7.682 -7.67,-7.682 -4.19,0 -7.34,3.492 -7.34,7.682 l 0,72.58 -32.45,-48.5 c -1.75,-2.8 -3.84,-4.54 -6.98,-4.54 -3.14,0 -5.24,1.74 -6.97,4.54 l -32.11,48.5 0,-72.58 c 0,-4.19 -3.49,-7.682 -7.68,-7.682 -4.19,0 -7.67,3.492 -7.67,7.682 l 0,94.22 z m -73.64,-7.33 -28.96,0 c -3.84,0 -7.34,3.49 -7.34,7.33 0,3.83 3.5,7.32 7.34,7.32 l 72.93,0 c 4.19,0 7.33,-3.49 7.33,-7.32 0,-3.84 -3.14,-7.33 -7.33,-7.33 l -28.62,0 0,-86.89 c 0,-4.19 -3.48,-7.682 -8.02,-7.682 -4.19,0 -7.33,3.492 -7.33,7.682 l 0,86.89" /><g
|
||||||
|
id="g30"><g
|
||||||
|
clip-path="url(#clipPath34)"
|
||||||
|
id="g32"><path
|
||||||
|
id="path46"
|
||||||
|
style="fill:url(#linearGradient38);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="M 1006.51,526.57 798.98,618.02 787.426,487.43 1015.64,414.922 1006.51,526.57" /></g></g><g
|
||||||
|
id="g48"><g
|
||||||
|
clip-path="url(#clipPath52)"
|
||||||
|
id="g50"><path
|
||||||
|
id="path64"
|
||||||
|
style="fill:url(#linearGradient56);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 839.609,1031.79 116.543,0 0,-99.427 -27.656,0 0,42.469 c 0,16.84 -13.773,30.618 -30.613,30.618 -16.84,0 -30.617,-13.778 -30.617,-30.618 l 0,-42.469 -27.657,0 0,99.427 z m -23.285,-217.767 172.906,-76.195 -11.921,145.813 22.629,0 0,48.722 -16.79,0 0,99.427 16.79,0 0,28.58 -93.254,91.25 0,6.42 c 0,4.84 -3.961,8.8 -8.801,8.8 -4.84,0 -8.801,-3.96 -8.801,-8.8 l 0,-6.42 -93.258,-91.25 0,-28.58 16.793,0 0,-99.427 -16.793,0 0,-48.722 26.66,0 -6.16,-69.618" /></g></g><g
|
||||||
|
id="g66"><g
|
||||||
|
clip-path="url(#clipPath70)"
|
||||||
|
id="g68"><path
|
||||||
|
id="path82"
|
||||||
|
style="fill:url(#linearGradient74);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 806.199,699.59 193.121,-85.11 -2.898,35.442 -187.317,82.539 -2.906,-32.871" /></g></g><g
|
||||||
|
id="g84"><g
|
||||||
|
clip-path="url(#clipPath88)"
|
||||||
|
id="g86"><path
|
||||||
|
id="path100"
|
||||||
|
style="fill:url(#linearGradient92);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 801.137,642.371 203.223,-89.562 -2.89,35.429 -197.423,87 -2.91,-32.867" /></g></g><g
|
||||||
|
id="g102"><g
|
||||||
|
clip-path="url(#clipPath106)"
|
||||||
|
id="g104"><path
|
||||||
|
id="path118"
|
||||||
|
style="fill:url(#linearGradient110);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 814.172,789.68 -2.91,-32.879 183.015,-80.641 -2.898,35.43 -177.207,78.09" /></g></g><path
|
||||||
|
id="path120"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="M 1398.48,1105.95 1492,1136 c -0.34,0.66 -0.62,1.36 -0.96,2.01 -15.8,30.98 -34.7,60.09 -56.08,87.16 l -87.87,-45.47 c 19.17,-22.23 36.21,-46.32 50.56,-72.15 0.29,-0.52 0.54,-1.07 0.83,-1.6" /><path
|
||||||
|
id="path122"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 1450.12,929.051 97.38,-6.988 c -1.1,26.328 -4.09,52.16 -8.96,77.363 l -98.25,-3.348 c 5.01,-21.762 8.29,-44.148 9.83,-67.027" /><path
|
||||||
|
id="path124"
|
||||||
|
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 1022.7,471.289 c -236.395,0 -428.723,192.32 -428.723,428.711 0,236.39 192.328,428.71 428.723,428.71 84.83,0 163.93,-24.84 230.56,-67.53 l 68.19,70.92 c -84.89,58.88 -187.85,93.48 -298.75,93.48 -289.802,0 -525.571,-235.78 -525.571,-525.58 0,-289.801 235.769,-525.578 525.571,-525.578 247.58,0 455.51,172.168 510.9,403.008 l -91.93,31.894 C 1399.94,616.352 1227.98,471.289 1022.7,471.289" /><g
|
||||||
|
id="g126"><g
|
||||||
|
clip-path="url(#clipPath130)"
|
||||||
|
id="g128"><path
|
||||||
|
id="path142"
|
||||||
|
style="fill:url(#linearGradient134);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 1425.85,1236.72 c -26.54,31.73 -56.72,60.31 -89.93,85.04 -4.76,3.54 -9.6,6.96 -14.47,10.34 l -68.19,-70.92 -248.9,-258.85 342.73,177.37 87.87,45.47 c -3.04,3.85 -5.97,7.79 -9.11,11.55" /></g></g><g
|
||||||
|
id="g144"><g
|
||||||
|
clip-path="url(#clipPath148)"
|
||||||
|
id="g146"><path
|
||||||
|
id="path160"
|
||||||
|
style="fill:url(#linearGradient152);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 1548.16,904.152 c -0.05,6.012 -0.41,11.946 -0.66,17.911 l -97.38,6.988 -445.76,31.992 437.31,-151.719 91.93,-31.894 c 0.27,1.09 0.58,2.16 0.84,3.261 8.94,38.36 13.82,78.262 13.82,119.309 0,1.391 -0.09,2.762 -0.1,4.152" /></g></g><g
|
||||||
|
id="g162"><g
|
||||||
|
clip-path="url(#clipPath166)"
|
||||||
|
id="g164"><path
|
||||||
|
id="path178"
|
||||||
|
style="fill:url(#linearGradient170);fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
d="m 1533.81,1022.04 c -9.54,39.96 -23.71,78.1 -41.81,113.96 l -93.52,-30.05 -387.37,-124.485 429.18,14.613 98.25,3.348 c -1.46,7.574 -2.95,15.144 -4.73,22.614" /></g></g></g></g></svg>
|
After Width: | Height: | Size: 16 KiB |
7
templates/project-harbor/config.yml
Normal file
7
templates/project-harbor/config.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
name: Project Harbor
|
||||||
|
description: |
|
||||||
|
(Experimental) Enterprise Class Container Registry [by VMware]
|
||||||
|
version: 1.1.1-1-rev1
|
||||||
|
category: Private Container Registry
|
||||||
|
projectURL: https://github.com/vmware/harbor
|
||||||
|
license: Apache License 2.0
|
Loading…
x
Reference in New Issue
Block a user