示例#1
0
 def delete_event_subscription(self):
     print("deleting event subscription")
     event_client = EventGridManagementClient(self.credentials,
                                              self.subscription_id)
     scope = '/subscriptions/' + self.subscription_id + '/resourceGroups/' + self.test_storage_res_group + '/providers/microsoft.storage/storageaccounts/%s' % self.test_storageaccount_name
     event_client.event_subscriptions.delete(
         scope, self.event_subscription_name + self.res_suffix)
示例#2
0
async def run_example():

    start = time.time()

    credentials, subscription_id = get_credentials()
    resource_client = ResourceManagementClient(credentials, subscription_id)
    compute_client = ComputeManagementClient(credentials, subscription_id)
    network_client = NetworkManagementClient(credentials, subscription_id)
    event_client = EventGridManagementClient(credentials, subscription_id)

    resource_client.resource_groups.create_or_update(GROUP_NAME,
                                                     {'location': LOCATION})

    event_client.topics.create_or_update(GROUP_NAME, TOPIC_NAME, LOCATION)

    scope = '/subscriptions/' + subscription_id + '/resourceGroups/' + GROUP_NAME  #+'/providers/Microsoft.EventGrid/topics/'+TOPIC_NAME

    event_client.event_subscriptions.create_or_update(
        scope, SUBSCRIPTION_NAME, {
            'destination': {
                'endpoint_type':
                "EventHub",
                'resource_id':
                "/subscriptions/e243327e-b18c-4766-8f44-d9a945082e57/resourceGroups/scorianihub/providers/Microsoft.EventHub/namespaces/scorianitestgrid/eventhubs/scorianigridhub"
            }
        })

    # subnet = create_vnet(network_client)

    # with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:

    #     loop = asyncio.get_event_loop()
    #     futures = [
    #         loop.run_in_executor(
    #             executor,
    #             create_vm,
    #             network_client,
    #             compute_client,
    #             subnet
    #         )
    #         for i in range(vmnumber)
    #     ]

    # for vm in await asyncio.gather(*futures):
    #     pass

    # sbs = ServiceBusService("scorianitestgrid", shared_access_key_name="RootManageSharedAccessKey", shared_access_key_value="tNkx0EMU4YuB5MAaMlP0PQ1pzO4CTkF8+uzLY2O+96Y=")

    # while True:
    #     print("This prints once a minute.")
    #     time.sleep(1)   # Delay for 1 minute (60 seconds).

    end = time.time()

    print('\n ' + str(vmnumber) + ' VMs created in ' + stopWatch(end - start))
