[Web, DockerAPI] Be more like official Docker API

This commit is contained in:
andryyy
2017-10-06 10:20:40 +02:00
parent fc18d153cd
commit 3ae0b16845
2 changed files with 45 additions and 32 deletions

View File

@@ -1,41 +1,54 @@
from flask import Flask
from flask_restful import Resource, Api
from docker import APIClient
from flask import jsonify
import docker
dockercli = APIClient(base_url='unix://var/run/docker.sock')
docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock')
app = Flask(__name__)
api = Api(app)
class Containers(Resource):
class containers_get(Resource):
def get(self):
return dockercli.containers(all=True)
containers = {}
for container in docker_client.containers.list(all=True):
containers.update({container.attrs['Id']: container.attrs})
return containers
class ContainerInfo(Resource):
class container_get(Resource):
def get(self, container_id):
return dockercli.containers(all=True, filters={"id": container_id})
class ContainerStart(Resource):
def post(self, container_id):
try:
dockercli.start(container_id);
except:
return 'Error'
if container_id and container_id.isalnum():
for container in docker_client.containers.list(all=True, filters={"id": container_id}):
return container.attrs
else:
return 'OK'
return jsonify(message='No or invalid id defined')
class ContainerStop(Resource):
def post(self, container_id):
try:
dockercli.stop(container_id);
except:
return 'Error'
class container_post(Resource):
def post(self, container_id, post_action):
if container_id and container_id.isalnum() and post_action:
if post_action == 'stop':
try:
for container in docker_client.containers.list(all=True, filters={"id": container_id}):
container.stop()
except:
return 'Error'
else:
return 'OK'
elif post_action == 'start':
try:
for container in docker_client.containers.list(all=True, filters={"id": container_id}):
container.start()
except:
return 'Error'
else:
return 'OK'
else:
return jsonify(message='Invalid action')
else:
return 'OK'
return jsonify(message='Invalid container id or missing action')
api.add_resource(Containers, '/info/container/all')
api.add_resource(ContainerInfo, '/info/container/<string:container_id>')
api.add_resource(ContainerStop, '/stop/container/<string:container_id>')
api.add_resource(ContainerStart, '/start/container/<string:container_id>')
api.add_resource(containers_get, '/containers/json')
api.add_resource(container_get, '/containers/<string:container_id>/json')
api.add_resource(container_post, '/containers/<string:container_id>/<string:post_action>')
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0', port='8080')