Esempio n. 1
0
 public EdgeDeploymentCommand(
     string deviceNamespace,
     ResourceName resourceName,
     IKubernetes client,
     IEnumerable <IModule> modules,
     IRuntimeInfo runtimeInfo,
     ICombinedConfigProvider <CombinedKubernetesConfig> configProvider)
 {
     this.deviceNamespace = KubeUtils.SanitizeK8sValue(Preconditions.CheckNonWhiteSpace(deviceNamespace, nameof(deviceNamespace)));
     this.resourceName    = Preconditions.CheckNotNull(resourceName, nameof(resourceName));
     this.client          = Preconditions.CheckNotNull(client, nameof(client));
     this.modules         = Preconditions.CheckNotNull(modules, nameof(modules)).ToList();
     this.runtimeInfo     = Preconditions.CheckNotNull(runtimeInfo, nameof(runtimeInfo));
     this.configProvider  = Preconditions.CheckNotNull(configProvider, nameof(configProvider));
     this.id = new Lazy <string>(() => this.modules.Aggregate(string.Empty, (prev, module) => module.Name + prev));
     this.serializerSettings = new JsonSerializerSettings
     {
         ContractResolver = new OverrideJsonIgnoreOfBaseClassContractResolver(
             new Dictionary <Type, string[]>
         {
             [typeof(KubernetesModule)] = new[] { nameof(KubernetesModule.Name) }
         })
         {
             // Environment variable (env) property JSON casing should be left alone
             NamingStrategy = new CamelCaseNamingStrategy
             {
                 ProcessDictionaryKeys = false
             }
         }
     };
 }
Esempio n. 2
0
 public DockerCommandFactory(IDockerClient dockerClient, DockerLoggingConfig dockerLoggingConfig, IConfigSource configSource, ICombinedConfigProvider <CombinedDockerConfig> combinedConfigProvider)
 {
     this.client                 = Preconditions.CheckNotNull(dockerClient, nameof(dockerClient));
     this.dockerLoggerConfig     = Preconditions.CheckNotNull(dockerLoggingConfig, nameof(dockerLoggingConfig));
     this.configSource           = Preconditions.CheckNotNull(configSource, nameof(configSource));
     this.combinedConfigProvider = Preconditions.CheckNotNull(combinedConfigProvider, nameof(combinedConfigProvider));
 }
Esempio n. 3
0
 public EdgeletCommandFactory(IModuleManager moduleManager, ISecretManager secretManager, IConfigSource configSource, ICombinedConfigProvider <T> combinedConfigProvider)
 {
     this.moduleManager          = Preconditions.CheckNotNull(moduleManager, nameof(moduleManager));
     this.secretManager          = Preconditions.CheckNotNull(secretManager, nameof(secretManager));
     this.configSource           = Preconditions.CheckNotNull(configSource, nameof(configSource));
     this.combinedConfigProvider = Preconditions.CheckNotNull(combinedConfigProvider, nameof(combinedConfigProvider));
 }
Esempio n. 4
0
 public KubernetesPlanner(
     string deviceNamespace,
     ResourceName resourceName,
     IKubernetes client,
     ICommandFactory commandFactory,
     ICombinedConfigProvider <CombinedKubernetesConfig> configProvider)
 {
     this.resourceName    = Preconditions.CheckNotNull(resourceName, nameof(resourceName));
     this.deviceNamespace = Preconditions.CheckNonWhiteSpace(deviceNamespace, nameof(deviceNamespace));
     this.client          = Preconditions.CheckNotNull(client, nameof(client));
     this.commandFactory  = Preconditions.CheckNotNull(commandFactory, nameof(commandFactory));
     this.configProvider  = Preconditions.CheckNotNull(configProvider, nameof(configProvider));
 }
Esempio n. 5
0
 public KubernetesPlanner(
     string deviceNamespace,
     string iotHubHostname,
     string deviceId,
     IKubernetes client,
     ICommandFactory commandFactory,
     ICombinedConfigProvider <T> combinedConfigProvider)
 {
     this.deviceNamespace        = Preconditions.CheckNonWhiteSpace(deviceNamespace, nameof(deviceNamespace));
     this.iotHubHostname         = Preconditions.CheckNonWhiteSpace(iotHubHostname, nameof(iotHubHostname));
     this.deviceId               = Preconditions.CheckNonWhiteSpace(deviceId, nameof(deviceId));
     this.client                 = Preconditions.CheckNotNull(client, nameof(client));
     this.commandFactory         = Preconditions.CheckNotNull(commandFactory, nameof(commandFactory));
     this.combinedConfigProvider = Preconditions.CheckNotNull(combinedConfigProvider, nameof(combinedConfigProvider));
 }
