63 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from flask import Flask
 | 
						|
from flask_restful import Resource, Api
 | 
						|
from flask import jsonify
 | 
						|
import docker
 | 
						|
 | 
						|
docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock')
 | 
						|
app = Flask(__name__)
 | 
						|
api = Api(app)
 | 
						|
 | 
						|
class containers_get(Resource):
 | 
						|
    def get(self):
 | 
						|
        containers = {}
 | 
						|
        for container in docker_client.containers.list(all=True):
 | 
						|
            containers.update({container.attrs['Id']: container.attrs})
 | 
						|
        return containers
 | 
						|
 | 
						|
class container_get(Resource):
 | 
						|
    def get(self, container_id):
 | 
						|
        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 jsonify(message='No or invalid id defined')
 | 
						|
 | 
						|
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'
 | 
						|
            elif post_action == 'restart':
 | 
						|
                try:
 | 
						|
                    for container in docker_client.containers.list(all=True, filters={"id": container_id}):
 | 
						|
                        container.restart()
 | 
						|
                except:
 | 
						|
                    return 'Error'
 | 
						|
                else:
 | 
						|
                    return 'OK'
 | 
						|
            else:
 | 
						|
                return jsonify(message='Invalid action')
 | 
						|
        else:
 | 
						|
            return jsonify(message='Invalid container id or missing action')
 | 
						|
 | 
						|
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')
 |