summaryrefslogtreecommitdiff
path: root/azurelinuxagent/pa/deprovision
diff options
context:
space:
mode:
Diffstat (limited to 'azurelinuxagent/pa/deprovision')
-rw-r--r--azurelinuxagent/pa/deprovision/clearlinux.py31
-rw-r--r--azurelinuxagent/pa/deprovision/default.py17
-rw-r--r--azurelinuxagent/pa/deprovision/factory.py3
-rw-r--r--azurelinuxagent/pa/deprovision/ubuntu.py33
4 files changed, 63 insertions, 21 deletions
diff --git a/azurelinuxagent/pa/deprovision/clearlinux.py b/azurelinuxagent/pa/deprovision/clearlinux.py
new file mode 100644
index 0000000..097891b
--- /dev/null
+++ b/azurelinuxagent/pa/deprovision/clearlinux.py
@@ -0,0 +1,31 @@
+# Microsoft Azure Linux Agent
+#
+# Copyright 2014 Microsoft Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Requires Python 2.4+ and Openssl 1.0+
+#
+
+import azurelinuxagent.common.utils.fileutil as fileutil
+from azurelinuxagent.pa.deprovision.default import DeprovisionHandler, \
+ DeprovisionAction
+
+class ClearLinuxDeprovisionHandler(DeprovisionHandler):
+ def __init__(self, distro):
+ self.distro = distro
+
+ def setup(self, deluser):
+ warnings, actions = super(ClearLinuxDeprovisionHandler, self).setup(deluser)
+ # Probably should just wipe /etc and /var here
+ return warnings, actions
diff --git a/azurelinuxagent/pa/deprovision/default.py b/azurelinuxagent/pa/deprovision/default.py
index b570c31..a702d3f 100644
--- a/azurelinuxagent/pa/deprovision/default.py
+++ b/azurelinuxagent/pa/deprovision/default.py
@@ -17,6 +17,8 @@
# Requires Python 2.4+ and Openssl 1.0+
#
+import signal
+import sys
import azurelinuxagent.common.conf as conf
from azurelinuxagent.common.exception import ProtocolError
from azurelinuxagent.common.future import read_input
@@ -38,6 +40,7 @@ class DeprovisionHandler(object):
def __init__(self):
self.osutil = get_osutil()
self.protocol_util = get_protocol_util()
+ signal.signal(signal.SIGINT, self.handle_interrupt_signal)
def del_root_password(self, warnings, actions):
warnings.append("WARNING! root password will be disabled. "
@@ -63,8 +66,8 @@ class DeprovisionHandler(object):
def regen_ssh_host_key(self, warnings, actions):
warnings.append("WARNING! All SSH host key pairs will be deleted.")
- actions.append(DeprovisionAction(shellutil.run,
- ['rm -f /etc/ssh/ssh_host_*key*']))
+ actions.append(DeprovisionAction(fileutil.rm_files,
+ ['/etc/ssh/ssh_host_*key*']))
def stop_agent_service(self, warnings, actions):
warnings.append("WARNING! The waagent service will be stopped.")
@@ -74,6 +77,11 @@ class DeprovisionHandler(object):
files_to_del = ['/root/.bash_history', '/var/log/waagent.log']
actions.append(DeprovisionAction(fileutil.rm_files, files_to_del))
+ def del_resolv(self, warnings, actions):
+ warnings.append("WARNING! /etc/resolv.conf will be deleted.")
+ files_to_del = ["/etc/resolv.conf"]
+ actions.append(DeprovisionAction(fileutil.rm_files, files_to_del))
+
def del_dhcp_lease(self, warnings, actions):
warnings.append("WARNING! Cached DHCP leases will be deleted.")
dirs_to_del = ["/var/lib/dhclient", "/var/lib/dhcpcd", "/var/lib/dhcp"]
@@ -109,6 +117,7 @@ class DeprovisionHandler(object):
self.del_lib_dir(warnings, actions)
self.del_files(warnings, actions)
+ self.del_resolv(warnings, actions)
if deluser:
self.del_user(warnings, actions)
@@ -128,4 +137,8 @@ class DeprovisionHandler(object):
for action in actions:
action.invoke()
+ def handle_interrupt_signal(self, frame):
+ print("Deprovision is interrupted.")
+ sys.exit(0)
+
diff --git a/azurelinuxagent/pa/deprovision/factory.py b/azurelinuxagent/pa/deprovision/factory.py
index dd01633..72a5be1 100644
--- a/azurelinuxagent/pa/deprovision/factory.py
+++ b/azurelinuxagent/pa/deprovision/factory.py
@@ -21,6 +21,7 @@ from azurelinuxagent.common.version import DISTRO_NAME, DISTRO_VERSION, \
DISTRO_FULL_NAME
from .default import DeprovisionHandler
+from .clearlinux import ClearLinuxDeprovisionHandler
from .coreos import CoreOSDeprovisionHandler
from .ubuntu import UbuntuDeprovisionHandler
@@ -31,6 +32,8 @@ def get_deprovision_handler(distro_name=DISTRO_NAME,
return UbuntuDeprovisionHandler()
if distro_name == "coreos":
return CoreOSDeprovisionHandler()
+ if distro_name == "clear linux":
+ return ClearLinuxDeprovisionHandler()
return DeprovisionHandler()
diff --git a/azurelinuxagent/pa/deprovision/ubuntu.py b/azurelinuxagent/pa/deprovision/ubuntu.py
index 14f90de..b45d415 100644
--- a/azurelinuxagent/pa/deprovision/ubuntu.py
+++ b/azurelinuxagent/pa/deprovision/ubuntu.py
@@ -18,30 +18,25 @@
#
import os
-import azurelinuxagent.common.logger as logger
import azurelinuxagent.common.utils.fileutil as fileutil
from azurelinuxagent.pa.deprovision.default import DeprovisionHandler, \
- DeprovisionAction
-
-def del_resolv():
- if os.path.realpath('/etc/resolv.conf') != '/run/resolvconf/resolv.conf':
- logger.info("resolvconf is not configured. Removing /etc/resolv.conf")
- fileutil.rm_files('/etc/resolv.conf')
- else:
- logger.info("resolvconf is enabled; leaving /etc/resolv.conf intact")
- fileutil.rm_files('/etc/resolvconf/resolv.conf.d/tail',
- '/etc/resolvconf/resolv.conf.d/originial')
+ DeprovisionAction
class UbuntuDeprovisionHandler(DeprovisionHandler):
def __init__(self):
super(UbuntuDeprovisionHandler, self).__init__()
- def setup(self, deluser):
- warnings, actions = super(UbuntuDeprovisionHandler, self).setup(deluser)
- warnings.append("WARNING! Nameserver configuration in "
- "/etc/resolvconf/resolv.conf.d/{tail,originial} "
- "will be deleted.")
- actions.append(DeprovisionAction(del_resolv))
- return warnings, actions
-
+ def del_resolv(self, warnings, actions):
+ if os.path.realpath(
+ '/etc/resolv.conf') != '/run/resolvconf/resolv.conf':
+ warnings.append("WARNING! /etc/resolv.conf will be deleted.")
+ files_to_del = ["/etc/resolv.conf"]
+ actions.append(DeprovisionAction(fileutil.rm_files, files_to_del))
+ else:
+ warnings.append("WARNING! /etc/resolvconf/resolv.conf.d/tail "
+ "and /etc/resolvconf/resolv.conf.d/original will "
+ "be deleted.")
+ files_to_del = ["/etc/resolvconf/resolv.conf.d/tail",
+ "/etc/resolvconf/resolv.conf.d/original"]
+ actions.append(DeprovisionAction(fileutil.rm_files, files_to_del))