Some work in UP
This commit is contained in:
parent
894da5ff61
commit
d276c91f22
41
src/faaso.cr
41
src/faaso.cr
@ -24,7 +24,7 @@ module Faaso
|
|||||||
# TODO: decide template based on file extensions or other metadata
|
# TODO: decide template based on file extensions or other metadata
|
||||||
template = "templates/crystal"
|
template = "templates/crystal"
|
||||||
tmp_dir = "tmp/#{UUID.random}"
|
tmp_dir = "tmp/#{UUID.random}"
|
||||||
slug = arg.gsub("/","_").strip("_")
|
slug = arg.gsub("/", "_").strip("_")
|
||||||
repo = "localhost:5000"
|
repo = "localhost:5000"
|
||||||
tag = "#{repo}/#{slug}:latest"
|
tag = "#{repo}/#{slug}:latest"
|
||||||
puts "Building function... #{arg} in #{tmp_dir}"
|
puts "Building function... #{arg} in #{tmp_dir}"
|
||||||
@ -37,6 +37,8 @@ module Faaso
|
|||||||
docker_api.images.build(context: tmp_dir, tags: [tag, "#{slug}:latest"]) { }
|
docker_api.images.build(context: tmp_dir, tags: [tag, "#{slug}:latest"]) { }
|
||||||
puts "Pushing to repo as #{tag}"
|
puts "Pushing to repo as #{tag}"
|
||||||
docker_api.images.tag(repo: repo, name: slug, tag: "latest")
|
docker_api.images.tag(repo: repo, name: slug, tag: "latest")
|
||||||
|
# FIXME: pushing is broken because my test registry has no auth
|
||||||
|
# docker_api.images.push(name: slug, tag: "latest", auth: "")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -52,9 +54,42 @@ module Faaso
|
|||||||
|
|
||||||
def run
|
def run
|
||||||
@arguments.each do |arg|
|
@arguments.each do |arg|
|
||||||
puts "Starting function... #{arg}"
|
slug = arg.gsub("/", "_").strip("_")
|
||||||
# TODO: Check that we have an image for the function
|
repo = "localhost:5000"
|
||||||
|
tag = "#{repo}/#{slug}:latest"
|
||||||
|
docker_api = Docr::API.new(Docr::Client.new)
|
||||||
|
# Pull image from registry
|
||||||
|
docker_api.images.create(image: tag)
|
||||||
# TODO: Start a container with the image
|
# TODO: Start a container with the image
|
||||||
|
containers = docker_api.containers.list(all: true)
|
||||||
|
pp! containers
|
||||||
|
# If it's running, do nothing
|
||||||
|
if (containers.any? { |c|
|
||||||
|
c.@image == tag && c.@state == "running"
|
||||||
|
})
|
||||||
|
puts "#{arg} is already running"
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
# If it is exited, start it
|
||||||
|
existing = containers.select { |c|
|
||||||
|
c.@image == tag && c.@state == "exited"
|
||||||
|
}
|
||||||
|
|
||||||
|
puts "Starting function #{arg}"
|
||||||
|
if (existing.size > 0)
|
||||||
|
puts "Restarting existing exited container"
|
||||||
|
docker_api.containers.start(existing[0].@id)
|
||||||
|
else
|
||||||
|
conf = Docr::Types::CreateContainerConfig.new(
|
||||||
|
image: tag,
|
||||||
|
hostname: "foo",
|
||||||
|
host_config: Docr::Types::HostConfig.new
|
||||||
|
)
|
||||||
|
# FIXME: name should be unique
|
||||||
|
response = docker_api.containers.create(name: "fungus", config: conf)
|
||||||
|
docker_api.containers.start(response.@id)
|
||||||
|
end
|
||||||
# TODO: Run test for healthcheck
|
# TODO: Run test for healthcheck
|
||||||
# TODO: Map route in reverse proxy to function
|
# TODO: Map route in reverse proxy to function
|
||||||
# TODO: Return function URL for testing
|
# TODO: Return function URL for testing
|
||||||
|
Loading…
Reference in New Issue
Block a user