def app_PATTOKEN(token, appName, resource_group): try: command = ( 'az functionapp config appsettings set --name {appName} --resource-group {resource_group} --settings "PATTOKEN={PATTOKEN}"' ).format(PATTOKEN=token, appName=appName, resource_group=resource_group) fapp_tokenadd = subprocess.check_output(command, shell=True) fapp_tokenadd_json = json.loads(fapp_tokenadd) return fapp_tokenadd_json # may here return just the values required to be returned except Exception as ex: raise ActionDeploymentError(ex)
def deploy_functionApp(template_path, parameters_file_path, resource_group): try: command = ( 'az group deployment create -g {resource_group} --template-file "{template_path}" --parameters "{parameters_file_path}" -o json' ).format(template_path=template_path, parameters_file_path=parameters_file_path, resource_group=resource_group) print(command) app_create = subprocess.check_output(command, shell=True) app_create_json = json.loads(app_create) return app_create_json # may here return just the values required to be returned except Exception as ex: raise ActionDeploymentError(ex)
def main(): # # Loading input values # print("::debug::Loading input values") template_file = os.environ.get("INPUT_ARMTEMPLATE_FILE", default="arm_deploy.json") template_params_file = os.environ.get("INPUT_ARMTEMPLATEPARAMS_FILE", default="") azure_credentials = os.environ.get("INPUT_AZURE_CREDENTIALS", default="{}") resource_group = os.environ.get("INPUT_RESOURCE_GROUP", default=None) mapped_params = os.environ.get("INPUT_MAPPED_PARAMS", default="{}") deployment_mode = os.environ.get("INPUT_DEPLOYMENT_MODE", default="Incremental") deploy_enum = get_deploy_mode_obj(deployment_mode) try: azure_credentials = json.loads(azure_credentials) except JSONDecodeError: print( "::error::Please paste output of `az ad sp create-for-rbac --name <your-sp-name> --role contributor --scopes /subscriptions/<your-subscriptionId>/resourceGroups/<your-rg> --sdk-auth` as value of secret variable: AZURE_CREDENTIALS" ) raise AMLConfigurationException( f"Incorrect or poorly formed output from azure credentials saved in AZURE_CREDENTIALS secret. See setup in https://github.com/Azure/aml-workspace/blob/master/README.md" ) try: mapped_params = json.loads(mapped_params) except JSONDecodeError: print( "::error::Incorrect mapped parameters Format , please put mapped parameters strings like this {\"patToken\":\"${{secrets.PAT_TOKEN}}\", .... }" ) raise AMLConfigurationException( f"Incorrect or poorly formed mapped params. See setup in https://github.com/Azure/aml_configure/blob/master/README.md" ) if not resource_group: raise AMLConfigurationException(f"A resource group must be provided") # Checking provided parameters print("::debug::Checking provided parameters") required_parameters_provided( parameters=azure_credentials, keys=["tenantId", "clientId", "clientSecret"], message= "Required parameter(s) not found in your azure credentials saved in AZURE_CREDENTIALS secret for logging in to the workspace. Please provide a value for the following key(s): " ) # # Loading parameters file # print("::debug::Loading parameters file") template_file_file_path = os.path.join(".cloud", ".azure", template_file) # Mask values print("::debug::Masking parameters") mask_parameter(parameter=azure_credentials.get("tenantId", "")) mask_parameter(parameter=azure_credentials.get("clientId", "")) mask_parameter(parameter=azure_credentials.get("clientSecret", "")) #mask_parameter(parameter=azure_credentials.get("subscriptionId", "")) # Login User on CLI tenant_id = azure_credentials.get("tenantId", "") service_principal_id = azure_credentials.get("clientId", "") service_principal_password = azure_credentials.get("clientSecret", "") subscriptionId = azure_credentials.get("subscriptionId", "") parameters = get_template_parameters(template_params_file, mapped_params) credentials = None try: credentials = ServicePrincipalCredentials( client_id=service_principal_id, secret=service_principal_password, tenant=tenant_id) except Exception as ex: raise CredentialsVerificationError(ex) client = None try: client = ResourceManagementClient(credentials, subscriptionId) except Exception as ex: raise ResourceManagementError(ex) template = None with open(template_file_file_path, 'r') as template_file_fd: template = json.load(template_file_fd) deployment_properties = { 'properties': { 'mode': deploy_enum, 'template': template, 'parameters': parameters } } deployment_async_operation = None try: validate = client.deployments.validate(resource_group, "azure-sample", deployment_properties) validate.wait() except Exception as ex: raise ActionDeploymentError(ex) try: deployment_async_operation = client.deployments.create_or_update( resource_group, 'azure-sample', deployment_properties) deployment_async_operation.wait() except Exception as ex: raise ActionDeploymentError(ex) print("Deployment done") print(deployment_async_operation) print("next----------") print(deployment_async_operation.result()) print("next----------") print(deployment_async_operation.result().properties)
def main(): # # Loading input values # print("::debug::Loading input values") azure_credentials = os.environ.get("INPUT_AZURE_CREDENTIALS", default='{}') resource_group = os.environ.get("INPUT_RESOURCE_GROUP", default="") pattoken = os.environ.get("INPUT_PATTOKEN", default="") provider_type = os.environ.get("INPUT_PROVIDER_TYPE", default="") events_to_subscribe = os.environ.get("INPUT_EVENTS_TO_SUBSCRIBE", default="") try: azure_credentials = json.loads(azure_credentials) except JSONDecodeError: print( "::error::Please paste output of `az ad sp create-for-rbac --name <your-sp-name> --role contributor --scopes /subscriptions/<your-subscriptionId>/resourceGroups/<your-rg> --sdk-auth` as value of secret variable: AZURE_CREDENTIALS" ) raise AMLConfigurationException( f"Incorrect or poorly formed output from azure credentials saved in AZURE_CREDENTIALS secret. See setup in https://github.com/Azure/aml-workspace/blob/master/README.md" ) if not resource_group: raise AMLConfigurationException(f"A resource group must be provided") # Checking provided parameters print("::debug::Checking provided parameters") required_parameters_provided( parameters=azure_credentials, keys=["tenantId", "clientId", "clientSecret"], message= "Required parameter(s) not found in your azure credentials saved in AZURE_CREDENTIALS secret for logging in to the workspace. Please provide a value for the following key(s): " ) # # Loading parameters file # print("::debug::Loading parameters file") template_file_file_path = os.path.join("/code", "func_deploy.json") # Mask values print("::debug::Masking parameters") mask_parameter(parameter=azure_credentials.get("tenantId", "")) mask_parameter(parameter=azure_credentials.get("clientId", "")) mask_parameter(parameter=azure_credentials.get("clientSecret", "")) mask_parameter(parameter=azure_credentials.get("subscriptionId", "")) # Login User on CLI tenant_id = azure_credentials.get("tenantId", "") service_principal_id = azure_credentials.get("clientId", "") service_principal_password = azure_credentials.get("clientSecret", "") subscriptionId = azure_credentials.get("subscriptionId", "") credentials = None try: credentials = ServicePrincipalCredentials( client_id=service_principal_id, secret=service_principal_password, tenant=tenant_id) except Exception as ex: raise CredentialsVerificationError(ex) ####################### Authentication Done ################################### # repository name repository_name = os.environ.get("GITHUB_REPOSITORY", "azureeventgridsample") functionAppName = repository_name.replace( "/", "") # create a unique function-AppName functionAppName = functionAppName.replace("_", "").replace("-", "")[:32] functionFolder = 'fappdeploy' functionGitHubURL = "https://github.com/Ayaz43/function_app.git" functionGitHubBranch = "master" functionName = "generic_triggers" patToken = pattoken parameters = { 'functionAppName': functionAppName, 'functionFolder': functionFolder, 'functionGitHubURL': functionGitHubURL, 'functionGitHubBranch': functionGitHubBranch, 'patToken': patToken, 'ownerName': functionAppName } parameters = {k: {'value': v} for k, v in parameters.items()} client = None try: client = ResourceManagementClient(credentials, subscriptionId) except Exception as ex: raise ResourceManagementError(ex) template = None with open(template_file_file_path, 'r') as template_file_fd: template = json.load(template_file_fd) deployment_properties = { 'properties': { 'mode': DeploymentMode.incremental, 'template': template, 'parameters': parameters } } try: validate = client.deployments.validate(resource_group, "azure-sample", deployment_properties) validate.wait() except Exception as ex: raise ActionDeploymentError(ex) try: deployment_async_operation = client.deployments.create_or_update( resource_group, 'azure-sample', deployment_properties) deployment_async_operation.wait() except Exception as ex: raise ActionDeploymentError(ex) deploymemnt_result = deployment_async_operation.result() # parameters code = deploymemnt_result.properties.outputs['hostKey']['value'] functionAppName = deploymemnt_result.properties.outputs['functionAppName'][ 'value'] function_url = "https://{}.azurewebsites.net/api/{}?code={}&repoName={}".format( functionAppName, functionName, code, repository_name) resource_id = "/subscriptions/{}/resourceGroups/{}/providers/{}".format( subscriptionId, resource_group, provider_type) event_grid_client = EventGridManagementClient(credentials, subscriptionId) event_subscription_name = 'EventSubscription1' destination = WebHookEventSubscriptionDestination( endpoint_url=function_url) included_events = get_events_list(events_to_subscribe) filter = EventSubscriptionFilter( # By default, "All" event types are included included_event_types=included_events, is_subject_case_sensitive=False, subject_begins_with='', subject_ends_with='') event_subscription_info = EventSubscription(destination=destination, filter=filter) event_subscription_async_poller = event_grid_client.event_subscriptions.create_or_update( resource_id, event_subscription_name, event_subscription_info, ) event_subscription = event_subscription_async_poller.result( ) # type: EventSubscription print( f"::set-output name=destination_url::{event_subscription.destination.endpoint_base_url}" )