server.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from flask import Flask
  2. from flask_restful import Resource, Api
  3. from flask import jsonify
  4. import docker
  5. docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock')
  6. app = Flask(__name__)
  7. api = Api(app)
  8. class containers_get(Resource):
  9. def get(self):
  10. containers = {}
  11. for container in docker_client.containers.list(all=True):
  12. containers.update({container.attrs['Id']: container.attrs})
  13. return containers
  14. class container_get(Resource):
  15. def get(self, container_id):
  16. if container_id and container_id.isalnum():
  17. for container in docker_client.containers.list(all=True, filters={"id": container_id}):
  18. return container.attrs
  19. else:
  20. return jsonify(message='No or invalid id defined')
  21. class container_post(Resource):
  22. def post(self, container_id, post_action):
  23. if container_id and container_id.isalnum() and post_action:
  24. if post_action == 'stop':
  25. try:
  26. for container in docker_client.containers.list(all=True, filters={"id": container_id}):
  27. container.stop()
  28. except:
  29. return 'Error'
  30. else:
  31. return 'OK'
  32. elif post_action == 'start':
  33. try:
  34. for container in docker_client.containers.list(all=True, filters={"id": container_id}):
  35. container.start()
  36. except:
  37. return 'Error'
  38. else:
  39. return 'OK'
  40. else:
  41. return jsonify(message='Invalid action')
  42. else:
  43. return jsonify(message='Invalid container id or missing action')
  44. api.add_resource(containers_get, '/containers/json')
  45. api.add_resource(container_get, '/containers/<string:container_id>/json')
  46. api.add_resource(container_post, '/containers/<string:container_id>/<string:post_action>')
  47. if __name__ == '__main__':
  48. app.run(debug=False, host='0.0.0.0', port='8080')