Deployment and lifecycle management for Nix
0
fork

Configure Feed

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

agent: handle not found subscription profile

+61 -30
+35 -21
apps/sower_agent/lib/sower_agent/deployer.ex
··· 156 156 find_sub \\ &find_subscription/1, 157 157 find_profile \\ &find_deployment_profile/1 158 158 ) do 159 - sub = find_sub.(subscription_sid) 159 + case find_sub.(subscription_sid) do 160 + nil -> 161 + Logger.info( 162 + msg: "Subscription not found, using defaults", 163 + deploy_subscription_sid: subscription_sid 164 + ) 160 165 161 - subscription_overrides = 162 - case get_in(sub.deployment_profile) do 163 - nil -> 164 - Logger.info( 165 - msg: "Subscription deployment profile not found, using default", 166 - default_deployment_profile: default_deployment_profile(), 167 - deploy_subscription_sid: subscription_sid, 168 - subscription_seed_name: sub.seed_name, 169 - subscription_seed_type: sub.seed_type 170 - ) 166 + %DeploymentProfile{} 171 167 172 - default_deployment_profile() 168 + sub -> 169 + profile_name = 170 + case get_in(sub.deployment_profile) do 171 + nil -> 172 + default_profile_name = default_deployment_profile() 173 173 174 - profile_name -> 175 - profile_name 176 - end 177 - |> find_profile.() 174 + Logger.info( 175 + msg: "Subscription deployment profile not found, using default", 176 + default_deployment_profile: default_profile_name, 177 + deploy_subscription_sid: subscription_sid, 178 + subscription_seed_name: get_in(sub.seed_name), 179 + subscription_seed_type: get_in(sub.seed_type) 180 + ) 178 181 179 - %DeploymentProfile{} 180 - |> Map.merge(subscription_overrides) 182 + default_profile_name 183 + 184 + configured_profile_name -> 185 + configured_profile_name 186 + end 187 + 188 + subscription_overrides = find_profile.(profile_name) || %DeploymentProfile{} 189 + 190 + %DeploymentProfile{} 191 + |> Map.merge(subscription_overrides) 192 + end 181 193 end 182 194 183 195 defp default_deployment_profile() do 184 - Map.get(Config.get(), :default_deployment_profile, "default") 196 + Config.get() 197 + |> Kernel.||(%{}) 198 + |> Map.get(:default_deployment_profile, "default") 185 199 end 186 200 187 - defp find_deployment_profile(name) do 201 + def find_deployment_profile(name) do 188 202 config = Config.get() 189 - get_in(config.deployment_profiles[name]) 203 + get_in(config.deployment_profiles[name]) || %DeploymentProfile{} 190 204 end 191 205 192 206 defp find_subscription(sid) do
+26 -9
apps/sower_agent/test/sower_agent/deployer_test.exs
··· 14 14 assert Deployer.get_deployment_profile(nil) == nil 15 15 end 16 16 17 - test "returns defaults and logs warning when subscription is missing" do 18 - logs = 19 - capture_log(fn -> 20 - assert Deployer.get_deployment_profile("sub_missing", fn _sid -> nil end, fn _name -> 21 - %{} 22 - end) == 23 - %DeploymentProfile{} 24 - end) 17 + test "returns defaults and logs when subscription is missing" do 18 + assert Deployer.get_deployment_profile("sub_missing", fn _sid -> nil end, fn _name -> 19 + %{} 20 + end) == 21 + %DeploymentProfile{} 22 + end 23 + 24 + test "uses the default profile name when subscription deployment profile is not set" do 25 + sid = "sub_default" 26 + 27 + sub = %Subscription{ 28 + sid: sid, 29 + seed_name: "kale", 30 + seed_type: "nixos" 31 + } 25 32 26 - assert logs =~ "Subscription not found, using defaults" 33 + assert Deployer.get_deployment_profile( 34 + sid, 35 + fn _ -> sub end, 36 + fn 37 + "default" -> %{activation_args: ["boot"], reboot_policy: "always"} 38 + other -> flunk("expected \"default\" profile lookup, got: #{inspect(other)}") 39 + end 40 + ) == %DeploymentProfile{ 41 + activation_args: ["boot"], 42 + reboot_policy: "always" 43 + } 27 44 end 28 45 29 46 test "uses subscription deployment_profile string to resolve named profile overrides" do