def test_setup_cluster_config(mock_get): with env(), util.tempdir() as tempdir: os.environ[constants.DCOS_DIR_ENV] = tempdir with cluster.setup_directory() as setup_temp: cluster.set_attached(setup_temp) cluster_id = "fake" mock_resp = mock.Mock() mock_resp.json.return_value = { "CLUSTER_ID": cluster_id, "cluster": cluster_id } mock_get.return_value = mock_resp path = cluster.setup_cluster_config("fake_url", setup_temp, False) expected_path = os.path.join( tempdir, constants.DCOS_CLUSTERS_SUBDIR + "/" + cluster_id) assert path == expected_path assert os.path.exists(path) assert os.path.exists(os.path.join(path, "dcos.toml")) assert not os.path.exists(setup_temp)
def setup(dcos_url, insecure=False, no_check=False, ca_certs=None, password_str=None, password_env=None, password_file=None, provider=None, username=None, key_path=None): """ Setup the CLI to talk to your DC/OS cluster. :param dcos_url: master ip of cluster :type dcos_url: str :param insecure: whether or not to verify ssl certs :type insecure: bool :param no_check: whether or not to verify downloaded ca cert :type no_check: bool :param ca_certs: path to root CA to verify requests :type ca_certs: str :param password_str: password :type password_str: str :param password_env: name of environment variable with password :type password_env: str :param password_file: path to file with password :type password_file: bool :param provider: name of provider to authentication with :type provider: str :param username: username :type username: str :param key_path: path to file with private key :type param: str :returns: process status :rtype: int """ with cluster.setup_directory() as temp_path: # set cluster as attached cluster.set_attached(temp_path) # authenticate config.set_val("core.dcos_url", dcos_url) # get validated dcos_url dcos_url = config.get_config_val("core.dcos_url") # configure ssl settings stored_cert = False if insecure: config.set_val("core.ssl_verify", "false") elif ca_certs: config.set_val("core.ssl_verify", ca_certs) else: cert = cluster.get_cluster_cert(dcos_url) # if we don't have a cert don't try to verify one if cert is False: config.set_val("core.ssl_verify", "false") else: stored_cert = _store_cluster_cert(cert, no_check) try: login(dcos_url, password_str, password_env, password_file, provider, username, key_path) except DCOSAuthenticationException: msg = ("Authentication failed. " "Please run `dcos cluster setup <dcos_url>`") raise DCOSException(msg) # configure cluster directory cluster.setup_cluster_config(dcos_url, temp_path, stored_cert) return 0
def setup(dcos_url, insecure=False, no_check=False, ca_certs=None, password_str=None, password_env=None, password_file=None, provider=None, username=None, key_path=None): """ Setup the CLI to talk to your DC/OS cluster. :param dcos_url: master ip of cluster :type dcos_url: str :param insecure: whether or not to verify ssl certs :type insecure: bool :param no_check: whether or not to verify downloaded ca cert :type no_check: bool :param ca_certs: path to root CA to verify requests :type ca_certs: str :param password_str: password :type password_str: str :param password_env: name of environment variable with password :type password_env: str :param password_file: path to file with password :type password_file: bool :param provider: name of provider to authentication with :type provider: str :param username: username :type username: str :param key_path: path to file with private key :type param: str :returns: process status :rtype: int """ with cluster.setup_directory() as temp_path: # set cluster as attached cluster.set_attached(temp_path) # Make sure to ignore any environment variable for the DCOS URL. # There is already a mandatory command argument for this. env_warning = ("Ignoring '{}' environment variable.\n") if "DCOS_URL" in os.environ: emitter.publish(DefaultError(env_warning.format('DCOS_URL'))) del os.environ["DCOS_URL"] if "DCOS_DCOS_URL" in os.environ: emitter.publish(DefaultError(env_warning.format('DCOS_DCOS_URL'))) del os.environ["DCOS_DCOS_URL"] # authenticate config.set_val("core.dcos_url", dcos_url) # get validated dcos_url dcos_url = config.get_config_val("core.dcos_url") # configure ssl settings stored_cert = False if insecure: config.set_val("core.ssl_verify", "false") elif ca_certs: config.set_val("core.ssl_verify", ca_certs) elif _needs_cluster_cert(dcos_url): cert = cluster.get_cluster_cert(dcos_url) if cert: stored_cert = _store_cluster_cert(cert, no_check) else: config.set_val("core.ssl_verify", "false") else: config.set_val("core.ssl_verify", "false") try: login(dcos_url, password_str, password_env, password_file, provider, username, key_path) except DCOSAuthenticationException: msg = ("Authentication failed. " "Please run `dcos cluster setup <dcos_url>`") raise DCOSException(msg) # configure cluster directory cluster.setup_cluster_config(dcos_url, temp_path, stored_cert) return 0