diff --git a/Dockerfile b/Dockerfile index 56026fe..0d30616 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,9 @@ -FROM registry.fedoraproject.org/fedora:25 +FROM registry.fedoraproject.org/fedora:rawhide -ENV VERSION=0.1 RELEASE=19 ARCH=x86_64 +ENV VERSION=0.1 ARCH=x86_64 LABEL com.redhat.component="etcd" \ name="$FGC/etcd" \ version="$VERSION" \ - release="$RELEASE.$DISTTAG" \ architecture="$ARCH" \ summary="A key-value store for shared configuration and service discovery." \ maintainer="Giuseppe Scrivano " @@ -22,6 +21,10 @@ COPY uninstall.sh /usr/bin/uninstall.sh COPY tmpfiles.template config.json.template service.template manifest.json /exports/ +RUN mkdir -p /exports/hostfs/usr/local/bin/ && cp /usr/bin/etcdctl /exports/hostfs/usr/local/bin/etcdctl + +RUN mkdir -p /exports/hostfs/etc/etcd && sed -e "/^ETCD_DATA_DIR/d" -e s"|^ETCD_NAME=|#ETCD_NAME=|" < /etc/etcd/etcd.conf > /exports/hostfs/etc/etcd/etcd.conf + EXPOSE 4001 7001 2379 2380 CMD ["/usr/bin/etcd-env.sh", "/usr/bin/etcd"] diff --git a/config.json.template b/config.json.template index 73cfa73..e542c85 100644 --- a/config.json.template +++ b/config.json.template @@ -17,6 +17,7 @@ "env": [ "NAME=$NAME", "ETCD_NAME=$ETCD_NAME", + "ETCD_DATA_DIR=$ETCD_DATA_DIR", "ETCD_ADVERTISE_CLIENT_URLS=$ETCD_ADVERTISE_CLIENT_URLS", "ETCD_LISTEN_CLIENT_URLS=$ETCD_LISTEN_CLIENT_URLS", "ETCD_INITIAL_ADVERTISE_PEER_URLS=$ETCD_INITIAL_ADVERTISE_PEER_URLS", @@ -59,26 +60,31 @@ "cwd": "/", "capabilities": { "bounding": [ + "CAP_DAC_READ_SEARCH", "CAP_AUDIT_WRITE", "CAP_KILL", "CAP_NET_BIND_SERVICE" ], "permitted": [ + "CAP_DAC_READ_SEARCH", "CAP_AUDIT_WRITE", "CAP_KILL", "CAP_NET_BIND_SERVICE" ], "inheritable": [ + "CAP_DAC_READ_SEARCH", "CAP_AUDIT_WRITE", "CAP_KILL", "CAP_NET_BIND_SERVICE" ], "effective": [ + "CAP_DAC_READ_SEARCH", "CAP_AUDIT_WRITE", "CAP_KILL", "CAP_NET_BIND_SERVICE" ], "ambient": [ + "CAP_DAC_READ_SEARCH", "CAP_AUDIT_WRITE", "CAP_KILL", "CAP_NET_BIND_SERVICE" @@ -199,7 +205,18 @@ "rbind", "rprivate" ] - } + }, + { + "type": "bind", + "source": "$CONF_DIRECTORY/$NAME", + "destination": "/etc/etcd/", + "options": [ + "rbind", + "ro", + "rprivate" + ] + } + $ADDTL_MOUNTS ], "linux": { "resources": { @@ -222,7 +239,6 @@ } ], "devices": null, - "apparmorProfile": "", - "selinuxProcessLabel": "" + "apparmorProfile": "" } } diff --git a/etcd-env.sh b/etcd-env.sh index 5b81a6b..90dd8bf 100755 --- a/etcd-env.sh +++ b/etcd-env.sh @@ -6,11 +6,10 @@ if test x$NAME == x; then fi export ETCD_NAME=${ETCD_NAME:-$HOSTNAME} export ETCD_DATA_DIR=/var/lib/etcd/${NAME}.etcd -export ETCD_ADVERTISE_CLIENT_URLS=${ETCD_ADVERTISE_CLIENT_URLS:-http://${ipaddress}:2379,http://${ipaddress}:4001} -export ETCD_LISTEN_CLIENT_URLS=${ETCD_LISTEN_CLIENT_URLS:-http://0.0.0.0:2379,http://0.0.0.0:4001} -export ETCD_INITIAL_ADVERTISE_PEER_URLS=${ETCD_INITIAL_ADVERTISE_PEER_URLS:-http://${ipaddress}:2380,http://${ipaddress}:7001} -export ETCD_LISTEN_PEER_URLS=${ETCD_LISTEN_PEER_URLS:-http://0.0.0.0:2380,http://0.0.0.0:7001} -export ETCD_INITIAL_CLUSTER=${ETCD_INITIAL_CLUSTER:-$HOSTNAME=http://${ipaddress}:2380,$HOSTNAME=http://${ipaddress}:7001} + +if test -e /etc/etcd/etcd.conf; then + source /etc/etcd/etcd.conf +fi # Execute the commands passed to this script exec "$@" diff --git a/manifest.json b/manifest.json index 28aa414..2fedbfb 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,9 @@ { "version": "1.0", "defaultValues": { + "CONF_DIRECTORY" : "/etc", "ETCD_NAME" : "", + "ETCD_DATA_DIR" : "", "ETCD_ADVERTISE_CLIENT_URLS" : "", "ETCD_LISTEN_CLIENT_URLS" : "", "ETCD_INITIAL_ADVERTISE_PEER_URLS" : "", @@ -37,7 +39,12 @@ "ETCD_DEBUG" : "false", "ETCD_LOG_PACKAGE_LEVELS" : "", "ETCD_STRICT_RECONFIG_CHECK" : "false", - "ETCD_ENABLE_PPROF" : "false" + "ETCD_ENABLE_PPROF" : "false", + "ADDTL_MOUNTS": "" + }, + "renameFiles" : { + "/etc/etcd/etcd.conf" : "$CONF_DIRECTORY/$NAME/etcd.conf", + "/usr/local/bin/etcdctl" : "/usr/local/bin/${NAME}ctl" } }