diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml
index a73612b0dd80b0eb005d77436e2753b7d6703e58..839da100ac0b4a31a1877223c443435ec7084f8b 100644
--- a/inventory/group_vars/all.yml
+++ b/inventory/group_vars/all.yml
@@ -14,9 +14,6 @@ kube_script_dir: "{{ bin_dir }}/kubernetes-scripts"
 kube_manifest_dir: "{{ kube_config_dir }}/manifests"
 system_namespace: kube-system
 
-# Logging directory (sysvinit systems)
-kube_log_dir: "/var/log/kubernetes"
-
 # This is where all the cert scripts and certs will be located
 kube_cert_dir: "{{ kube_config_dir }}/ssl"
 
diff --git a/roles/docker/handlers/main.yml b/roles/docker/handlers/main.yml
index 4f4c0c8c0032e96673366f034cb5786ebf8c602b..c8bc2c3bb2f4a68bb74dc9cd57e4c45cbc3530ac 100644
--- a/roles/docker/handlers/main.yml
+++ b/roles/docker/handlers/main.yml
@@ -10,7 +10,6 @@
 
 - name : Docker | reload systemd
   shell: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: Docker | reload docker.socket
   service:
diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml
index b7485c3d6c466f35af2ab790b6e2d07df2d2cca0..d3587e2d3219338c810fad23fb60548fec18f2a8 100644
--- a/roles/docker/tasks/main.yml
+++ b/roles/docker/tasks/main.yml
@@ -64,13 +64,8 @@
   with_items: "{{ docker_package_info.pkgs }}"
   when: (ansible_os_family != "CoreOS") and (docker_package_info.pkgs|length > 0)
 
-- name: Set docker upstart and sysvinit config
-  include: non-systemd.yml
-  when: ansible_service_mgr in ["sysvinit","upstart"]
-
 - name: Set docker systemd config
   include: systemd.yml
-  when: ansible_service_mgr == "systemd"
 
 - name: ensure docker service is started and enabled
   service:
diff --git a/roles/docker/tasks/non-systemd.yml b/roles/docker/tasks/non-systemd.yml
deleted file mode 100644
index ea8c8e97a3d40f59de262b934ac9ec3d0ddd6583..0000000000000000000000000000000000000000
--- a/roles/docker/tasks/non-systemd.yml
+++ /dev/null
@@ -1,66 +0,0 @@
----
-# This uses lineinfile instead of templates for idempotency in files that may be modified by different roles
-- name: Set docker options config file path
-  set_fact:
-    docker_options_file: >-
-      {%- if ansible_os_family == "Debian" -%}/etc/default/docker{%- elif ansible_os_family == "RedHat" -%}/etc/sysconfig/docker{%- endif -%}
-  tags: facts
-
-- name: Set docker options config variable name
-  set_fact:
-    docker_options_name: >-
-      {%- if ansible_os_family == "Debian" -%}DOCKER_OPTS{%- elif ansible_os_family == "RedHat" -%}other_args{%- endif -%}
-  tags: facts
-
-- name: Set docker options config value to be written
-  set_fact:
-    docker_options_value: '"{{ docker_options }} $DOCKER_NETWORK_OPTIONS $DOCKER_STORAGE_OPTIONS $INSECURE_REGISTRY"'
-  tags: facts
-
-- name: Set docker options config line to be written
-  set_fact:
-    docker_options_line: "{{ docker_options_name }}={{ docker_options_value }}"
-  tags: facts
-
-- name: Set docker proxy lines to be written
-  set_fact:
-    docker_proxy_lines:
-     - { name: "HTTP_PROXY", value: '"{{ http_proxy }}"' }
-     - { name: "HTTPS_PROXY", value: '"{{ https_proxy }}"' }
-     - { name: "NO_PROXY", value: '"{{ no_proxy }}"' }
-  tags: facts
-
-- name: Remove docker daemon proxy config lines that don't match desired lines
-  lineinfile:
-    dest: "{{ docker_options_file }}"
-    regexp: "^{{ item.name }}=(?!{{ item.value|regex_escape() }})"
-    state: absent
-  with_items: "{{ docker_proxy_lines|default([]) }}"
-  when: item.value is defined and (item.value | trim != '')
-
-- name: Write docker daemon proxy config lines
-  lineinfile:
-    dest: "{{ docker_options_file }}"
-    line: "{{ item.name }}={{ item.value }}"
-    owner: root
-    group: root
-    mode: 0644
-  with_items: "{{ docker_proxy_lines|default([]) }}"
-  when: item.value is defined and (item.value | trim != '')
-
-- name: Remove docker daemon options lines that don't match desired line
-  lineinfile:
-    dest: "{{ docker_options_file }}"
-    regexp: "^(DOCKER_OPTS|OPTIONS|other_args)=(?!{{ docker_options_value|regex_escape() }})"
-    state: absent
-
-- name: Write docker daemon options line
-  lineinfile:
-    dest: "{{ docker_options_file }}"
-    line: "{{ docker_options_line }}"
-    owner: root
-    group: root
-    mode: 0644
-  notify: restart docker
-
-- meta: flush_handlers
diff --git a/roles/etcd/handlers/main.yml b/roles/etcd/handlers/main.yml
index 4256490c9de30c1029e4f4603b22ee7d4375111f..8c790e9cdbd5436611a9d8953620289d4ee38067 100644
--- a/roles/etcd/handlers/main.yml
+++ b/roles/etcd/handlers/main.yml
@@ -8,7 +8,6 @@
 
 - name: etcd | reload systemd
   command: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: reload etcd
   service:
