anchor.diff:          #steps{action = status, ctx = #{hosts => AllHosts}}
       ];
   
  -get_steps(resume, #{name := Name}) ->
  +get_steps(resume, #{name := ServiceName}) ->
       [
           #step{function = migrate_generated_config,
  -            condition = fun(_) -> onepanel_env:legacy_config_exists(Name) end},
  +            condition = fun(_) -> onepanel_env:legacy_config_exists(ServiceName) end},
           #steps{action = start},
           #step{function = wait_for_init, selection = first},
           % refresh status cache
  
positive.code:         onepanel_utils:convert(string:join([DbHost, DbPort], ":"), atom)
      end, DbHosts),
  
      onepanel_env:write([Name, cm_nodes], CmNodes, Name),
      onepanel_env:write([Name, db_nodes], DbNodes, Name),
  
      maps:fold(fun(Key, Value, _) ->
          onepanel_env:write([Name, Key], Value, Name)
      end, #{}, AppConfig),
  
      case InitIp of
          true ->
              IP = case kv_utils:get([cluster_ips, Host], Ctx, undefined) of
                  undefined -> get_initial_ip(Name);
                  Found ->
                      onepanel_deployment:set_marker(?PROGRESS_CLUSTER_IPS),
                      {ok, IPTuple} = ip_utils:to_ip4_address(Found),
                      IPTuple
              end,
              onepanel_env:write([name(), external_ip], IP, Name);
          false -> ok
      end,
  
  
negative.code:     Hosts = hosts:all(ServiceName),
      get_steps(set_cluster_ips, Ctx#{hosts => Hosts});
  
  get_steps(get_nagios_response, #{name := ServiceName}) ->
      [#step{
          function = get_nagios_response,
          hosts = hosts:all(ServiceName),
          selection = any
      }];
  
  