@@ -728,6 +728,12 @@ def bootstrap(
728728@server_args
729729@spcs_args
730730@cloud_shinyapps_args
731+ @click .option (
732+ "--set-default" ,
733+ is_flag = True ,
734+ default = False ,
735+ help = "Mark this server as the default (used when -n/--name and -s/--server are not specified)." ,
736+ )
731737@click .pass_context
732738def add (
733739 ctx : click .Context ,
@@ -740,6 +746,7 @@ def add(
740746 account : Optional [str ],
741747 token : Optional [str ],
742748 secret : Optional [str ],
749+ set_default : bool ,
743750 verbose : int ,
744751):
745752 set_verbosity (verbose )
@@ -782,6 +789,7 @@ def add(
782789 account_name = real_server .account_name ,
783790 token = real_server .token ,
784791 secret = real_server .secret ,
792+ set_as_default = set_default ,
785793 )
786794 if old_server :
787795 click .echo ('Updated {} credential "{}".' .format (real_server .remote_name , name ))
@@ -798,7 +806,13 @@ def add(
798806
799807 _test_spcs_creds (real_server_spcs )
800808
801- server_store .set (name , server , api_key = api_key , snowflake_connection_name = snowflake_connection_name )
809+ server_store .set (
810+ name ,
811+ server ,
812+ api_key = api_key ,
813+ snowflake_connection_name = snowflake_connection_name ,
814+ set_as_default = set_default ,
815+ )
802816 if old_server :
803817 click .echo ('Updated {} credential "{}".' .format (real_server_spcs .remote_name , name ))
804818 else :
@@ -818,13 +832,17 @@ def add(
818832 api_key = real_server_rsc .api_key ,
819833 insecure = real_server_rsc .insecure ,
820834 ca_data = real_server_rsc .ca_data ,
835+ set_as_default = set_default ,
821836 )
822837
823838 if old_server :
824839 click .echo ('Updated Connect server "%s" with URL %s' % (name , real_server_rsc .url ))
825840 else :
826841 click .echo ('Added Connect server "%s" with URL %s' % (name , real_server_rsc .url ))
827842
843+ if set_default :
844+ click .echo ('Server "%s" is now the default.' % name )
845+
828846
829847@cli .command (
830848 "list" ,
@@ -844,7 +862,8 @@ def list_servers(verbose: int):
844862 else :
845863 click .echo ()
846864 for server in servers :
847- click .echo ('Nickname: "%s"' % server ["name" ])
865+ default_marker = " [default]" if server .get ("default" ) else ""
866+ click .echo ('Nickname: "%s"%s' % (server ["name" ], default_marker ))
848867 click .echo (" URL: %s" % server ["url" ])
849868 if server .get ("api_key" ):
850869 click .echo (" API key is saved" )
@@ -948,12 +967,19 @@ def remove(
948967 if name and server :
949968 raise RSConnectException ("You must specify only one of -n/--name or -s/--server." )
950969
970+ removed_was_default = False
951971 if name :
972+ entry = server_store .get_by_name (name )
973+ if entry :
974+ removed_was_default = bool (entry .get ("default" ))
952975 if server_store .remove_by_name (name ):
953976 message = 'Removed nickname "%s".' % name
954977 else :
955978 raise RSConnectException ('Nickname "%s" was not found.' % name )
956979 elif server :
980+ entry = server_store .get_by_url (server )
981+ if entry :
982+ removed_was_default = bool (entry .get ("default" ))
957983 if server_store .remove_by_url (server ):
958984 message = 'Removed URL "%s".' % server
959985 else :
@@ -963,6 +989,8 @@ def remove(
963989
964990 if message :
965991 click .echo (message )
992+ if removed_was_default :
993+ click .echo ("Note: the removed server was the default. Use `rsconnect add --set-default` to set a new one." )
966994
967995
968996@cli .command (
@@ -991,6 +1019,12 @@ def remove(
9911019 help = "Use device code flow for headless/non-interactive environments." ,
9921020)
9931021@click .option ("--client-id" , default = None , help = "OAuth client ID (skips Dynamic Client Registration)." )
1022+ @click .option (
1023+ "--no-set-default" ,
1024+ is_flag = True ,
1025+ default = False ,
1026+ help = "Do not mark this server as the default after login." ,
1027+ )
9941028@click .option ("--verbose" , "-v" , count = True , help = "Enable verbose output. Use -vv for very verbose (debug) output." )
9951029@cli_exception_handler
9961030def login (
@@ -1000,6 +1034,7 @@ def login(
10001034 cacert : Optional [str ],
10011035 use_device_code : bool ,
10021036 client_id : Optional [str ],
1037+ no_set_default : bool ,
10031038 verbose : int ,
10041039):
10051040 set_verbosity (verbose )
@@ -1062,8 +1097,17 @@ def _do_login(cid: str) -> dict[str, Any]:
10621097
10631098 ca_data_str = ca_data .decode ("utf-8" ) if isinstance (ca_data , bytes ) else ca_data
10641099
1100+ set_as_default = not no_set_default
1101+
10651102 if stored_in_keyring :
1066- server_store .set (name , server , oauth_client_id = client_id , insecure = insecure , ca_data = ca_data_str )
1103+ server_store .set (
1104+ name ,
1105+ server ,
1106+ oauth_client_id = client_id ,
1107+ insecure = insecure ,
1108+ ca_data = ca_data_str ,
1109+ set_as_default = set_as_default ,
1110+ )
10671111 else :
10681112 server_store .set (
10691113 name ,
@@ -1074,9 +1118,12 @@ def _do_login(cid: str) -> dict[str, Any]:
10741118 oauth_access_token = access_token ,
10751119 oauth_refresh_token = refresh_token ,
10761120 oauth_token_expiry = expiry ,
1121+ set_as_default = set_as_default ,
10771122 )
10781123
10791124 click .echo ('Logged in to "%s" (%s)' % (name , server ))
1125+ if set_as_default :
1126+ click .echo ('Server "%s" is now the default.' % name )
10801127 if not stored_in_keyring :
10811128 click .secho (
10821129 "Note: keyring not available; credentials stored in local file (chmod 600)." ,
0 commit comments