diff --git a/roles/etcd/tasks/configure.yml b/roles/etcd/tasks/configure.yml
index e1c07a9971c2200e0195272a23f0cb2aa1ac68c4..535874060b6be1af77106b703a9ad22919c237ff 100644
--- a/roles/etcd/tasks/configure.yml
+++ b/roles/etcd/tasks/configure.yml
@@ -16,14 +16,5 @@
     src: "etcd-{{ etcd_deployment_type }}.service.j2"
     dest: /etc/systemd/system/etcd.service
     backup: yes
-  when: ansible_service_mgr == "systemd" and is_etcd_master
-  notify: restart etcd
-
-- name: Configure | Write etcd initd script
-  template:
-    src: "deb-etcd-{{ etcd_deployment_type }}.initd.j2"
-    dest: /etc/init.d/etcd
-    owner: root
-    mode: 0755
-  when: ansible_service_mgr in ["sysvinit","upstart"] and ansible_os_family == "Debian" and is_etcd_master
+  when: is_etcd_master
   notify: restart etcd
diff --git a/roles/etcd/templates/deb-etcd-docker.initd.j2 b/roles/etcd/templates/deb-etcd-docker.initd.j2
deleted file mode 100644
index b8ae568e95e22fcccec94c53fe44d63274f38d05..0000000000000000000000000000000000000000
--- a/roles/etcd/templates/deb-etcd-docker.initd.j2
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/bin/sh
-set -a
-
-### BEGIN INIT INFO
-# Provides:   etcd
-# Required-Start:    $local_fs $network $syslog
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: etcd distributed k/v store
-# Description:
-#   etcd is a distributed, consistent key-value store for shared configuration and service discovery
-### END INIT INFO
-
-PATH=/sbin:/usr/sbin:/bin/:/usr/bin
-DESC="etcd k/v store"
-NAME=etcd
-DAEMON={{ docker_bin_dir }}/docker
-DAEMON_EXEC=`basename $DAEMON`
-DAEMON_ARGS="run --restart=on-failure:5 --env-file=/etc/etcd.env \
---net=host \
--v /etc/ssl/certs:/etc/ssl/certs:ro \
--v /var/lib/etcd:/var/lib/etcd:rw \
--v {{ etcd_cert_dir }}:{{ etcd_cert_dir }}:ro \
---name={{ etcd_member_name | default("etcd") }} \
-{{ etcd_image_repo }}:{{ etcd_image_tag }} \
-{% if etcd_after_v3 %}
-{{ etcd_container_bin_dir }}etcd
-{% endif %}"
-
-SCRIPTNAME=/etc/init.d/$NAME
-DAEMON_USER=root
-STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}"
-PID=/var/run/etcd.pid
-
-# Exit if the binary is not present
-[ -x "$DAEMON" ] || exit 0
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-do_status()
-{
-    status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
-}
-
-# Function that starts the daemon/service
-#
-do_start()
-{
-    {{ docker_bin_dir }}/docker rm -f {{ etcd_member_name | default("etcd") }} &>/dev/null || true
-    sleep 1
-    start-stop-daemon --background --start --quiet --make-pidfile --pidfile $PID --user $DAEMON_USER --exec $DAEMON -- \
-        $DAEMON_ARGS \
-        || return 2
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-    start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $DAEMON_EXEC
-    RETVAL="$?"
-
-    sleep 1
-    return "$RETVAL"
-}
-
-
-case "$1" in
-  start)
-        log_daemon_msg "Starting $DESC" "$NAME"
-        do_start
-        case "$?" in
-                0|1) log_end_msg 0 || exit 0 ;;
-                2) log_end_msg 1 || exit 1 ;;
-        esac
-        ;;
-  stop)
-        log_daemon_msg "Stopping $DESC" "$NAME"
-        if do_stop; then
-            log_end_msg 0
-        else
-            log_failure_msg "Can't stop etcd"
-            log_end_msg 1
-        fi
-        ;;
-  status)
-        if do_status; then
-            log_end_msg 0
-        else
-            log_failure_msg "etcd is not running"
-            log_end_msg 1
-        fi
-        ;;
-
-  restart|force-reload)
-        log_daemon_msg "Restarting $DESC" "$NAME"
-        if do_stop; then
-            if do_start; then
-                log_end_msg 0
-                exit 0
-            else
-                rc="$?"
-            fi
-        else
-           rc="$?"
-        fi
-        log_failure_msg "Can't restart etcd"
-        log_end_msg ${rc}
-        ;;
-  *)
-        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
-        exit 3
-        ;;
-esac
-
diff --git a/roles/etcd/templates/deb-etcd-host.initd.j2 b/roles/etcd/templates/deb-etcd-host.initd.j2
deleted file mode 100644
index b27c0f49a63b560c05439bda70562194e71227af..0000000000000000000000000000000000000000
--- a/roles/etcd/templates/deb-etcd-host.initd.j2
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-set -a
-
-### BEGIN INIT INFO
-# Provides:   etcd
-# Required-Start:    $local_fs $network $syslog
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: etcd distributed k/v store
-# Description:
-#   etcd is a distributed, consistent key-value store for shared configuration and service discovery
-### END INIT INFO
-
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC="etcd k/v store"
-NAME=etcd
-DAEMON={{ bin_dir }}/etcd
-SCRIPTNAME=/etc/init.d/$NAME
-DAEMON_USER=etcd
-STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}"
-PID=/var/run/etcd.pid
-
-# Exit if the binary is not present
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-[ -f /etc/etcd.env ] && . /etc/etcd.env
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-do_status()
-{
-    status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
-}
-
-# Function that starts the daemon/service
-#
-do_start()
-{
-    start-stop-daemon --background --start --quiet --make-pidfile --pidfile $PID --user $DAEMON_USER --exec $DAEMON -- \
-        $DAEMON_ARGS \
-        || return 2
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-    start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME
-    RETVAL="$?"
-
-    sleep 1
-    return "$RETVAL"
-}
-
-
-case "$1" in
-  start)
-        log_daemon_msg "Starting $DESC" "$NAME"
-        do_start
-        case "$?" in
-                0|1) log_end_msg 0 || exit 0 ;;
-                2) log_end_msg 1 || exit 1 ;;
-        esac
-        ;;
-  stop)
-        log_daemon_msg "Stopping $DESC" "$NAME"
-        if do_stop; then
-            log_end_msg 0
-        else
-            log_failure_msg "Can't stop etcd"
-            log_end_msg 1
-        fi
-        ;;
-  status)
-        if do_status; then
-            log_end_msg 0
-        else
-            log_failure_msg "etcd is not running"
-            log_end_msg 1
-        fi
-        ;;
-
-  restart|force-reload)
-        log_daemon_msg "Restarting $DESC" "$NAME"
-        if do_stop; then
-            if do_start; then
-                log_end_msg 0
-                exit 0
-            else
-                rc="$?"
-            fi
-        else
-           rc="$?"
-        fi
-        log_failure_msg "Can't restart etcd"
-        log_end_msg ${rc}
-        ;;
-  *)
-        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
-        exit 3
-        ;;
-esac
-
diff --git a/roles/kubernetes/master/handlers/main.yml b/roles/kubernetes/master/handlers/main.yml
index 3d69cba7d585c955ee76a26c61d847aebe59e315..3854822765df1ceedf23dc87e99e406c41a1a0cb 100644
--- a/roles/kubernetes/master/handlers/main.yml
+++ b/roles/kubernetes/master/handlers/main.yml
@@ -15,7 +15,6 @@
 
 - name: Master | reload systemd
   command: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: Master | reload kubelet
   service:
