public static async Task <NamespaceBundleConfigurations> Run(IManageNamespaceManagerLifeCycle manageNamespaceManagerLifeCycle, NamespaceConfigurations namespaceConfigurations, string bundlePrefix) { var namespaceBundleConfigurations = new NamespaceBundleConfigurations(); foreach (var namespaceConfiguration in namespaceConfigurations) { var namespaceManager = manageNamespaceManagerLifeCycle.Get(namespaceConfiguration.Alias); var namespaceManagerThatCanQueryAndFilterTopics = namespaceManager as NamespaceManagerAdapter; // if user has provided an implementation of INamespaceManager, skip the checks all together if (namespaceManagerThatCanQueryAndFilterTopics == null) { break; } var numberOfTopics = 1; if (await namespaceManagerThatCanQueryAndFilterTopics.CanManageEntities().ConfigureAwait(false)) { var filter = $"startswith(path, '{bundlePrefix}') eq true"; var foundTopics = await namespaceManagerThatCanQueryAndFilterTopics.GetTopics(filter).ConfigureAwait(false); numberOfTopics = foundTopics.Count(); } namespaceBundleConfigurations.Add(namespaceConfiguration.Alias, numberOfTopics); } return(namespaceBundleConfigurations); }
public async Task Create(TopologySection topology) { if (!await hasManageRights.Value.ConfigureAwait(false)) { Logger.Info($"Configured to create topology, but have no manage rights for the following namespace(s): {namespacesWithoutManageRightsJoined}. Execution will continue and assume the topology is already created."); return; } var queues = topology.Entities.Where(e => e.Type == EntityType.Queue).ToList(); var topics = topology.Entities.Where(e => e.Type == EntityType.Topic).ToList(); var subscriptions = topology.Entities.Where(e => e.Type == EntityType.Subscription).ToList(); if (queues.Any()) { var queueCreator = (ICreateAzureServiceBusQueues)container.Resolve(typeof(ICreateAzureServiceBusQueues)); foreach (var queue in queues) { await queueCreator.Create(queue.Path, namespaces.Get(queue.Namespace.Alias)).ConfigureAwait(false); } } if (topics.Any()) { var topicCreator = (ICreateAzureServiceBusTopics)container.Resolve(typeof(ICreateAzureServiceBusTopics)); foreach (var topic in topics) { await topicCreator.Create(topic.Path, namespaces.Get(topic.Namespace.Alias)).ConfigureAwait(false); } } if (subscriptions.Any()) { var subscriptionCreator = (ICreateAzureServiceBusSubscriptions)container.Resolve(typeof(ICreateAzureServiceBusSubscriptions)); foreach (var subscription in subscriptions) { var topic = subscription.RelationShips.First(r => r.Type == EntityRelationShipType.Subscription); var forwardTo = subscription.RelationShips.FirstOrDefault(r => r.Type == EntityRelationShipType.Forward); var sqlFilter = (subscription as SubscriptionInfo)?.BrokerSideFilter.Serialize(); var metadata = (subscription as SubscriptionInfo)?.Metadata ?? new SubscriptionMetadata(); await subscriptionCreator.Create(topic.Target.Path, subscription.Path, metadata, sqlFilter, namespaces.Get(subscription.Namespace.Alias), forwardTo?.Target.Path).ConfigureAwait(false); } } }
public static async Task <List <string> > Run(IManageNamespaceManagerLifeCycle manageNamespaceManagerLifeCycle, ReadOnlySettings settings) { var namespacesWithoutManageRights = new List <string>(); var namespaces = settings.Get <NamespaceConfigurations>(WellKnownConfigurationKeys.Topology.Addressing.Namespaces); foreach (var @namespace in namespaces) { var namespaceManager = manageNamespaceManagerLifeCycle.Get(@namespace.Alias); var canManageEntities = await namespaceManager.CanManageEntities().ConfigureAwait(false); if (!canManageEntities) { namespacesWithoutManageRights.Add(@namespace.Alias); } } return(namespacesWithoutManageRights); }