Add Container create/delete driver
Blueprint container-cluster-support Change-Id: I638722134bf6bff798eb728b55fe75d4168dde2b
This commit is contained in:
parent
eecf10d3d3
commit
0b2aef7a18
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue