docker-swarm-api
Sample Usage
master_connection = Docker::Swarm::Connection.new('http://10.20.30.1')
swarm_init_options = {
"ListenAddr" => "0.0.0.0:2377",
}
swarm = Docker::Swarm::Swarm.init(swarm_init_options, master_connection)
expect(swarm).to_not be nil
nodes = Docker::Swarm::Node.all({}, master_connection)
expect(nodes.length).to eq 1
worker_connection = Docker::Swarm::Connection.new('http://10.20.30.2')
swarm.join(worker_ip, worker_connection)
nodes = Docker::Swarm::Node.all({}, master_connection)
network = Docker::Swarm::Network.create(network_name, opts = {}, master_connection)
service_create_options = {
"Name" => "nginx",
"TaskTemplate" => {
"ContainerSpec" => {
"Networks" => [network.id],
"Image" => "nginx:1.11.7",
"Mounts" => [
],
"User" => "root"
},
"Env" => ["TEST_ENV=test"],
"LogDriver" => {
"Name" => "json-file",
"Options" => {
"max-file" => "3",
"max-size" => "10M"
}
},
"Placement" => {},
"Resources" => {
"Limits" => {
"MemoryBytes" => 104857600
},
"Reservations" => {
}
},
"RestartPolicy" => {
"Condition" => "on-failure",
"Delay" => 1,
"MaxAttempts" => 3
}
},
"Mode" => {
"Replicated" => {
"Replicas" => 5
}
},
"UpdateConfig" => {
"Delay" => 2,
"Parallelism" => 2,
"FailureAction" => "pause"
},
"EndpointSpec" => {
"Ports" => [
{
"Protocol" => "tcp",
"PublishedPort" => 80,
"TargetPort" => 80
}
]
},
"Labels" => {
"foo" => "bar"
}
}
service = Docker::Swarm::Service.create(service_create_options, master_connection)
manager_nodes = swarm.manager_nodes
worker_nodes = swarm.worker_nodes
worker_node = worker_nodes.first
worker_node.drain
tasks = Docker::Swarm::Task.all({}, master_connection)
service.scale(20)
Docker::Swarm::Swarm.leave(false, worker_connection)
Docker::Swarm::Swarm.leave(true, master_connection)