diff --git a/roles/kubernetes/node/handlers/main.yml b/roles/kubernetes/node/handlers/main.yml
index 5991bebf324c5673e76e0c394059db3d536a1ee3..00525b9954183c06ba91e335275024410d8be557 100644
--- a/roles/kubernetes/node/handlers/main.yml
+++ b/roles/kubernetes/node/handlers/main.yml
@@ -7,7 +7,6 @@
 
 - name: Kubelet | reload systemd
   command: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: Kubelet | reload kubelet
   service:
diff --git a/roles/kubernetes/node/tasks/install.yml b/roles/kubernetes/node/tasks/install.yml
index 6b5fe5bb431cf925f2384e8ecd9775e5899dd9b0..c9061725ac475aee8e5d23f8d64dbfbc68f081ca 100644
--- a/roles/kubernetes/node/tasks/install.yml
+++ b/roles/kubernetes/node/tasks/install.yml
@@ -1,17 +1,6 @@
 ---
 - name: install | Write kubelet systemd init file
   template: src=kubelet.service.j2 dest=/etc/systemd/system/kubelet.service backup=yes
-  when: ansible_service_mgr == "systemd"
-  notify: restart kubelet
-
-- name: install | Write kubelet initd script
-  template: src=deb-kubelet.initd.j2 dest=/etc/init.d/kubelet owner=root mode=0755 backup=yes
-  when: ansible_service_mgr in ["sysvinit","upstart"] and ansible_os_family == "Debian"
-  notify: restart kubelet
-
-- name: install | Write kubelet initd script
-  template: src=rh-kubelet.initd.j2 dest=/etc/init.d/kubelet owner=root mode=0755 backup=yes
-  when: ansible_service_mgr in ["sysvinit","upstart"] and ansible_os_family == "RedHat"
   notify: restart kubelet
 
 - name: install | Install kubelet launch script