示例#3
0
def main():

    SUBSCRIPTION_ID = os.environ.get("SUBSCRIPTION_ID", None)
    TIME = str(time.time()).replace('.', '')
    GROUP_NAME = "testeventgrid" + TIME
    EVENTGRID = "eventgrid" + TIME
    LOCATION = 'eastus'

    # Create client
    # # For other authentication approaches, please see: https://pypi.org/project/azure-identity/
    resource_client = ResourceManagementClient(
        credential=DefaultAzureCredential(), subscription_id=SUBSCRIPTION_ID)
    eventgrid_client = EventGridManagementClient(
        credential=DefaultAzureCredential(), subscription_id=SUBSCRIPTION_ID)
    # - init depended client -
    # - end -

    # Create resource group
    resource_client.resource_groups.create_or_update(GROUP_NAME,
                                                     {"location": LOCATION})

    # - init depended resources -
    # - end -

    # Create eventgrid
    eventgrid = eventgrid_client.domains.begin_create_or_update(
        GROUP_NAME, EVENTGRID, {
            "location": LOCATION
        }).result()
    print("Create eventgrid:\n{}".format(eventgrid))

    # Get eventgrid
    eventgrid = eventgrid_client.domains.get(GROUP_NAME, EVENTGRID)
    print("Get eventgrid:\n{}".format(eventgrid))

    # Update eventgrid
    eventgrid = eventgrid_client.domains.begin_update(GROUP_NAME, EVENTGRID, {
        "tags": {
            "tag1": "value1",
            "tag2": "value2"
        }
    }).result()
    print("Update eventgrid:\n{}".format(eventgrid))

    # Delete eventgrid
    eventgrid_client.domains.begin_delete(GROUP_NAME, EVENTGRID).result()
    print("Delete eventgrid.\n")

    # Delete Group
    resource_client.resource_groups.begin_delete(GROUP_NAME).result()
    def GetEventGridTopics(tenantId, subscriptionId, resourceGroup,
                           gridLocation, clientId, cientSecret, topicNames):

        credentials = ServicePrincipalCredentials(client_id=clientId,
                                                  secret=cientSecret,
                                                  tenant=tenantId)

        event_grid_client = EventGridManagementClient(credentials,
                                                      subscriptionId)

        # list of current topics for this RG
        pagedTopics = event_grid_client.topics.list_by_resource_group(
            resourceGroup)

        returnDict = {}
        for topic in topicNames:
            print(f"Checking for existence of topic {topic}")
            p_topic = None
            for paged_topic in pagedTopics:
                if topic == paged_topic.name:
                    p_topic = paged_topic
                    break

            if p_topic == None:
                print(f"Topic {topic} does not exist. Creating now...")
                topic_result_poller = event_grid_client.topics.create_or_update(
                    resourceGroup, topic,
                    Topic(location=gridLocation, tags={'createdBy': 'MCCC'}))
                # Blocking call
                topic_result = topic_result_poller.result()  # type: Topic
                print(topic_result)
                print(f"Topic {topic} Created ")
            else:
                print(f"Topic {topic} already exists.")

            key = event_grid_client.topics.list_shared_access_keys(
                resourceGroup, topic).key1
            endpoint = f"{topic}.{gridLocation}-1.eventgrid.azure.net"
            key = event_grid_client.topics.list_shared_access_keys(
                resourceGroup, topic).key1
            rTopic = EventGrid.MCCCTopic(topic, key, endpoint)
            returnDict[topic] = rTopic

        return returnDict
示例#5
0
def add_event_grid(src_account_id: str, resource_group: str, location: str) -> None:
    credential = AzureCliCredential()
    client = EventGridManagementClient(credential)
    base = get_base_event(client, resource_group, location)

    event_subscription_info = EventSubscription(
        destination=base.destination,
        filter=base.filter,
        retry_policy=base.retry_policy,
    )

    topic_id = uuid.uuid5(STORAGE_GUID_NAMESPACE, src_account_id).hex

    result = client.event_subscriptions.begin_create_or_update(
        src_account_id, "corpus" + topic_id, event_subscription_info
    ).result()
    if result.provisioning_state != "Succeeded":
        raise Exception(
            "eventgrid subscription failed: %s"
            % json.dumps(result.as_dict(), indent=4, sort_keys=True),
        )
示例#6
0
    def remove_eventgrid(self) -> None:
        credential = AzureCliCredential()
        storage_account_client = StorageManagementClient(
            credential, subscription_id=self.get_subscription_id())

        src_resource_id = Client.get_storage_account_id(
            storage_account_client, self.resource_group, "fuzz")
        if not src_resource_id:
            return

        event_grid_client = EventGridManagementClient(
            credential, subscription_id=self.get_subscription_id())

        # Event subscription for version up to 5.1.0
        old_subscription_name = "onefuzz1"
        old_subscription_exists = Client.event_subscription_exists(
            event_grid_client, src_resource_id, old_subscription_name)

        if old_subscription_exists:
            logger.info("removing deprecated event subscription")
            event_grid_client.event_subscriptions.begin_delete(
                src_resource_id, old_subscription_name).wait()
示例#7
0
    def create_event_subscription(self):
        print("creating event subscription")
        event_client = EventGridManagementClient(self.credentials,
                                                 self.subscription_id)

        scope = '/subscriptions/' + self.subscription_id + '/resourceGroups/' + self.test_storage_res_group + '/providers/microsoft.storage/storageaccounts/%s' % self.test_storageaccount_name
        destination = EventHubEventSubscriptionDestination(
            resource_id=self.get_event_hub_resource_id())
        esfilter = EventSubscriptionFilter(
            **{
                "subject_begins_with":
                "/blobServices/default/containers/%s/" %
                self.test_container_name,
                "subject_ends_with":
                "",
                "is_subject_case_sensitive":
                False,
                "included_event_types": ["Microsoft.Storage.BlobCreated"]
            })
        event_subscription_info = EventSubscription(destination=destination,
                                                    filter=esfilter)
        create_resp = event_client.event_subscriptions.create_or_update(
            scope, self.event_subscription_name, event_subscription_info)
        create_resp.wait()
