Compare commits

..

No commits in common. "3b2297e9542d60cfb69e9a46ddafb288d58f33f0" and "81ec0779287292341d335cfe12e89f962e8f1046" have entirely different histories.

9 changed files with 50 additions and 51 deletions

View File

@ -8,7 +8,6 @@ proxy:
all: build proxy all: build proxy
start-proxy: start-proxy:
docker network create faaso-net || true
docker run --name faaso-proxy-one \ docker run --name faaso-proxy-one \
--rm --network=faaso-net \ --rm --network=faaso-net \
-e FAASO_SECRET_PATH=${PWD}/secrets \ -e FAASO_SECRET_PATH=${PWD}/secrets \

View File

@ -12,7 +12,6 @@
* ✅ Crystal + Kemal * ✅ Crystal + Kemal
* ✅ Python + Flask * ✅ Python + Flask
* ✅ Nodejs + Express * ✅ Nodejs + Express
* Create a site
* Document * Document
* How to create a runtime * How to create a runtime
* How to create a funko * How to create a funko
@ -35,8 +34,7 @@
* ✅ Fix `export examples/hello_crystal` it has a `template/` * ✅ Fix `export examples/hello_crystal` it has a `template/`
* ✅ Implement zero-downtime rollout (`faaso deploy`) * ✅ Implement zero-downtime rollout (`faaso deploy`)
* ✅ Cleanup `tmp/whatever` after use * ✅ Cleanup `tmp/whatever` after use
* ✅ `faaso scale` remote is broken * `faaso scale` remote is broken
* ✅ Setup linters/pre-commit/etc
## Things to do but not before release ## Things to do but not before release

View File

@ -58,7 +58,10 @@ module Faaso
{"funko.tgz" => File.open(tmp), "name" => "funko.tgz"}, {"funko.tgz" => File.open(tmp), "name" => "funko.tgz"},
user: user, password: password user: user, password: password
) do |response| ) do |response|
IO.copy(response.body_io, STDOUT) loop do
Log.info { response.body_io.gets }
break if response.body_io.closed?
end
end end
Log.info { "Build finished successfully." } Log.info { "Build finished successfully." }
rescue ex : Crest::InternalServerError rescue ex : Crest::InternalServerError

View File

@ -41,7 +41,10 @@ module Faaso
Crest.get( Crest.get(
"#{Config.server}funkos/#{funko_name}/deploy/", \ "#{Config.server}funkos/#{funko_name}/deploy/", \
user: user, password: password) do |response| user: user, password: password) do |response|
IO.copy(response.body_io, STDOUT) loop do
Log.info { response.body_io.gets }
break if response.body_io.closed?
end
end end
0 0
end end

View File

@ -10,14 +10,14 @@ module Faaso
# In both cases stopped instances after the required # In both cases stopped instances after the required
# scale is reached are deleted. # scale is reached are deleted.
struct Scale struct Scale
def local(options, name : String, scale : Int | Nil) : Int32 def local(options, name : String, scale : Int) : Int32
funko = Funko::Funko.from_names([name])[0] funko = Funko::Funko.from_names([name])[0]
# Asked about scale # Asked about scale
if funko.image_history.empty? if funko.image_history.empty?
Log.error { "Unknown funko #{funko.name}" } Log.error { "Unknown funko #{funko.name}" }
return 1 return 1
end end
if scale.nil? if !scale
Log.info { "Funko #{name} has a scale of #{funko.scale}" } Log.info { "Funko #{name} has a scale of #{funko.scale}" }
return 0 return 0
end end
@ -26,21 +26,19 @@ module Faaso
0 0
end end
def remote(options, name : String, scale : Int | Nil) : Int32 def remote(options, name : String, scale : Int) : Int32
user, password = Config.auth user, password = Config.auth
Faaso.check_version Faaso.check_version
if scale.nil? if !scale
Crest.get( response = Crest.get(
"#{Config.server}funkos/#{name}/scale/", \ "#{Config.server}funkos/#{name}/scale/", \
user: user, password: password) do |response| user: user, password: password)
IO.copy(response.body_io, STDOUT) Log.info { " => " + response.body }
end else
return 0 response = Crest.post(
end
Crest.post(
"#{Config.server}funkos/#{name}/scale/", "#{Config.server}funkos/#{name}/scale/",
{"scale" => scale}, user: user, password: password) do |response| {"scale" => scale}, user: user, password: password)
IO.copy(response.body_io, STDOUT) Log.info { " => " + response.body }
end end
0 0
rescue ex : Crest::InternalServerError rescue ex : Crest::InternalServerError
@ -48,8 +46,7 @@ module Faaso
1 1
end end
def run(options, name : String, scale) : Int32 def run(options, name : String, scale : Int) : Int32
scale = scale.try &.to_s.to_i
if options["--local"] if options["--local"]
return local(options, name, scale) return local(options, name, scale)
end end

