Add Container create/delete driver

Blueprint container-cluster-support

Change-Id: I638722134bf6bff798eb728b55fe75d4168dde2b
This commit is contained in:
xu-haiwei 2016-06-21 14:27:46 +09:00
parent eecf10d3d3
commit 0b2aef7a18
3 changed files with 50 additions and 6 deletions

View File

View File

@ -10,11 +10,20 @@
# License for the specific language governing permissions and limitations
# under the License.
from senlin.drivers import base
import docker
class DockerClient(base.DriverBase):
class DockerClient(object):
"""Docker driver."""
def __init__(self, params):
super(DockerClient, self).__init__(params)
def __init__(self, url):
self.url = url
self._dockerclient = docker.Client(base_url=self.url)
def container_create(self, image, name=None, command=None):
return self._dockerclient.create_container(name=name, image=image,
command=command)
def container_delete(self, container):
self._dockerclient.remove_container(container)
return True

View File

@ -10,13 +10,17 @@
# License for the specific language governing permissions and limitations
# under the License.
import docker
from oslo_log import log as logging
import six
from senlin.common.i18n import _
from senlin.common import schema
from senlin.drivers import base as driver_base
from senlin.drivers.container import docker as docker_driver
from senlin.profiles import base
LOG = logging.getLogger(__name__)
class DockerProfile(base.Profile):
"""Profile for a docker container."""
@ -55,6 +59,7 @@ class DockerProfile(base.Profile):
self._dockerclient = None
self._novaclient = None
self.container_id = None
def docker(self, obj):
"""Construct docker client based on object.
@ -69,7 +74,8 @@ class DockerProfile(base.Profile):
host = self.properties[self.HOST_NODE]
host_ip = self.get_host_ip(self, obj, host)
url = 'tcp://' + host_ip + ':2375'
self._dockerclient = docker.Client(base_url=url)
self._dockerclient = docker_driver.Dockerclient(url)
return self._dockerclient
def get_host_ip(self, obj, host):
"""Fetch the ip address of nova server."""
@ -90,3 +96,32 @@ class DockerProfile(base.Profile):
params = self._build_conn_params(obj.user, obj.project)
self._novaclient = driver_base.SenlinDriver().compute(params)
return self._novaclient
def do_create(self, obj):
"""Create a container using the given profile."""
kwargs = {}
kwargs['image'] = self.properties[self.IMAGE]
kwargs['command'] = self.properties[self.COMMAND]
kwargs['name'] = self.properties[self.NAME]
try:
container = self.docker(obj).container_create(**kwargs)
except Exception as ex:
LOG.error("Container creation failed: %s" % six.text_type(ex))
return
self.container_id = container.id
return container.id
def do_delete(self, obj):
"""Delete a container node."""
self.container_id = obj.physical_id
if not obj.physical_id:
return True
try:
self.docker(obj).container_delete(self.container_id)
except Exception as ex:
LOG.error("Container deletion failded: %s" % six.text_type(ex))
return False
return True