diff --git a/roles/kubernetes/node/templates/deb-kubelet.initd.j2 b/roles/kubernetes/node/templates/deb-kubelet.initd.j2
deleted file mode 100644
index 194506e89d616298abfec76f45ac4df45734d061..0000000000000000000000000000000000000000
--- a/roles/kubernetes/node/templates/deb-kubelet.initd.j2
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/bin/bash
-#
-### BEGIN INIT INFO
-# Provides:   kubelet
-# Required-Start:    $local_fs $network $syslog
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: The Kubernetes node container manager
-# Description:
-#   The Kubernetes container manager maintains docker state against a state file.
-### END INIT INFO
-
-
-# PATH should only include /usr/* if it runs after the mountnfs.sh script
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC="The Kubernetes container manager"
-NAME=kubelet
-DAEMON={{ bin_dir }}/kubelet
-DAEMON_ARGS=""
-DAEMON_LOG_FILE=/var/log/$NAME.log
-PIDFILE=/var/run/$NAME.pid
-SCRIPTNAME=/etc/init.d/$NAME
-DAEMON_USER=root
-
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-[ -r {{kube_config_dir}}/$NAME.env ] && . {{kube_config_dir}}/$NAME.env
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-#
-# Function that starts the daemon/service
-#
-do_start()
-{
-        {{ docker_bin_dir }}/docker rm -f kubelet &>/dev/null || true
-        sleep 1
-        # Return
-        #   0 if daemon has been started
-        #   1 if daemon was already running
-        #   2 if daemon could not be started
-        start-stop-daemon --start --quiet --background --no-close \
-                --make-pidfile --pidfile $PIDFILE \
-                --exec $DAEMON -c $DAEMON_USER --test > /dev/null \
-                || return 1
-        start-stop-daemon --start --quiet --background --no-close \
-                --make-pidfile --pidfile $PIDFILE \
-                --exec $DAEMON -c $DAEMON_USER -- \
-                $DAEMON_ARGS >> $DAEMON_LOG_FILE 2>&1 \
-                || return 2
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-        # Return
-        #   0 if daemon has been stopped
-        #   1 if daemon was already stopped
-        #   2 if daemon could not be stopped
-        #   other if a failure occurred
-        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
-        RETVAL="$?"
-        [ "$RETVAL" = 2 ] && return 2
-        # Many daemons don't delete their pidfiles when they exit.
-        rm -f $PIDFILE
-        return "$RETVAL"
-}
-
-
-case "$1" in
-  start)
-        log_daemon_msg "Starting $DESC" "$NAME"
-        do_start
-        case "$?" in
-                0|1) log_end_msg 0 || exit 0 ;;
-                2) log_end_msg 1 || exit 1 ;;
-        esac
-        ;;
-  stop)
-        log_daemon_msg "Stopping $DESC" "$NAME"
-        do_stop
-        case "$?" in
-                0|1) log_end_msg 0 ;;
-                2) exit 1 ;;
-        esac
-        ;;
-  status)
-        status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $?
-        ;;
-
-  restart|force-reload)
-        log_daemon_msg "Restarting $DESC" "$NAME"
-        do_stop
-        case "$?" in
-          0|1)
-                do_start
-                case "$?" in
-                        0) log_end_msg 0 ;;
-                        1) log_end_msg 1 ;; # Old process is still running
-                        *) log_end_msg 1 ;; # Failed to start
-                esac
-                ;;
-          *)
-                # Failed to stop
-                log_end_msg 1
-                ;;
-        esac
-        ;;
-  *)
-        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
-        exit 3
-        ;;
-esac
diff --git a/roles/kubernetes/node/templates/kubelet.j2 b/roles/kubernetes/node/templates/kubelet.j2
index 572a5a28377d8f374561a295c28b76c983215884..1de3ba9661ccba7ca8a1acb43169464ad85958aa 100644
--- a/roles/kubernetes/node/templates/kubelet.j2
+++ b/roles/kubernetes/node/templates/kubelet.j2
@@ -1,10 +1,5 @@
-{% if ansible_service_mgr in ["sysvinit","upstart"] %}
-# Logging directory
-KUBE_LOGGING="--log-dir={{ kube_log_dir }} --logtostderr=true"
-{% else %}
 # logging to stderr means we get it in the systemd journal
 KUBE_LOGGING="--logtostderr=true"
-{% endif %}
 KUBE_LOG_LEVEL="--v={{ kube_log_level }}"
 # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
 KUBELET_ADDRESS="--address={{ ip | default("0.0.0.0") }}"
@@ -51,8 +46,3 @@ KUBELET_CLOUDPROVIDER="--cloud-provider={{ cloud_provider }}"
 {% else %}
 KUBELET_CLOUDPROVIDER=""
 {% endif %}