View File

@ -31,7 +31,10 @@ module Faaso
Crest.get( Crest.get(
"#{Config.server}funkos/#{name}/status/", \ "#{Config.server}funkos/#{name}/status/", \
user: user, password: password) do |response| user: user, password: password) do |response|
IO.copy(response.body_io, STDOUT) loop do
Log.info { response.body_io.gets }
break if response.body_io.closed?
end
end end
0 0
rescue ex : Crest::InternalServerError rescue ex : Crest::InternalServerError

View File

@ -133,21 +133,20 @@ module Funko
end end
# Helper to run faaso locally and respond via env # Helper to run faaso locally and respond via env
def run_faaso(args : Array(String), env) def run_faaso(args : Array(String), env) : Bool
args << "-l" # Always local in the server Log.info { "Running faaso [#{args.join(", ")}, -l, 2>&1]" }
Log.info { "Running faaso [#{args}" }
Process.run( Process.run(
command: "faaso", command: "faaso",
args: args, args: args + ["-l", "2>&1"], # Always local in the server
env: {"FAASO_SERVER_SIDE" => "true"}, shell: true,
) do |process| ) do |process|
loop do loop do
data = process.output.gets(chomp: false) env.response.print process.output.gets(chomp: false)
env.response.print data
env.response.flush env.response.flush
Fiber.yield # Without this the process never ends Fiber.yield
break if process.terminated? break if process.terminated?
end end
true
end end
# FIXME: find a way to raise an exception on failure # FIXME: find a way to raise an exception on failure
# of the faaso process # of the faaso process

View File

@ -90,11 +90,7 @@ module Funko
docker_api = Docr::API.new(Docr::Client.new) docker_api = Docr::API.new(Docr::Client.new)
current_scale = self.scale current_scale = self.scale
result = [] of String result = [] of String
return result if current_scale == new_scale
if current_scale == new_scale
Log.info { "Funko #{name} already at scale #{new_scale}" }
return result
end
Log.info { "Scaling #{name} from #{current_scale} to #{new_scale}" } Log.info { "Scaling #{name} from #{current_scale} to #{new_scale}" }
if new_scale > current_scale if new_scale > current_scale

View File

@ -35,28 +35,29 @@ Options:
DOC DOC
ans = Docopt.docopt(doc, ARGV) ans = Docopt.docopt(doc, ARGV)
Oplog.setup(ans["-v"].to_s.to_i) unless ENV.fetch("FAASO_SERVER_SIDE", nil) Oplog.setup(ans["-v"].to_s.to_i)
Log.debug { ans } Log.debug { ans }
status : Int32 = 0
case ans case ans
when .fetch("build", false) when .fetch("build", false)
exit Faaso::Commands::Build.new.run(ans, ans["FOLDER"].as(Array(String))) status = Faaso::Commands::Build.new.run(ans, ans["FOLDER"].as(Array(String)))
when .fetch("deploy", false) when .fetch("deploy", false)
exit Faaso::Commands::Deploy.new.run(ans, ans["FUNKO"].as(String)) status = Faaso::Commands::Deploy.new.run(ans, ans["FUNKO"].as(String))
when .fetch("export", false) when .fetch("export", false)
exit Faaso::Commands::Export.new.run(ans, ans["SOURCE"].as(String), ans["DESTINATION"].as(String)) status = Faaso::Commands::Export.new.run(ans, ans["SOURCE"].as(String), ans["DESTINATION"].as(String))
when .fetch("login", false) when .fetch("login", false)
exit Faaso::Commands::Login.new.run(ans) status = Faaso::Commands::Login.new.run(ans)
when .fetch("new", false) when .fetch("new", false)
exit Faaso::Commands::New.new.run(ans, ans["FOLDER"].as(Array(String))[0]) status = Faaso::Commands::New.new.run(ans, ans["FOLDER"].as(Array(String))[0])
when .fetch("scale", false) when .fetch("scale", false)
exit Faaso::Commands::Scale.new.run(ans, ans["FUNKO"].as(String), ans["SCALE"]) status = Faaso::Commands::Scale.new.run(ans, ans["FUNKO"].as(String), ans["SCALE"].as(String).to_i)
when .fetch("secret", false) when .fetch("secret", false)
exit Faaso::Commands::Secret.new.run(ans, ans["FUNKO"].as(String), ans["SECRET"].as(String)) status = Faaso::Commands::Secret.new.run(ans, ans["FUNKO"].as(String), ans["SECRET"].as(String))
when .fetch("status", false) when .fetch("status", false)
exit Faaso::Commands::Status.new.run(ans, ans["FUNKO"].as(String)) status = Faaso::Commands::Status.new.run(ans, ans["FUNKO"].as(String))
when .fetch("version", false) when .fetch("version", false)
Log.info { "#{version}" } Log.info { "#{version}" }
end end
exit 0 exit(status)