def run_example():
    """Resource Group management example."""
    #
    # Create the Resource Manager Client with an Application (service principal) token provider
    #
    subscription_id = os.environ.get(
        'AZURE_SUBSCRIPTION_ID',
        '11111111-1111-1111-1111-111111111111')  # your Azure Subscription Id
    credentials = ServicePrincipalCredentials(
        client_id=os.environ['AZURE_CLIENT_ID'],
        secret=os.environ['AZURE_CLIENT_SECRET'],
        tenant=os.environ['AZURE_TENANT_ID'])
    resource_client = ResourceManagementClient(credentials, subscription_id)
    event_grid_client = EventGridManagementClient(credentials, subscription_id)

    # Create Resource group
    print('\nCreating a Resource Group...')
    resource_group = resource_client.resource_groups.create_or_update(
        GROUP_NAME, {'location': LOCATION})
    print_item(resource_group)

    # Create EventGrid topic
    print('\nCreating an EventGrid topic...')
    topic_result_async_poller = event_grid_client.topics.create_or_update(
        resource_group.name, TOPIC_NAME,
        Topic(location=resource_group.location,
              tags={
                  'key1': 'value1',
                  'key2': 'value2'
              }))
    # Blocking call for the Topic to be created
    topic = topic_result_async_poller.result()  # type: Topic
    print_item(topic)

    # Get the keys for the topic
    print('\nGetting the topic keys...')
    keys = event_grid_client.topics.list_shared_access_keys(
        resource_group.name, topic.name)  # type: TopicSharedAccessKeys
    print('The key1 value of topic {} is: {}'.format(topic.name, keys.key1))

    # Create an event subscription
    print('\nCreating an event subscription')
    event_subscription_name = 'EventSubscription1'
    destination = WebHookEventSubscriptionDestination(
        endpoint_url=ENDPOINT_URL)
    filter = EventSubscriptionFilter(
        # By default, "All" event types are included
        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(
        topic.id,
        event_subscription_name,
        event_subscription_info,
    )
    # Blocking call for the EventSubscription to be created
    event_subscription = event_subscription_async_poller.result(
    )  # type: EventSubscription
    print_item(event_subscription)

    input("Press enter to delete all created resources.")

    # Delete the EventSubscription
    print('\nDeleting the event subscription')
    delete_async_operation = event_grid_client.event_subscriptions.delete(
        topic.id, event_subscription_name)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(event_subscription_name))

    # Delete the topic
    print('\nDeleting the topic')
    delete_async_operation = event_grid_client.topics.delete(
        resource_group.name, topic.name)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(topic.name))

    # Delete Resource group and everything in it
    print('\nDelete Resource Group')
    delete_async_operation = resource_client.resource_groups.delete(GROUP_NAME)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(GROUP_NAME))
def run_example():
    """Resource Group management example."""
    #
    # Create the Resource Manager Client with an Application (service principal) token provider
    #
    subscription_id = os.environ.get(
        'AZURE_SUBSCRIPTION_ID',
        '11111111-1111-1111-1111-111111111111')  # your Azure Subscription Id
    credentials = ServicePrincipalCredentials(
        client_id=os.environ['AZURE_CLIENT_ID'],
        secret=os.environ['AZURE_CLIENT_SECRET'],
        tenant=os.environ['AZURE_TENANT_ID'])
    resource_client = ResourceManagementClient(credentials, subscription_id)
    event_grid_client = EventGridManagementClient(credentials, subscription_id)

    # Create Resource group
    print('\nCreating a Resource Group...')
    resource_group = resource_client.resource_groups.create_or_update(
        GROUP_NAME, {'location': LOCATION})
    print_item(resource_group)

    # Creating an event subscription to storage account {StorageAccountResourceId} with destination as {HybridConnectionResourceId}
    print(
        '\nCreating an event subscription to storage account {} with destination as {}'
        .format(STORAGE_ACOUNT_RESOURCE_ID, QUEUE_NAME))

    # Scope could be any ARM resource ID that supports EventGrid
    # https://docs.microsoft.com/azure/event-grid/event-sources
    scope = "/subscriptions/{}".format(subscription_id)
    event_subscription_name = 'EventSubscription1'
    destination = StorageQueueEventSubscriptionDestination(
        resource_id=STORAGE_ACOUNT_RESOURCE_ID, queue_name=QUEUE_NAME)
    filter = EventSubscriptionFilter(
        # By default, "All" event types are included
        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(
        scope,
        event_subscription_name,
        event_subscription_info,
    )
    # Blocking call for the EventSubscription to be created
    event_subscription = event_subscription_async_poller.result(
    )  # type: EventSubscription
    print_item(event_subscription)

    input("Press enter to delete all created resources.")

    # Delete the EventSubscription
    print('\nDeleting the event subscription')
    delete_async_operation = event_grid_client.event_subscriptions.delete(
        scope, event_subscription_name)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(event_subscription_name))

    # Delete Resource group and everything in it
    print('\nDelete Resource Group')
    delete_async_operation = resource_client.resource_groups.delete(GROUP_NAME)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(GROUP_NAME))