Esempio n. 6
0
 public KubernetesPlanner(
     string deviceNamespace,
     ResourceName resourceName,
     IKubernetes client,
     ICommandFactory commandFactory,
     ICombinedConfigProvider <CombinedKubernetesConfig> configProvider,
     KubernetesModuleOwner moduleOwner)
 {
     this.resourceName       = Preconditions.CheckNotNull(resourceName, nameof(resourceName));
     this.deviceNamespace    = Preconditions.CheckNonWhiteSpace(deviceNamespace, nameof(deviceNamespace));
     this.client             = Preconditions.CheckNotNull(client, nameof(client));
     this.commandFactory     = Preconditions.CheckNotNull(commandFactory, nameof(commandFactory));
     this.configProvider     = Preconditions.CheckNotNull(configProvider, nameof(configProvider));
     this.moduleOwner        = Preconditions.CheckNotNull(moduleOwner);
     this.serializerSettings = EdgeDeploymentSerialization.SerializerSettings;
 }
Esempio n. 7
0
        public EdgeletCommandFactory(
            IModuleManager moduleManager,
            IConfigSource configSource,
            ICombinedConfigProvider <T> combinedConfigProvider)
        {
            this.moduleManager          = Preconditions.CheckNotNull(moduleManager, nameof(moduleManager));
            this.configSource           = Preconditions.CheckNotNull(configSource, nameof(configSource));
            this.combinedConfigProvider = Preconditions.CheckNotNull(combinedConfigProvider, nameof(combinedConfigProvider));
            this.edgeDeviceHostname     = this.configSource.Configuration.GetValue <string>(Constants.EdgeDeviceHostNameKey);
            if (string.IsNullOrWhiteSpace(this.edgeDeviceHostname))
            {
                throw new ArgumentException("EdgeDeviceHostname from configuration is null, empty or whitespaces.");
            }

            this.parentEdgeHostname = Option.Maybe(this.configSource.Configuration.GetValue <string>(Constants.GatewayHostnameVariableName));
        }
Esempio n. 8
0
 public EdgeDeploymentCommand(
     string deviceNamespace,
     ResourceName resourceName,
     IKubernetes client,
     IEnumerable <IModule> desiredmodules,
     ModuleSet currentmodules,
     IRuntimeInfo runtimeInfo,
     ICombinedConfigProvider <CombinedKubernetesConfig> configProvider)
 {
     this.deviceNamespace = KubeUtils.SanitizeK8sValue(Preconditions.CheckNonWhiteSpace(deviceNamespace, nameof(deviceNamespace)));
     this.resourceName    = Preconditions.CheckNotNull(resourceName, nameof(resourceName));
     this.client          = Preconditions.CheckNotNull(client, nameof(client));
     this.modules         = Preconditions.CheckNotNull(desiredmodules, nameof(desiredmodules)).ToList();
     this.currentmodules  = Preconditions.CheckNotNull(currentmodules, nameof(currentmodules));
     this.runtimeInfo     = Preconditions.CheckNotNull(runtimeInfo, nameof(runtimeInfo));
     this.configProvider  = Preconditions.CheckNotNull(configProvider, nameof(configProvider));
     this.id = new Lazy <string>(() => this.modules.Aggregate(string.Empty, (prev, module) => module.Name + prev));
     this.serializerSettings = EdgeDeploymentSerialization.SerializerSettings;
 }