-{% if ansible_service_mgr in ["sysvinit","upstart"] %}
-DAEMON_ARGS="$KUBE_LOGGING $KUBE_LOG_LEVEL $KUBE_ALLOW_PRIV $KUBELET_API_SERVER $KUBELET_ADDRESS \
-$KUBELET_HOSTNAME $KUBELET_ARGS $DOCKER_SOCKET $KUBELET_ARGS $KUBELET_NETWORK_PLUGIN \
-$KUBELET_CLOUDPROVIDER"
-{% endif %}
diff --git a/roles/kubernetes/node/templates/rh-kubelet.initd.j2 b/roles/kubernetes/node/templates/rh-kubelet.initd.j2
deleted file mode 100644
index faae10d1aaadb9041918a96faa6cd2ebe35fe289..0000000000000000000000000000000000000000
--- a/roles/kubernetes/node/templates/rh-kubelet.initd.j2
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/bash
-#
-#       /etc/rc.d/init.d/kubelet
-#
-# chkconfig:   2345 95 95
-# description: Daemon for kubelet (kubernetes.io)
-
-### BEGIN INIT INFO
-# Provides:       kubelet
-# Required-Start: $local_fs $network $syslog cgconfig
-# Required-Stop:
-# Should-Start:
-# Should-Stop:
-# Default-Start: 2 3 4 5
-# Default-Stop:  0 1 6
-# Short-Description: start and stop kubelet
-# Description:
-#   The Kubernetes container manager maintains docker state against a state file.
-### END INIT INFO
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-prog="kubelet"
-exec="{{ bin_dir }}/$prog"
-pidfile="/var/run/$prog.pid"
-lockfile="/var/lock/subsys/$prog"
-logfile="/var/log/$prog"
-
-[ -e {{kube_config_dir}}/$prog.env ] && . {{kube_config_dir}}/$prog.env
-
-start() {
-    if [ ! -x $exec ]; then
-      if [ ! -e $exec ]; then
-        echo "Docker executable $exec not found"
-      else
-        echo "You do not have permission to execute the Docker executable $exec"
-      fi
-      exit 5
-    fi
-
-    check_for_cleanup
-
-    if ! [ -f $pidfile ]; then
-        printf "Starting $prog:\t"
-        echo "\n$(date)\n" >> $logfile
-        $exec $DAEMON_ARGS &>> $logfile &
-        pid=$!
-        echo $pid >> $pidfile
-        touch $lockfile
-        success
-        echo
-    else
-        failure
-        echo
-        printf "$pidfile still exists...\n"
-        exit 7
-    fi
-}
-
-stop() {
-    echo -n $"Stopping $prog: "
-    killproc -p $pidfile -d 300 $prog
-    retval=$?
-    echo
-    [ $retval -eq 0 ] && rm -f $lockfile
-    return $retval
-}
-
-restart() {
-    stop
-    start
-}
-
-reload() {
-    restart
-}
-
-force_reload() {
-    restart
-}
-
-rh_status() {
-    status -p $pidfile $prog
-}
-
-rh_status_q() {
-    rh_status >/dev/null 2>&1
-}
-
-
-check_for_cleanup() {
-    if [ -f ${pidfile} ]; then
-        /bin/ps -fp $(cat ${pidfile}) > /dev/null || rm ${pidfile}
-    fi
-}
-
-case "$1" in
-    start)
-        rh_status_q && exit 0
-        $1
-        ;;
-    stop)
-        rh_status_q || exit 0
-        $1
-        ;;
-    restart)
-        $1
-        ;;
-    reload)
-        rh_status_q || exit 7
-        $1
-        ;;
-    force-reload)
-        force_reload
-        ;;
-    status)
-        rh_status
-        ;;
-    condrestart|try-restart)
-        rh_status_q || exit 0
-        restart
-        ;;
-    *)
-        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
-        exit 2
-esac
-
-exit $?
diff --git a/roles/kubernetes/preinstall/tasks/main.yml b/roles/kubernetes/preinstall/tasks/main.yml
index b94867e5181ada325c65e1166ee0ca0deaccb158..aeaefc45d2046fdcf91617199033b808af41b4a1 100644
--- a/roles/kubernetes/preinstall/tasks/main.yml
+++ b/roles/kubernetes/preinstall/tasks/main.yml
@@ -1,4 +1,7 @@
 ---
+- include: pre-upgrade.yml
+  tags: [upgrade,  bootstrap-os]
+
 - name: Force binaries directory for CoreOS
   set_fact:
     bin_dir: "/opt/bin"
@@ -59,14 +62,6 @@
   when: "{{ inventory_hostname in groups['k8s-cluster'] }}"
   tags: [kubelet, bootstrap-os, master, node]
 
-- name: Create kubernetes logs directory
-  file:
-    path: "{{ kube_log_dir }}"
-    state: directory
-    owner: kube
-  when: ansible_service_mgr in ["sysvinit","upstart"] and "{{ inventory_hostname in groups['k8s-cluster'] }}"
-  tags: [bootstrap-os, master, node]
-
 - name: check cloud_provider value
   fail:
     msg: "If set the 'cloud_provider' var must be set either to 'generic', 'gce', 'aws', 'azure' or 'openstack'"
@@ -179,7 +174,7 @@
 
 - include: resolvconf.yml
   tags: [bootstrap-os, resolvconf]
-  
+
 - name: Check if we are running inside a Azure VM
   stat: path=/var/lib/waagent/
   register: azure_check
diff --git a/roles/kubernetes/preinstall/tasks/pre-upgrade.yml b/roles/kubernetes/preinstall/tasks/pre-upgrade.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ebe3a8f3573217efbc193a65703dcc017a5adb0e
--- /dev/null
+++ b/roles/kubernetes/preinstall/tasks/pre-upgrade.yml
@@ -0,0 +1,4 @@
+---
+- name: Stop if non systemd OS type
+  assert:
+    that: ansible_service_mgr == "systemd"
diff --git a/roles/network_plugin/calico/handlers/main.yml b/roles/network_plugin/calico/handlers/main.yml
index d4059c412adcecd1e22b1879a9ff5ad0a9c8b501..78dad7505d479f35f6e8aa411266352df0f6f8e5 100644
--- a/roles/network_plugin/calico/handlers/main.yml
+++ b/roles/network_plugin/calico/handlers/main.yml
@@ -7,7 +7,6 @@
 
 - name : Calico | reload systemd
   shell: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: Calico | reload calico-node
   service:
diff --git a/roles/network_plugin/calico/rr/handlers/main.yml b/roles/network_plugin/calico/rr/handlers/main.yml
index edfb1ad7137ccfa7fea49a40930e233b386ec866..efd0e12ac4a6be9073000b9c6a1885096205fa66 100644
--- a/roles/network_plugin/calico/rr/handlers/main.yml
+++ b/roles/network_plugin/calico/rr/handlers/main.yml
@@ -7,7 +7,6 @@
 
 - name : Calico-rr | reload systemd
   shell: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: Calico-rr | reload calico-rr
   service:
diff --git a/roles/network_plugin/calico/rr/tasks/main.yml b/roles/network_plugin/calico/rr/tasks/main.yml
index b5807632fb89d2eb114d33a15745802f223432c5..efe4616d25d8beb41fa23e86f177fc088e60bb46 100644
--- a/roles/network_plugin/calico/rr/tasks/main.yml
+++ b/roles/network_plugin/calico/rr/tasks/main.yml
@@ -36,12 +36,10 @@
 
 - name: Calico-rr | Write calico-rr.env for systemd init file
   template: src=calico-rr.env.j2 dest=/etc/calico/calico-rr.env
-  when: ansible_service_mgr == "systemd"
   notify: restart calico-rr
 
 - name: Calico-rr | Write calico-rr systemd init file
   template: src=calico-rr.service.j2 dest=/etc/systemd/system/calico-rr.service
-  when: ansible_service_mgr == "systemd"
   notify: restart calico-rr
 
 - name: Calico-rr | Configure route reflector
diff --git a/roles/network_plugin/calico/tasks/main.yml b/roles/network_plugin/calico/tasks/main.yml
index ae6e0e4d40705da2f35908bf31c2145e10c78f3d..462fcec669f6681a38ced6245035e466b4a0a1b2 100644
--- a/roles/network_plugin/calico/tasks/main.yml
+++ b/roles/network_plugin/calico/tasks/main.yml
@@ -162,33 +162,19 @@
   run_once: true
   when: legacy_calicoctl
 
-- name: Calico | Write /etc/network-environment
-  template: src=network-environment.j2 dest=/etc/network-environment
-  when: ansible_service_mgr in ["sysvinit","upstart"]
-
 - name: Calico (old) | Write calico-node systemd init file
   template: src=calico-node.service.legacy.j2 dest=/etc/systemd/system/calico-node.service
-  when: ansible_service_mgr == "systemd" and legacy_calicoctl
+  when: legacy_calicoctl
   notify: restart calico-node
 
 - name: Calico | Write calico.env for systemd init file
   template: src=calico.env.j2 dest=/etc/calico/calico.env
-  when: ansible_service_mgr == "systemd" and not legacy_calicoctl
+  when: not legacy_calicoctl
   notify: restart calico-node
 
 - name: Calico | Write calico-node systemd init file
   template: src=calico-node.service.j2 dest=/etc/systemd/system/calico-node.service
-  when: ansible_service_mgr == "systemd" and not legacy_calicoctl
-  notify: restart calico-node
-
-- name: Calico | Write calico-node initd script
-  template: src=deb-calico.initd.j2 dest=/etc/init.d/calico-node owner=root mode=0755
-  when: ansible_service_mgr in ["sysvinit","upstart"] and ansible_os_family == "Debian"
-  notify: restart calico-node
-
-- name: Calico | Write calico-node initd script
-  template: src=rh-calico.initd.j2 dest=/etc/init.d/calico-node owner=root mode=0755
-  when: ansible_service_mgr in ["sysvinit","upstart"] and ansible_os_family == "RedHat"
+  when: not legacy_calicoctl
   notify: restart calico-node
 
 - name: Calico | Restart calico-node if secrets changed
