Deployment and lifecycle management for Nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

sower/agent: record deployment time

+36 -4
+16
apps/sower/lib/sower/orchestration.ex
··· 343 343 """ 344 344 def get_deployment!(id), do: Repo.get!(Deployment, id) 345 345 346 + def get_deployment_sid(sid) do 347 + Deployment 348 + |> Repo.get_by(sid: sid) 349 + end 350 + 346 351 @doc """ 347 352 Creates a deployment. 348 353 ··· 377 382 """ 378 383 def update_deployment(%Deployment{} = deployment, attrs) do 379 384 deployment 385 + |> Repo.preload([:seeds, :subscriptions]) 380 386 |> Deployment.changeset(attrs) 381 387 |> Repo.update() 382 388 end ··· 436 442 437 443 nil -> 438 444 {:error, :subscription_not_found} 445 + end 446 + end 447 + 448 + def record_deployment(%SowerClient.Schemas.Orchestration.DeploymentResult{} = result) do 449 + case get_deployment_sid(result.deployment_sid) do 450 + nil -> 451 + {:error, :deployment_not_found} 452 + 453 + deploy -> 454 + update_deployment(deploy, %{deployed_at: result.deployed_at}) 439 455 end 440 456 end 441 457 end
+2 -2
apps/sower/lib/sower/orchestration/deployment.ex
··· 25 25 def changeset(deployment, attrs) do 26 26 deployment 27 27 |> cast(attrs, [:deployed_at]) 28 - |> put_assoc(:seeds, attrs.seeds) 29 - |> put_assoc(:subscriptions, attrs.subscriptions) 28 + |> put_assoc(:seeds, Map.get(attrs, :seeds, deployment.seeds)) 29 + |> put_assoc(:subscriptions, Map.get(attrs, :subscriptions, deployment.subscriptions)) 30 30 |> validate_required([]) 31 31 end 32 32 end
+17 -1
apps/sower/lib/sower_web/agent_channel.ex
··· 140 140 end 141 141 end 142 142 143 - def handle_in("subscription:upgrade", payload, socket) do 143 + def handle_in("deployment:request", payload, socket) do 144 144 with {:ok, req_sub} <- SowerClient.Schemas.Orchestration.DeploymentRequest.cast(payload), 145 145 {:ok, deploy} <- Sower.Orchestration.request_deployment(req_sub) do 146 146 {:reply, {:ok, deploy}, socket} 147 + else 148 + {:error, error} -> 149 + Logger.error( 150 + msg: "Failed to request subscription upgrade", 151 + payload: payload, 152 + error: error 153 + ) 154 + 155 + {:reply, :error, socket} 156 + end 157 + end 158 + 159 + def handle_in("deployment:result", payload, socket) do 160 + with {:ok, result} <- SowerClient.Schemas.Orchestration.DeploymentResult.cast(payload), 161 + {:ok, _deploy} <- Sower.Orchestration.record_deployment(result) do 162 + {:reply, :ok, socket} 147 163 else 148 164 {:error, error} -> 149 165 Logger.error(
+1 -1
apps/sower_agent/lib/sower_agent/socket_client.ex
··· 48 48 subscription_sids: [subscription.sid] 49 49 }) 50 50 51 - {:ok, ref} = push(socket, private_channel(), "subscription:upgrade", upgrade_request) 51 + {:ok, ref} = push(socket, private_channel(), "deployment:request", upgrade_request) 52 52 53 53 {:reply, :ok, Map.put(socket, :upgrade_ref, ref)} 54 54 end