From edf913012d6b578cecc193a39d5657bd810d29b8 Mon Sep 17 00:00:00 2001 From: Jason-ZW Date: Wed, 30 Jan 2019 13:32:08 +0800 Subject: [PATCH] Embed subscriber service --- config/schema.go | 3 +- config/types.go | 1 + images/01-base/usr/bin/os-subscriber | 58 ++++++++++++++++++++++++++++ os-config.tpl.yml | 20 ++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100755 images/01-base/usr/bin/os-subscriber diff --git a/config/schema.go b/config/schema.go index 4426ed1f..09d71864 100644 --- a/config/schema.go +++ b/config/schema.go @@ -101,7 +101,8 @@ var schema = `{ "properties": { "url": {"type": "string"}, "image": {"type": "string"}, - "rollback": {"type": "string"} + "rollback": {"type": "string"}, + "policy": {"type": "string"} } }, diff --git a/config/types.go b/config/types.go index db05e5e2..47adf855 100644 --- a/config/types.go +++ b/config/types.go @@ -158,6 +158,7 @@ type UpgradeConfig struct { URL string `yaml:"url,omitempty"` Image string `yaml:"image,omitempty"` Rollback string `yaml:"rollback,omitempty"` + Policy string `yaml:"policy,omitempty"` } type EngineOpts struct { diff --git a/images/01-base/usr/bin/os-subscriber b/images/01-base/usr/bin/os-subscriber new file mode 100755 index 00000000..ef9fe8c5 --- /dev/null +++ b/images/01-base/usr/bin/os-subscriber @@ -0,0 +1,58 @@ +#!/bin/bash +set -e -x + +gateway_address="http://ros.rancher.io/gateway" + +_sigProcess() { + echo "SIGINT/SIGTERM signal..." + kill -9 $$ +} + +trap _sigProcess SIGINT SIGKILL SIGTERM + +__read_policy() { + policy=`ros c get rancher.upgrade.policy` + if [ -z $policy ]; then + echo "can not read upgrade.policy" + exit 1 + fi + return $(($policy)) +} + +__report_activity() { + arch=`uname -m` + uuid=`cat /sys/class/dmi/id/product_uuid` + release=`ros -v | awk '{print $2}'` + response=`wget --server-response ${gateway_address}/report --header 'Accept: application/json' --header 'Content-type: application/json' --header "arch: $arch" --header "uuid: $uuid" --header "release: $release" 2>&1 | awk '/^ HTTP/{print $2}'` + if [ $response -ge 200 -a $response -le 300 ]; then + echo "report activity success" + else + echo "report activity failed" + fi +} + +__upgrade_operate() { + recommend_version=`wget ${gateway_address}/version -q -O -` + case $policy in + download) + echo "upgrade.policy is 'download'" + __report_activity + system-docker pull $recommend_version + ;; + auto) + echo "upgrade.policy is 'auto'" + __report_activity + ros os upgrade -i $recommend_version -f + ;; + none) + echo "upgrade.policy is 'none'" + ;; + *) + echo "upgrade.policy is 'illegal'" + ;; + esac +} + +__read_policy + +__upgrade_operate \ No newline at end of file diff --git a/os-config.tpl.yml b/os-config.tpl.yml index 0205ca1a..4ca42ec5 100644 --- a/os-config.tpl.yml +++ b/os-config.tpl.yml @@ -381,6 +381,25 @@ rancher: volumes: - /sys:/host/sys - /var/lib/system-docker:/var/lib/system-docker:shared + subscriber: + image: {{.OS_REPO}}/os-base:{{.VERSION}}{{.SUFFIX}} + command: os-subscriber + environment: + - IN_DOCKER=true + labels: + io.rancher.os.scope: system + io.rancher.os.after: console + cron.schedule: "0 0 3 * * ?" + privileged: true + pid: host + ipc: host + net: host + uts: host + volumes_from: + - command-volumes + - system-volumes + volumes: + - /sys:/host/sys system_docker: exec: true storage_driver: overlay2 @@ -399,6 +418,7 @@ rancher: upgrade: url: {{.OS_RELEASES_YML}}/releases{{.SUFFIX}}.yml image: {{.OS_REPO}}/os + policy: download docker: {{if eq "amd64" .ARCH -}} engine: {{.USER_DOCKER_ENGINE_VERSION}}