diff --git a/roles/network_plugin/calico/templates/deb-calico.initd.j2 b/roles/network_plugin/calico/templates/deb-calico.initd.j2
deleted file mode 100644
index e155cae9c9ebe207f5dc4ee16c4cf19bfb4ac022..0000000000000000000000000000000000000000
--- a/roles/network_plugin/calico/templates/deb-calico.initd.j2
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/bin/bash
-#
-### BEGIN INIT INFO
-# Provides:   calico-node
-# Required-Start:    $local_fs $network $syslog
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: Calico docker container
-# Description:
-#   Runs calico as a docker container
-### END INIT INFO
-set -a
-
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC="Calico-node Docker"
-NAME=calico-node
-DAEMON={{ bin_dir }}/calicoctl
-DAEMON_ARGS=""
-DOCKER=$(which docker)
-SCRIPTNAME=/etc/init.d/$NAME
-DAEMON_USER=root
-
-# Exit if the binary is not present
-[ -x "$DAEMON" ] || exit 0
-
-# Exit if the docker package is not installed
-[ -x "$DOCKER" ] || exit 0
-
-# Read configuration variable file if it is present
-[ -r /etc/network-environment ] && . /etc/network-environment
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-do_status()
-{
-    if [ $($DOCKER ps --format "{{.Image}}" | grep -cw 'calico/node') -eq 1 ]; then
-        return 0
-    else
-        return 1
-    fi
-}
-
-# Function that starts the daemon/service
-#
-do_start()
-{
-    do_status
-    retval=$?
-    if [ $retval -ne 0 ]; then
-{% if legacy_calicoctl %}
-        ${DAEMON} node --ip=${DEFAULT_IPV4} >>/dev/null && return 0 || return 2
-{% else %}
-         ${DAEMON} node run --ip=${DEFAULT_IPV4} >>/dev/null && return 0 || return 2
-{% endif %}
-    else
-        return 1
-    fi
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-{% if legacy_calicoctl %}
-    ${DAEMON} node stop >> /dev/null || ${DAEMON} node stop --force >> /dev/null
-{% else %}
-    echo "Current version of ${DAEMON} doesn't support 'node stop' command!"
-    return 1
-{% endif %}
-}
-
-
-case "$1" in
-  start)
-        log_daemon_msg "Starting $DESC" "$NAME"
-        do_start
-        case "$?" in
-                0|1) log_end_msg 0 || exit 0 ;;
-                2) log_end_msg 1 || exit 1 ;;
-        esac
-        ;;
-  stop)
-        log_daemon_msg "Stopping $DESC" "$NAME"
-        if do_stop; then
-            log_end_msg 0
-        else
-            log_failure_msg "Can't stop calico-node"
-            log_end_msg 1
-        fi
-        ;;
-  status)
-        if do_status; then
-            log_end_msg 0
-        else
-            log_failure_msg "Calico-node is not running"
-            log_end_msg 1
-        fi
-        ;;
-
-  restart|force-reload)
-        log_daemon_msg "Restarting $DESC" "$NAME"
-        if do_stop; then
-            if do_start; then
-                log_end_msg 0
-                exit 0
-            else
-                rc="$?"
-            fi
-        else
-           rc="$?"
-        fi
-        log_failure_msg "Can't restart Calico-node"
-        log_end_msg ${rc}
-        ;;
-  *)
-        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
-        exit 3
-        ;;
-esac
diff --git a/roles/network_plugin/calico/templates/network-environment.j2 b/roles/network_plugin/calico/templates/network-environment.j2
deleted file mode 100644
index 8fd13d36cea7605ea7744615e58fc81ec39a3c85..0000000000000000000000000000000000000000
--- a/roles/network_plugin/calico/templates/network-environment.j2
+++ /dev/null
@@ -1,12 +0,0 @@
-# This host's IPv4 address (the source IP address used to reach other nodes
-# in the Kubernetes cluster).
-DEFAULT_IPV4={{ip | default(ansible_default_ipv4.address) }}
-
-# The Kubernetes master IP
-KUBERNETES_MASTER={{ kube_apiserver_endpoint }}
-
-# IP and port of etcd instance used by Calico
-ETCD_ENDPOINTS={{ etcd_access_endpoint }}
-ETCD_CA_CERT_FILE=/etc/calico/certs/ca_cert.crt
-ETCD_CERT_FILE=/etc/calico/certs/cert.crt
-ETCD_KEY_FILE=/etc/calico/certs/key.pem
diff --git a/roles/network_plugin/calico/templates/rh-calico.initd.j2 b/roles/network_plugin/calico/templates/rh-calico.initd.j2
deleted file mode 100644
index 7fea725217e8987b46915ef572bb23b38409d60a..0000000000000000000000000000000000000000
--- a/roles/network_plugin/calico/templates/rh-calico.initd.j2
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/bash
-#
-#       /etc/rc.d/init.d/calico-node
-#
-# chkconfig:   2345 95 95
-# description: Daemon for calico-node (http://www.projectcalico.org/)
-set -a
-
-### BEGIN INIT INFO
-# Provides:       calico-node
-# Required-Start: $local_fs $network $syslog cgconfig
-# Required-Stop:
-# Should-Start:
-# Should-Stop:
-# Default-Start: 2 3 4 5
-# Default-Stop:  0 1 6
-# Short-Description: start and stop calico-node
-# Description:
-#   Manage calico-docker container
-### END INIT INFO
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-prog="calicoctl"
-exec="{{ bin_dir }}/$prog"
-dockerexec="$(which docker)"
-logfile="/var/log/$prog"
-
-[ -e /etc/network-environment ] && for i in $(cat /etc/network-environment | egrep '(^$|^#)'); do export $i; done
-
-do_status()
-{
-    if [ $($dockerexec ps --format "{{.Image}}" | grep -cw 'calico/node') -ne 1 ]; then
-        return 1
-    fi
-}
-
-do_start() {
-    if [ ! -x $exec ]; then
-      if [ ! -e $exec ]; then
-        echo "calico-node executable $exec not found"
-      else
-        echo "You do not have permission to execute the calico-node executable $exec"
-      fi	      
-      exit 5
-    fi
-
-    [ -x "$dockerexec" ] || exit 0
-
-    do_status
-    retval=$?
-    if [ $retval -ne 0 ]; then
-        printf "Starting $prog:\t"
-        echo "\n$(date)\n" >> $logfile
-{% if legacy_calicoctl %}
-        $exec node --ip=${DEFAULT_IPV4} &>>$logfile
-{% else %}
-        $exec node run --ip=${DEFAULT_IPV4} &>>$logfile
-{% endif %}
-        success
-        echo
-    else
-        echo -n "calico-node's already running"
-        success
-        exit 0
-    fi
-}
-
-do_stop() {
-    echo -n $"Stopping $prog: "
-{% if legacy_calicoctl %}
-    $exec node stop >> /dev/null || $exec node stop --force >> /dev/null
-{% else %}
-    echo "Current version of ${exec} doesn't support 'node stop' command!"
-    return 1
-{% endif %}
-    retval=$?
-    echo
-    return $retval
-}
-
-restart() {
-    do_stop
-    do_start
-}
-
-reload() {
-    restart
-}
-
-force_reload() {
-    restart
-}
-
-case "$1" in
-    start)
-        do_start
-        case "$?" in
-                0|1) success || exit 0 ;;
-                2) failure || exit 1 ;;
-        esac
-        ;;
-    stop)
-        echo -n "Stopping $DESC" "$NAME"
-        if do_stop; then
-            success
-            echo
-        else
-            echo -n "Can't stop calico-node"
-            failure
-            echo
-        fi
-        ;;
-    restart)
-        $1
-        ;;
-    reload)
-        $1
-        ;;
-    force-reload)
-        force_reload
-        ;;
-    status)
-        if do_status; then
-            echo -n "Calico-node is running"
-            success
-            echo
-        else
-            echo -n "Calico-node is not running"
-            failure
-            echo
-        fi
-        ;;
-    *)
-        echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
-        exit 2
-esac
-
-exit $?
diff --git a/roles/network_plugin/flannel/handlers/main.yml b/roles/network_plugin/flannel/handlers/main.yml
index e393b6163d69dc0da2e6ddbc5ad0cba54f014699..b2a66f43f72479b3161b0d2b8e5fa51ba21cf378 100644
--- a/roles/network_plugin/flannel/handlers/main.yml
+++ b/roles/network_plugin/flannel/handlers/main.yml
@@ -15,7 +15,6 @@
 
 - name : Flannel | reload systemd
   shell: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: Flannel | reload docker.socket
   service:
