Make sure to serialize env into farmwawre runtime
parent
109498c806
commit
2cbd62b554
|
@ -1,2 +1,2 @@
|
|||
erlang 20.0
|
||||
elixir 1.5.0
|
||||
elixir 1.5.2
|
||||
|
|
|
@ -49,7 +49,7 @@ config :farmbot, Farmbot.System.ConfigStorage,
|
|||
config :farmbot, :behaviour,
|
||||
authorization: Farmbot.Bootstrap.Authorization,
|
||||
system_tasks: Farmbot.Host.SystemTasks,
|
||||
update_handler: Farmbot.Host.UpdateHandler,
|
||||
firmware_handler: Farmbot.Firmware.UartHandler
|
||||
update_handler: Farmbot.Host.UpdateHandler
|
||||
# firmware_handler: Farmbot.Firmware.UartHandler
|
||||
|
||||
config :farmbot, :uart_handler, tty: "/dev/ttyACM0"
|
||||
|
|
|
@ -3,18 +3,24 @@ defmodule Farmbot.CeleryScript.AST.Node.ExecuteScript do
|
|||
use Farmbot.CeleryScript.AST.Node
|
||||
allow_args [:label]
|
||||
|
||||
def execute(%{label: label}, _, env) do
|
||||
def execute(%{label: label}, pairs, env) do
|
||||
env = mutate_env(env)
|
||||
case Farmbot.Farmware.lookup(label) do
|
||||
{:ok, fw} -> do_execute(fw, env)
|
||||
{:ok, fw} -> do_execute(fw, pairs, env)
|
||||
{:error, reason} -> {:error, reason, env}
|
||||
end
|
||||
end
|
||||
|
||||
defp do_execute(%Farmbot.Farmware{} = fw, env) do
|
||||
case Farmbot.Farmware.execute(fw) do
|
||||
defp do_execute(%Farmbot.Farmware{} = fw, pairs, env) do
|
||||
case Farmbot.Farmware.execute(fw, to_fw_env(pairs)) do
|
||||
%Farmbot.Farmware.Runtime{exit_status: 0} -> {:ok, env}
|
||||
%Farmbot.Farmware.Runtime{} -> {:error, "Farmware failed", env}
|
||||
end
|
||||
end
|
||||
|
||||
defp to_fw_env(pairs, acc \\ [])
|
||||
defp to_fw_env([], acc), do: acc
|
||||
defp to_fw_env([%{args: %{label: key, value: value}} | rest], acc) do
|
||||
to_fw_env(rest, [{key, value} | acc])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -124,7 +124,7 @@ defmodule Farmbot.Farmware do
|
|||
:meta,
|
||||
]
|
||||
|
||||
defdelegate execute(fw), to: Farmbot.Farmware.Runtime
|
||||
defdelegate execute(fw, env), to: Farmbot.Farmware.Runtime
|
||||
|
||||
@doc "Lookup a farmware by it's name."
|
||||
def lookup(name) do
|
||||
|
|
|
@ -10,12 +10,12 @@ defmodule Farmbot.Farmware.Runtime do
|
|||
defstruct [:farmware, :env, :port, :exit_status, :working_dir, :return_dir]
|
||||
|
||||
@doc "Execute a Farmware struct."
|
||||
def execute(%Farmware{} = farmware) do
|
||||
def execute(%Farmware{} = farmware, env) when is_list(env) do
|
||||
Logger.busy(2, "Beginning execution of #{inspect(farmware)}")
|
||||
fw_path = Installer.install_path(farmware) |> Path.absname("#{:code.priv_dir(:farmbot)}/..")
|
||||
cwd = File.cwd!()
|
||||
with :ok <- File.cd(fw_path),
|
||||
env <- build_env(farmware) do
|
||||
env <- build_env(farmware, env) do
|
||||
exec = farmware.executable
|
||||
|
||||
opts = [
|
||||
|
@ -75,7 +75,7 @@ defmodule Farmbot.Farmware.Runtime do
|
|||
end
|
||||
end
|
||||
|
||||
defp build_env(%Farmware{config: config, name: fw_name} = _farmware) do
|
||||
def build_env(%Farmware{config: config, name: fw_name} = _farmware, env) do
|
||||
token = Farmbot.System.ConfigStorage.get_config_value(:string, "authorization", "token")
|
||||
images_dir = "/tmp/images"
|
||||
|
||||
|
@ -88,6 +88,7 @@ defmodule Farmbot.Farmware.Runtime do
|
|||
|> Map.put("FARMWARE_URL", "http://localhost:27347/")
|
||||
|> Map.put("FARMBOT_OS_VERSION", @fbos_version)
|
||||
|> Map.merge(Farmbot.BotState.get_user_env())
|
||||
|> Map.merge(Map.new(env))
|
||||
|> Enum.map(fn {key, val} -> {to_erl_safe(key), to_erl_safe(val)} end)
|
||||
end
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ defmodule Farmbot.Firmware.UartHandler do
|
|||
{:noreply, [], state}
|
||||
end
|
||||
|
||||
defp handle_config({:config, "settings", key, val}, state)
|
||||
defp handle_config({:config, "settings", key, _val}, state)
|
||||
when key in ["firmware_input_log", "firmware_output_log"]
|
||||
do
|
||||
# Restart the framing to pick up new changes.
|
||||
|
|
Loading…
Reference in New Issue