anchor.diff:      Nodes = [Node1, Node2],
       [Host1 | _] = Hosts = hosts:from_nodes(Nodes),
   
  -    Ctx = #{cookie => ?COOKIE},
  -    onepanel_test_utils:service_action(Node1,
  -        ?SERVICE_PANEL, deploy, Ctx#{hosts => [Host1]}
  +    onepanel_test_utils:service_action(Node1,
  +        ?SERVICE_PANEL, deploy, #{hosts => [Host1]}
       ),
       {ok, InviteToken} = rpc:call(Node1, invite_tokens, create, []),
       onepanel_test_utils:service_action(Node2,
  -        ?SERVICE_PANEL, join_cluster, Ctx#{
  +        ?SERVICE_PANEL, join_cluster, #{
               invite_token => InviteToken,
               cluster_host => Host1
           }
  
positive.code:     Hosts = [Host2, Host3],
  
      onepanel_test_utils:service_action(Node1,
          ?SERVICE_PANEL, deploy, #{cookie => ?COOKIE, hosts => [Host1 | Hosts]}
      ),
      onepanel_test_utils:service_action(Node1,
          ?SERVICE_PANEL, leave_cluster, #{}
  
negative.code: ->
      NewConfig = init_per_testcase(default, Config),
      [Node1 | _] = Nodes = ?config(onepanel_nodes, NewConfig),
      [Host1 | _] = hosts:from_nodes(Nodes),
  
      [Node1, _Node2 | _] = ?config(onepanel_nodes, NewConfig),
      ?assertEqual(ok, test_utils:mock_new(Nodes,
          [service_op_worker, letsencrypt_api], [passthrough])),
      test_utils:mock_expect(Nodes, service_op_worker, supports_letsencrypt_challenge,
  