2013-06-09 16:25:59 +02:00
|
|
|
from base import Task
|
2013-06-23 15:26:08 +02:00
|
|
|
from common import phases
|
2013-06-27 22:00:01 +02:00
|
|
|
from common.exceptions import TaskError
|
2013-06-23 17:54:25 +02:00
|
|
|
import packages
|
2013-05-02 19:13:35 +02:00
|
|
|
|
2013-06-26 20:14:37 +02:00
|
|
|
|
2013-06-23 12:00:17 +02:00
|
|
|
class CheckPackages(Task):
|
|
|
|
description = 'Checking installed host packages'
|
2013-06-23 22:12:29 +02:00
|
|
|
phase = phases.preparation
|
2013-06-23 15:26:08 +02:00
|
|
|
after = [packages.HostPackages, packages.ImagePackages]
|
2013-06-09 20:29:54 +02:00
|
|
|
|
2013-05-02 19:13:35 +02:00
|
|
|
def run(self, info):
|
2013-06-23 12:00:17 +02:00
|
|
|
import subprocess
|
|
|
|
from os import devnull
|
|
|
|
for package in info.host_packages:
|
|
|
|
try:
|
|
|
|
with open(devnull, 'w') as dev_null:
|
|
|
|
subprocess.check_call(['/usr/bin/dpkg', '-s', package], stdout=dev_null, stderr=dev_null)
|
|
|
|
except subprocess.CalledProcessError:
|
|
|
|
msg = "The package ``{0}\'\' is not installed".format(package)
|
2013-06-27 22:00:01 +02:00
|
|
|
raise TaskError(msg)
|
2013-05-02 19:13:35 +02:00
|
|
|
|
|
|
|
|
2013-06-23 12:00:17 +02:00
|
|
|
class GetInfo(Task):
|
|
|
|
description = 'Retrieving instance metadata'
|
2013-06-23 22:12:29 +02:00
|
|
|
phase = phases.preparation
|
2013-06-09 20:29:54 +02:00
|
|
|
|
2013-05-02 19:13:35 +02:00
|
|
|
def run(self, info):
|
2013-06-23 12:00:17 +02:00
|
|
|
import urllib2
|
|
|
|
import json
|
|
|
|
metadata_url = 'http://169.254.169.254/latest/dynamic/instance-identity/document'
|
|
|
|
response = urllib2.urlopen(url=metadata_url, timeout=5)
|
|
|
|
info.host = json.load(response)
|
|
|
|
return info
|