Esempio n. 9
0
        public KubernetesCrdCommand(string deviceNamespace, string iotHubHostname, string deviceId, IKubernetes client, KubernetesModule <DockerConfig>[] modules, Option <IRuntimeInfo> runtimeInfo, ICombinedConfigProvider <T> combinedConfigProvider)
        {
            this.deviceNamespace        = KubeUtils.SanitizeK8sValue(Preconditions.CheckNonWhiteSpace(deviceNamespace, nameof(deviceNamespace)));
            this.iotHubHostname         = KubeUtils.SanitizeK8sValue(Preconditions.CheckNonWhiteSpace(iotHubHostname, nameof(iotHubHostname)));
            this.deviceId               = KubeUtils.SanitizeK8sValue(Preconditions.CheckNonWhiteSpace(deviceId, nameof(deviceId)));
            this.client                 = Preconditions.CheckNotNull(client, nameof(client));
            this.modules                = Preconditions.CheckNotNull(modules, nameof(modules));
            this.runtimeInfo            = Preconditions.CheckNotNull(runtimeInfo, nameof(runtimeInfo));
            this.combinedConfigProvider = Preconditions.CheckNotNull(combinedConfigProvider, nameof(combinedConfigProvider));
            this.id = new Lazy <string>(() => this.modules.Aggregate(string.Empty, (prev, module) => module.Name + prev));
            var deserializerTypesMap = new Dictionary <Type, IDictionary <string, Type> >
            {
                [typeof(IModule)] = new Dictionary <string, Type>
                {
                    ["docker"] = typeof(CombinedDockerConfig)
                }
            };

            this.deploymentSerde = new TypeSpecificSerDe <EdgeDeploymentDefinition <DockerConfig> >(deserializerTypesMap);
        }
Esempio n. 10
0
        protected override void Load(ContainerBuilder builder)
        {
            // IModuleClientProvider
            builder.Register(
                c => new ModuleClientProvider(
                    c.Resolve <ISdkModuleClientProvider>(),
                    this.upstreamProtocol,
                    this.proxy,
                    this.productInfo,
                    this.closeOnIdleTimeout,
                    this.idleTimeout))
            .As <IModuleClientProvider>()
            .SingleInstance();

            // IModuleManager
            builder.Register(c => new ModuleManagementHttpClient(this.managementUri, this.apiVersion, Constants.EdgeletClientApiVersion))
            .As <IModuleManager>()
            .As <IIdentityManager>()
            .As <IDeviceManager>()
            .SingleInstance();

            // IModuleIdentityLifecycleManager
            var identityBuilder = new ModuleIdentityProviderServiceBuilder(this.iotHubHostName, this.deviceId, this.gatewayHostName);

            builder.Register(c => new ModuleIdentityLifecycleManager(c.Resolve <IIdentityManager>(), identityBuilder, this.workloadUri))
            .As <IModuleIdentityLifecycleManager>()
            .SingleInstance();

            // ICombinedConfigProvider<CombinedDockerConfig>
            builder.Register(
                async c =>
            {
                IConfigSource configSource = await c.Resolve <Task <IConfigSource> >();
                return(new CombinedEdgeletConfigProvider(this.dockerAuthConfig, configSource) as ICombinedConfigProvider <CombinedDockerConfig>);
            })
            .As <Task <ICombinedConfigProvider <CombinedDockerConfig> > >()
            .SingleInstance();

            // ICommandFactory
            builder.Register(
                async c =>
            {
                var moduleManager = c.Resolve <IModuleManager>();
                var combinedDockerConfigProviderTask = c.Resolve <Task <ICombinedConfigProvider <CombinedDockerConfig> > >();
                var configSourceTask       = c.Resolve <Task <IConfigSource> >();
                var metricsProvider        = c.Resolve <IMetricsProvider>();
                var loggerFactory          = c.Resolve <ILoggerFactory>();
                IConfigSource configSource = await configSourceTask;
                ICombinedConfigProvider <CombinedDockerConfig> combinedDockerConfigProvider = await combinedDockerConfigProviderTask;
                ICommandFactory factory = new EdgeletCommandFactory <CombinedDockerConfig>(moduleManager, configSource, combinedDockerConfigProvider);
                factory = new MetricsCommandFactory(factory, metricsProvider);
                return(new LoggingCommandFactory(factory, loggerFactory) as ICommandFactory);
            })
            .As <Task <ICommandFactory> >()
            .SingleInstance();

            // Task<IRuntimeInfoProvider>
            builder.Register(c => Task.FromResult(new RuntimeInfoProvider <DockerReportedConfig>(c.Resolve <IModuleManager>()) as IRuntimeInfoProvider))
            .As <Task <IRuntimeInfoProvider> >()
            .SingleInstance();

            // Task<IEnvironmentProvider>
            builder.Register(
                async c =>
            {
                var moduleStateStore     = await c.Resolve <Task <IEntityStore <string, ModuleState> > >();
                var restartPolicyManager = c.Resolve <IRestartPolicyManager>();
                IRuntimeInfoProvider runtimeInfoProvider       = await c.Resolve <Task <IRuntimeInfoProvider> >();
                IEnvironmentProvider dockerEnvironmentProvider = await DockerEnvironmentProvider.CreateAsync(runtimeInfoProvider, moduleStateStore, restartPolicyManager, CancellationToken.None);
                return(dockerEnvironmentProvider);
            })
            .As <Task <IEnvironmentProvider> >()
            .SingleInstance();

            // SystemResourcesMetrics
            builder.Register(c => new SystemResourcesMetrics(c.Resolve <IMetricsProvider>(), c.Resolve <IModuleManager>().GetSystemResourcesAsync, this.apiVersion, this.performanceMetricsUpdateFrequency))
            .SingleInstance();
        }
