server.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. elif post_action == 'restart':
  41. try:
  42. for container in docker_client.containers.list(all=True, filters={"id": container_id}):
  43. container.restart()
  44. except:
  45. return 'Error'
  46. else:
  47. return 'OK'
  48. else:
  49. return jsonify(message='Invalid action')
  50. else:
  51. return jsonify(message='Invalid container id or missing action')
  52. api.add_resource(containers_get, '/containers/json')
  53. api.add_resource(container_get, '/containers/<string:container_id>/json')
  54. api.add_resource(container_post, '/containers/<string:container_id>/<string:post_action>')
  55. if __name__ == '__main__':
  56. app.run(debug=False, host='0.0.0.0', port='8080')