From ae79e9ab9180b594d9aa328cf11ee0604d0013ee Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Fri, 21 Jul 2017 10:55:30 +0900 Subject: [PATCH 1/9] Infra as a code by own your zinst packages --- templates/zinst/0/README.md | 85 ++++++++++++++++++++++++++ templates/zinst/0/docker-compose.yml | 8 +++ templates/zinst/0/rancher-compose.yml | 18 ++++++ templates/zinst/catalogIcon-zinst.png | Bin 0 -> 42732 bytes templates/zinst/config.yml | 5 ++ 5 files changed, 116 insertions(+) create mode 100644 templates/zinst/0/README.md create mode 100644 templates/zinst/0/docker-compose.yml create mode 100644 templates/zinst/0/rancher-compose.yml create mode 100755 templates/zinst/catalogIcon-zinst.png create mode 100644 templates/zinst/config.yml diff --git a/templates/zinst/0/README.md b/templates/zinst/0/README.md new file mode 100644 index 0000000..86c73a2 --- /dev/null +++ b/templates/zinst/0/README.md @@ -0,0 +1,85 @@ + +# Zinst +## Install +* Git clone 1st +``` +git clone https://github.com/goody80/zinst_repository_docker.git +``` + +* Git clone for zinst packages (optional) +``` +git clone https://github.com/goody80/Zinst_packages.git +cp -Rfv ./Zinst_packages/* ./zinst_repository_docker/dist/ +``` + + +## Use +* How to start the zinst repository server +``` +cd zinst_repository_docker +docker-compose up -d +``` + +* How to set the zinst client +``` +curl -sL bit.ly/online-install |bash +zinst self-config ip=[IP address of the docker Host] host=[Hostname of docker host]:8080 +``` + +* check the server alive +``` +zinst find +``` + +## Setup +* You can modify the docker-compose.yml for setup as below + * for example: I need to change the port 8080 to 80. - You can do as below + * `8080:80/tcp` -> `80:80/tcp` + +``` +version: '2' +services: + zinst-repository: + image: zinst/zinst_repository:latest + ports: + - 8080:80/tcp + volumes: + - ./dist:/data/dist:rw +``` + +## What is the Zinst ? +### zinst? +* Package install manager. It very similar that concept of yinst command in Yahoo! + +### Summary +* For the centralized package manage & distributed systems + * Centralized control: + * Install the Package to the destination server + * *ex) zinst install apache_server-1.0.1.zinst apache_conf-1.0.1.zinst -h web0[1-7,9]* + * list-up the package in each server + * *ex) zinst ls* + * list-up the file of package in each server + * *ex) zinst ls -files apache_server* + * Easy find out the installed package-name of a some distributed file + * *ex) zinst ls -files /data/z/httpd/conf/include/_temp.conf* + * Can tracking the release history with who could controlled + * *ex) zinst history* + * Easy can change the configuration setup + * *ex) zinst set apache_conf.maxclient=64* + * Then you can see the configuration has been changed on the Apache server for example. + * Package remove + * Send a command to the distributed systems + * *ex) zinst ssh "whoami" -h web[0-1][0-9], web20* + * Can makes a list of multiple host for the target control + * *ex) zinst ssh "whoami" -H ./hostlist.txt* + * One package, can makes a differnt output + * *ex) zinst install apache_server -set apache_server.maxclient=32 -h web01 web02* + * *zinst install apache_server -set apache_server.maxclient=64 -h news01 news02* + * Daemon controll + * *ex) zinst start httpd* + * Then we can recognize that who managed the daemon in the server as a history + * Easy to find out the package has been released to somewhere + * *ex) zinst track hwconfig-1. + * Supported a package restore & roll-back as a save file + * *ex) zinst restore -file /data/z/save/zinst-save.56* + * Without difficult language and environment. Due to it made by Bash only diff --git a/templates/zinst/0/docker-compose.yml b/templates/zinst/0/docker-compose.yml new file mode 100644 index 0000000..89de073 --- /dev/null +++ b/templates/zinst/0/docker-compose.yml @@ -0,0 +1,8 @@ +version: '2' +services: + zinst-repository: + image: zinst/zinst_repository:0.4 + ports: + - 8080:80/tcp + volumes: + - /data/dist diff --git a/templates/zinst/0/rancher-compose.yml b/templates/zinst/0/rancher-compose.yml new file mode 100644 index 0000000..c47a1bd --- /dev/null +++ b/templates/zinst/0/rancher-compose.yml @@ -0,0 +1,18 @@ +.catalog: + name: "zinst-repository" + version: "7.0.5" + description: "Infra as a code by your own packages. http://zinst.me" + uuid: zinstrepo-0 + minimum_rancher_version: v1.5.5 + questions: + - variable: public_port + description: "public port to access the zinst repository" + label: "Public Port" + required: true + default: "8080" + type: "int" + +zinst-repository: + retain_ip: true + scale: 1 + start_on_create: true diff --git a/templates/zinst/catalogIcon-zinst.png b/templates/zinst/catalogIcon-zinst.png new file mode 100755 index 0000000000000000000000000000000000000000..d3fa018a08189954cc300fa3a81e9f06ef1d7204 GIT binary patch literal 42732 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 Date: Thu, 7 Sep 2017 21:01:00 +0900 Subject: [PATCH 2/9] Update rancher-compose.yml --- templates/zinst/0/rancher-compose.yml | 34 +++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/templates/zinst/0/rancher-compose.yml b/templates/zinst/0/rancher-compose.yml index c47a1bd..b11eae1 100644 --- a/templates/zinst/0/rancher-compose.yml +++ b/templates/zinst/0/rancher-compose.yml @@ -11,8 +11,32 @@ required: true default: "8080" type: "int" - -zinst-repository: - retain_ip: true - scale: 1 - start_on_create: true +services: + zinst-repository: + retain_ip: true + scale: 1 + start_on_create: true + health_check: + port: 80 + interval: 5000 + unhealthy_threshold: 3 + request_line: '' + healthy_threshold: 2 + response_timeout: 5000 + zinst-lb: + scale: 1 + start_on_create: true + lb_config: + certs: [] + port_rules: + - priority: 1 + protocol: http + service: zinst-repository + source_port: ${public_port} + target_port: 80 + health_check: + response_timeout: 2000 + healthy_threshold: 2 + port: 42 + unhealthy_threshold: 3 + interval: 2000 From f2a4a659035c2e9354423507560dcf4ffd4f5195 Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 21:02:13 +0900 Subject: [PATCH 3/9] Update docker-compose.yml --- templates/zinst/0/docker-compose.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/zinst/0/docker-compose.yml b/templates/zinst/0/docker-compose.yml index 89de073..59f47d7 100644 --- a/templates/zinst/0/docker-compose.yml +++ b/templates/zinst/0/docker-compose.yml @@ -6,3 +6,7 @@ services: - 8080:80/tcp volumes: - /data/dist + zinst-lb: + image: rancher/lb-service-haproxy:v0.6.4 + ports: + - ${public_port}:${public_port}/tcp From a49d0cb6685c4489c8de5d298f348f2296f126fe Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 21:03:57 +0900 Subject: [PATCH 4/9] Update docker-compose.yml --- templates/zinst/0/docker-compose.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/templates/zinst/0/docker-compose.yml b/templates/zinst/0/docker-compose.yml index 59f47d7..cecfbe0 100644 --- a/templates/zinst/0/docker-compose.yml +++ b/templates/zinst/0/docker-compose.yml @@ -5,8 +5,11 @@ services: ports: - 8080:80/tcp volumes: - - /data/dist + - zinst-data:/data/dist zinst-lb: image: rancher/lb-service-haproxy:v0.6.4 ports: - ${public_port}:${public_port}/tcp +volumes: + zinst-data: + driver: local From 9a9dbdf9f08ce73e9e9adfe744d8ae7d72c5db8e Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 21:04:49 +0900 Subject: [PATCH 5/9] Update rancher-compose.yml --- templates/zinst/0/rancher-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/zinst/0/rancher-compose.yml b/templates/zinst/0/rancher-compose.yml index b11eae1..2d45905 100644 --- a/templates/zinst/0/rancher-compose.yml +++ b/templates/zinst/0/rancher-compose.yml @@ -1,4 +1,5 @@ -.catalog: +version: '2' +catalog: name: "zinst-repository" version: "7.0.5" description: "Infra as a code by your own packages. http://zinst.me" From cfa546e8e6719ad2f20797ec351a35a6292f0acc Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 21:14:39 +0900 Subject: [PATCH 6/9] Update docker-compose.yml --- templates/zinst/0/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/templates/zinst/0/docker-compose.yml b/templates/zinst/0/docker-compose.yml index cecfbe0..6e528cb 100644 --- a/templates/zinst/0/docker-compose.yml +++ b/templates/zinst/0/docker-compose.yml @@ -2,8 +2,6 @@ version: '2' services: zinst-repository: image: zinst/zinst_repository:0.4 - ports: - - 8080:80/tcp volumes: - zinst-data:/data/dist zinst-lb: From eb3741997dde89cdd3b428a58b9ca9ff709ce0d5 Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 21:29:08 +0900 Subject: [PATCH 7/9] Update docker-compose.yml --- templates/zinst/0/docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/zinst/0/docker-compose.yml b/templates/zinst/0/docker-compose.yml index 6e528cb..91eab26 100644 --- a/templates/zinst/0/docker-compose.yml +++ b/templates/zinst/0/docker-compose.yml @@ -8,6 +8,7 @@ services: image: rancher/lb-service-haproxy:v0.6.4 ports: - ${public_port}:${public_port}/tcp + volumes: zinst-data: driver: local From 09b9eb27d8d1a9905dc2d50eaf15c5969fec6e6c Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 21:31:09 +0900 Subject: [PATCH 8/9] Update rancher-compose.yml --- templates/zinst/0/rancher-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/zinst/0/rancher-compose.yml b/templates/zinst/0/rancher-compose.yml index 2d45905..69874c8 100644 --- a/templates/zinst/0/rancher-compose.yml +++ b/templates/zinst/0/rancher-compose.yml @@ -12,6 +12,7 @@ catalog: required: true default: "8080" type: "int" + services: zinst-repository: retain_ip: true From 1432bc3cb63088530a68a937ac8bbf2916fd9a9f Mon Sep 17 00:00:00 2001 From: Ralf Yang Date: Thu, 7 Sep 2017 22:20:25 +0900 Subject: [PATCH 9/9] Update config.yml --- templates/zinst/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/zinst/config.yml b/templates/zinst/config.yml index 131e852..ac31f51 100644 --- a/templates/zinst/config.yml +++ b/templates/zinst/config.yml @@ -1,5 +1,5 @@ name: Zinst Package repository description: | Infra as a code by your own packages. http://zinst.me -version: v7.0.5 +version: 7.0.5 category: DevOps