Esempio n. 11
0
        protected override void Load(ContainerBuilder builder)
        {
            // IModuleClientProvider
            builder.Register(c => new EnvironmentModuleClientProvider(this.upstreamProtocol, this.productInfo))
            .As <IModuleClientProvider>()
            .SingleInstance();

            // IModuleManager
            builder.Register(c => new ModuleManagementHttpClient(this.managementUri))
            .As <IModuleManager>()
            .As <IIdentityManager>()
            .SingleInstance();

            // IModuleIdentityLifecycleManager
            var identityBuilder = new ModuleIdentityProviderServiceBuilder(this.iotHubHostName, this.deviceId, this.gatewayHostName);

            builder.Register(c => new ModuleIdentityLifecycleManager(c.Resolve <IIdentityManager>(), identityBuilder, this.workloadUri))
            .As <IModuleIdentityLifecycleManager>()
            .SingleInstance();

            // ICombinedConfigProvider<CombinedDockerConfig>
            builder.Register(
                async c =>
            {
                IConfigSource configSource = await c.Resolve <Task <IConfigSource> >();
                return(new CombinedEdgeletConfigProvider(this.dockerAuthConfig, configSource) as ICombinedConfigProvider <CombinedDockerConfig>);
            })
            .As <Task <ICombinedConfigProvider <CombinedDockerConfig> > >()
            .SingleInstance();

            // ICommandFactory
            builder.Register(
                async c =>
            {
                var moduleManager = c.Resolve <IModuleManager>();
                ICombinedConfigProvider <CombinedDockerConfig> combinedDockerConfigProvider = await c.Resolve <Task <ICombinedConfigProvider <CombinedDockerConfig> > >();
                IConfigSource configSource = await c.Resolve <Task <IConfigSource> >();
                var edgeletCommandFactory  = new EdgeletCommandFactory <CombinedDockerConfig>(moduleManager, configSource, combinedDockerConfigProvider);
                return(new LoggingCommandFactory(edgeletCommandFactory, c.Resolve <ILoggerFactory>()) as ICommandFactory);
            })
            .As <Task <ICommandFactory> >()
            .SingleInstance();

            // IModuleRuntimeInfoProvider
            builder.Register(c => new RuntimeInfoProvider <DockerReportedConfig>(c.Resolve <IModuleManager>()))
            .As <IRuntimeInfoProvider>()
            .SingleInstance();

            // Task<IEnvironmentProvider>
            builder.Register(
                async c =>
            {
                var moduleStateStore     = c.Resolve <IEntityStore <string, ModuleState> >();
                var restartPolicyManager = c.Resolve <IRestartPolicyManager>();
                var runtimeInfoProvider  = c.Resolve <IRuntimeInfoProvider>();
                IEnvironmentProvider dockerEnvironmentProvider = await DockerEnvironmentProvider.CreateAsync(runtimeInfoProvider, moduleStateStore, restartPolicyManager);
                return(dockerEnvironmentProvider);
            })
            .As <Task <IEnvironmentProvider> >()
            .SingleInstance();
        }