示例#10
0
#!/usr/bin/env python
from tdr.azure import credentials, subscription_id
from azure.mgmt.eventgrid import EventGridManagementClient

eventgrid_mgmt_client = EventGridManagementClient(credentials, subscription_id)

from .eventgrid_mgmt import (
    create_eventgrid_topic,
    subscribe_http_eventgrid_topic,
    send_eventgrid_event,
)
示例#11
0
def run_example():
    """Resource Group management example."""
    #
    # Create the Resource Manager Client with an Application (service principal) token provider
    #
    subscription_id = os.environ.get(
        'AZURE_SUBSCRIPTION_ID',
        '11111111-1111-1111-1111-111111111111')  # your Azure Subscription Id
    credentials = ServicePrincipalCredentials(
        client_id=os.environ['AZURE_CLIENT_ID'],
        secret=os.environ['AZURE_CLIENT_SECRET'],
        tenant=os.environ['AZURE_TENANT_ID'])
    resource_client = ResourceManagementClient(credentials, subscription_id)
    event_grid_client = EventGridManagementClient(credentials, subscription_id)

    # Create Resource group
    print('\nCreating a Resource Group...')
    resource_group = resource_client.resource_groups.create_or_update(
        GROUP_NAME, {'location': LOCATION})
    print_item(resource_group)

    # Creating an event subscription to storage account {StorageAccountResourceId} with destination as {HybridConnectionResourceId}
    print(
        '\nCreating an event subscription to storage account {} with destination as {}'
        .format(STORAGE_ACOUNT_RESOURCE_ID, HYBRID_CONNECTION_RESOURCE_ID))
    event_subscription_name = 'EventSubscription1'
    destination = HybridConnectionEventSubscriptionDestination(
        resource_id=HYBRID_CONNECTION_RESOURCE_ID)
    filter = EventSubscriptionFilter(
        included_event_types=['Microsoft.Storage.BlobCreatedEvent'],
        is_subject_case_sensitive=False,
        subject_begins_with='/blobServices/default/containers/container1',
        subject_ends_with='.jpg')

    event_subscription_info = EventSubscription(destination=destination,
                                                filter=filter)

    event_subscription_async_poller = event_grid_client.event_subscriptions.create_or_update(
        STORAGE_ACOUNT_RESOURCE_ID,
        event_subscription_name,
        event_subscription_info,
    )
    # Blocking call for the EventSubscription to be created
    event_subscription = event_subscription_async_poller.result(
    )  # type: EventSubscription
    print_item(event_subscription)

    input("Press enter to delete all created resources.")

    # Delete the EventSubscription
    print('\nDeleting the event subscription')
    delete_async_operation = event_grid_client.event_subscriptions.delete(
        STORAGE_ACOUNT_RESOURCE_ID, event_subscription_name)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(event_subscription_name))

    # Delete Resource group and everything in it
    print('\nDelete Resource Group')
    delete_async_operation = resource_client.resource_groups.delete(GROUP_NAME)
    delete_async_operation.wait()
    print("\nDeleted: {}".format(GROUP_NAME))
示例#12
0
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}"
    )