diff --git a/magnum/drivers/common/templates/swarm/fragments/configure-etcd.sh b/magnum/drivers/common/templates/swarm/fragments/configure-etcd.sh index 1e3f2a0e48..a8f6bc29f1 100644 --- a/magnum/drivers/common/templates/swarm/fragments/configure-etcd.sh +++ b/magnum/drivers/common/templates/swarm/fragments/configure-etcd.sh @@ -3,18 +3,37 @@ . /etc/sysconfig/heat-params myip="$SWARM_NODE_IP" +cert_dir="/etc/docker" +protocol="https" + +if [ "$TLS_DISABLED" = "True" ]; then + protocol="http" +fi cat > /etc/etcd/etcd.conf <> /etc/etcd/etcd.conf <> /etc/etcd/etcd.conf fi diff --git a/magnum/drivers/common/templates/swarm/fragments/network-config-service.sh b/magnum/drivers/common/templates/swarm/fragments/network-config-service.sh index f6c43ff482..d6a1b6cd3e 100644 --- a/magnum/drivers/common/templates/swarm/fragments/network-config-service.sh +++ b/magnum/drivers/common/templates/swarm/fragments/network-config-service.sh @@ -12,11 +12,30 @@ FLANNELD_CONFIG=/etc/sysconfig/flanneld FLANNEL_CONFIG_BIN=/usr/local/bin/flannel-config FLANNEL_CONFIG_SERVICE=/etc/systemd/system/flannel-config.service FLANNEL_JSON=/etc/sysconfig/flannel-network.json +CERT_DIR=/etc/docker +PROTOCOL=https +FLANNEL_OPTIONS="-etcd-cafile $CERT_DIR/ca.crt \ +-etcd-certfile $CERT_DIR/server.crt \ +-etcd-keyfile $CERT_DIR/server.key" +ETCD_CURL_OPTIONS="--cacert $CERT_DIR/ca.crt \ +--cert $CERT_DIR/server.crt --key $CERT_DIR/server.key" + +if [ "$TLS_DISABLED" = "True" ]; then + PROTOCOL=http + FLANNEL_OPTIONS="" + ETCD_CURL_OPTIONS="" +fi sed -i ' - /^FLANNEL_ETCD=/ s|=.*|="http://'"$ETCD_SERVER_IP"':2379"| + /^FLANNEL_ETCD=/ s|=.*|="'"$PROTOCOL"'://'"$ETCD_SERVER_IP"':2379"| ' $FLANNELD_CONFIG +sed -i '/FLANNEL_OPTIONS/'d $FLANNELD_CONFIG + +cat >> $FLANNELD_CONFIG <> $FLANNELD_CONFIG <> $FLANNEL_DOCKER_BRIDGE_BIN < $CONF_FILE << EOF [Unit] @@ -21,18 +31,32 @@ ExecStartPre=-/usr/bin/docker pull swarm:$SWARM_VERSION ExecStart=/usr/bin/docker run -e http_proxy=$HTTP_PROXY \\ -e https_proxy=$HTTPS_PROXY \\ -e no_proxy=$NO_PROXY \\ + -v $CERT_DIR:$CERT_DIR \\ --name swarm-agent \\ swarm:$SWARM_VERSION \\ join \\ --addr $myip:2375 \\ - etcd://$ETCD_SERVER_IP:2379/v2/keys/swarm/ +EOF + +if [ $TLS_DISABLED = 'False' ]; then + +cat >> /etc/systemd/system/swarm-agent.service << END_TLS + --discovery-opt kv.cacertfile=$CERT_DIR/ca.crt \\ + --discovery-opt kv.certfile=$CERT_DIR/server.crt \\ + --discovery-opt kv.keyfile=$CERT_DIR/server.key \\ +END_TLS + +fi + +cat >> /etc/systemd/system/swarm-agent.service << END_SERVICE_BOTTOM + etcd://$ETCD_SERVER_IP:2379/v2/keys/swarm/ Restart=always ExecStop=/usr/bin/docker stop swarm-agent ExecStartPost=/usr/local/bin/notify-heat [Install] WantedBy=multi-user.target -EOF +END_SERVICE_BOTTOM chown root:root $CONF_FILE chmod 644 $CONF_FILE @@ -42,8 +66,8 @@ SCRIPT=/usr/local/bin/notify-heat cat > $SCRIPT << EOF #!/bin/sh until etcdctl \ - --peers $ETCD_SERVER_IP:2379 \ - --timeout 1s \ + --peers $PROTOCOL://$ETCD_SERVER_IP:2379 \ + $ETCDCTL_OPTIONS --timeout 1s \ --total-timeout 5s \ ls /v2/keys/swarm/docker/swarm/nodes/$myip:2375 do diff --git a/magnum/drivers/common/templates/swarm/fragments/write-swarm-master-service.sh b/magnum/drivers/common/templates/swarm/fragments/write-swarm-master-service.sh index 67b9d00924..b574d41e8b 100644 --- a/magnum/drivers/common/templates/swarm/fragments/write-swarm-master-service.sh +++ b/magnum/drivers/common/templates/swarm/fragments/write-swarm-master-service.sh @@ -1,5 +1,7 @@ #!/bin/sh +CERT_DIR=/etc/docker + cat > /etc/systemd/system/swarm-manager.service << END_SERVICE_TOP [Unit] Description=Swarm Manager @@ -13,7 +15,7 @@ ExecStartPre=-/usr/bin/docker kill swarm-manager ExecStartPre=-/usr/bin/docker rm swarm-manager ExecStartPre=-/usr/bin/docker pull swarm:$SWARM_VERSION ExecStart=/usr/bin/docker run --name swarm-manager \\ - -v /etc/docker:/etc/docker \\ + -v $CERT_DIR:$CERT_DIR \\ -p 2376:2375 \\ -e http_proxy=$HTTP_PROXY \\ -e https_proxy=$HTTPS_PROXY \\ @@ -29,9 +31,12 @@ if [ $TLS_DISABLED = 'False' ]; then cat >> /etc/systemd/system/swarm-manager.service << END_TLS --tlsverify \\ - --tlscacert=/etc/docker/ca.crt \\ - --tlskey=/etc/docker/server.key \\ - --tlscert=/etc/docker/server.crt \\ + --tlscacert=$CERT_DIR/ca.crt \\ + --tlskey=$CERT_DIR/server.key \\ + --tlscert=$CERT_DIR/server.crt \\ + --discovery-opt kv.cacertfile=$CERT_DIR/ca.crt \\ + --discovery-opt kv.certfile=$CERT_DIR/server.crt \\ + --discovery-opt kv.keyfile=$CERT_DIR/server.key \\ END_TLS fi