As a personal exercise I am trying to build an extended catalog item for Rancher.
I’d like to build a catalog item for Harbor (VMware Enterprise registry). More here:
I have looked into some other existing Rancher catalog items and they all seem to assume that you can just pass environment variables to docker-compose / rancher-compose (that Rancher presumably gather during the configuration phase of the item).
Harbor is a little bit more complex. At the high level the setup works like this:
- You grab a release (which is essentially the docker-compose file + a few other things).
- you configure the (user-friendly) file harbor.cfg
- you run the
preparescript (which essentially disseminate all the info in harbor.cfg in different configuration files (in the
- you run docker-compose up which includes proper mapping of various configuration files in the
For reference, this is the docker-compose file:
version: '2' services: log: image: vmware/harbor-log:0.5.0-rc2 container_name: harbor-log restart: always volumes: - /var/log/harbor/:/var/log/docker/ ports: - 1514:514 registry: image: library/registry:2.5.0 container_name: registry restart: always volumes: - /data/registry:/storage - ./common/config/registry/:/etc/registry/ 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" mysql: image: vmware/harbor-db:0.5.0-rc2 container_name: harbor-db restart: always volumes: - /data/database:/var/lib/mysql env_file: - ./common/config/db/env depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "mysql" ui: image: vmware/harbor-ui:0.5.0-rc2 container_name: harbor-ui env_file: - ./common/config/ui/env restart: always volumes: - ./common/config/ui/app.conf:/etc/ui/app.conf - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem - /data:/harbor_storage depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "ui" jobservice: image: vmware/harbor-jobservice:0.5.0-rc2 container_name: harbor-jobservice env_file: - ./common/config/jobservice/env restart: always volumes: - /data/job_logs:/var/log/jobs - ./common/config/jobservice/app.conf:/etc/jobservice/app.conf depends_on: - ui logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "jobservice" proxy: image: nginx:1.11.5 container_name: nginx restart: always volumes: - ./common/config/nginx:/etc/nginx ports: - 80:80 - 443:443 depends_on: - mysql - registry - ui - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy"
Is it even possible to create a rancher catalog item for a service like this? If so, how would one go about it? Does it involve creating Rancher volumes (pre-populated with such information) to satisfy the mappings in the compose project?
How would one populate such files at catalog item configuration time?