diff --git a/roles/network_plugin/flannel/tasks/main.yml b/roles/network_plugin/flannel/tasks/main.yml
index e6866af31d5bf67cf006b998866528d4f900f078..47aec49d9f98873c375d05c7d1c89a45ff320349 100644
--- a/roles/network_plugin/flannel/tasks/main.yml
+++ b/roles/network_plugin/flannel/tasks/main.yml
@@ -51,31 +51,11 @@
     docker_network_options: '"--bip={{ flannel_subnet }} --mtu={{ flannel_mtu }}"'
   tags: facts
 
-- name: Flannel | Remove non-systemd docker daemon network options that don't match desired line
-  lineinfile:
-    dest: "{{ docker_options_file }}"
-    regexp: "^DOCKER_NETWORK_OPTIONS=(?!{{ docker_network_options|regex_escape() }})"
-    state: absent
-  when: ansible_service_mgr in ["sysvinit","upstart"]
-
-- name: Flannel | Set non-systemd docker daemon network options
-  lineinfile:
-    dest: "{{ docker_options_file }}"
-    line: DOCKER_NETWORK_OPTIONS={{ docker_network_options }}
-    insertbefore: ^{{ docker_options_name }}=
-    owner: root
-    group: root
-    mode: 0644
-  notify:
-    - Flannel | restart docker
-  when: ansible_service_mgr in ["sysvinit","upstart"]
-
 - name: Flannel | Ensure path for docker network systemd drop-in
   file:
     path: "/etc/systemd/system/docker.service.d"
     state: directory
     owner: root
-  when: ansible_service_mgr == "systemd"
 
 - name: Flannel | Create docker network systemd drop-in
   template:
@@ -83,6 +63,3 @@
     dest: "/etc/systemd/system/docker.service.d/flannel-options.conf"
   notify:
     - Flannel | restart docker
-  when: ansible_service_mgr == "systemd"
-
-- meta: flush_handlers
diff --git a/roles/network_plugin/weave/handlers/main.yml b/roles/network_plugin/weave/handlers/main.yml
index e821e989b0fc4992e0bb498ea3b904db65998488..b9c3e31d872c3e6a0df3814fc46a8661dc18b196 100644
--- a/roles/network_plugin/weave/handlers/main.yml
+++ b/roles/network_plugin/weave/handlers/main.yml
@@ -7,7 +7,6 @@
 
 - name : Weave | reload systemd
   shell: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd"
 
 - name: restart weaveproxy
   command: /bin/true
diff --git a/roles/network_plugin/weave/tasks/main.yml b/roles/network_plugin/weave/tasks/main.yml
index 9609ea141b5ff483226a6886f2b53e6b122bbabe..ea226572b61ee80fa9ea5bf86e414eec51c260ec 100644
--- a/roles/network_plugin/weave/tasks/main.yml
+++ b/roles/network_plugin/weave/tasks/main.yml
@@ -31,17 +31,14 @@
 
 - name: Weave | Write weave systemd init file
   template: src=weave.service.j2 dest=/etc/systemd/system/weave.service
-  when: ansible_service_mgr == "systemd"
   notify: restart weave
 
 - name: Weave | Write weaveproxy systemd init file
   template: src=weaveproxy.service.j2 dest=/etc/systemd/system/weaveproxy.service
-  when: ansible_service_mgr == "systemd"
   notify: restart weaveproxy
 
 - name: Weave | Write weaveexpose systemd init file
   template: src=weaveexpose.service.j2 dest=/etc/systemd/system/weaveexpose.service
-  when: ansible_service_mgr == "systemd"
   notify: restart weaveexpose
 
 - meta: flush_handlers
diff --git a/roles/reset/tasks/main.yml b/roles/reset/tasks/main.yml
index 217ce67294080ebf17e9075f35d444d1dd66ae0c..93f13fb5f92b20356268f5c2a8ccc8023ab33bd7 100644
--- a/roles/reset/tasks/main.yml
+++ b/roles/reset/tasks/main.yml
@@ -18,7 +18,7 @@
 
 - name: reset | systemctl daemon-reload
   command: systemctl daemon-reload
-  when: ansible_service_mgr == "systemd" and services_removed.changed
+  when: services_removed.changed
 
 - name: reset | remove all containers
   shell: "{{ docker_bin_dir }}/docker ps -aq | xargs -r docker rm -fv"