public Agent( IConfigSource configSource, IEnvironmentProvider environmentProvider, IPlanner planner, IPlanRunner planRunner, IReporter reporter, IModuleIdentityLifecycleManager moduleIdentityLifecycleManager, IEntityStore <string, string> configStore, DeploymentConfigInfo initialDeployedConfigInfo, ISerde <DeploymentConfigInfo> deploymentConfigInfoSerde, IEncryptionProvider encryptionProvider, IAvailabilityMetric availabilityMetric) { this.configSource = Preconditions.CheckNotNull(configSource, nameof(configSource)); this.planner = Preconditions.CheckNotNull(planner, nameof(planner)); this.planRunner = Preconditions.CheckNotNull(planRunner, nameof(planRunner)); this.reporter = Preconditions.CheckNotNull(reporter, nameof(reporter)); this.moduleIdentityLifecycleManager = Preconditions.CheckNotNull(moduleIdentityLifecycleManager, nameof(moduleIdentityLifecycleManager)); this.configStore = Preconditions.CheckNotNull(configStore, nameof(configStore)); this.environmentProvider = Preconditions.CheckNotNull(environmentProvider, nameof(environmentProvider)); this.currentConfig = Preconditions.CheckNotNull(initialDeployedConfigInfo); this.deploymentConfigInfoSerde = Preconditions.CheckNotNull(deploymentConfigInfoSerde, nameof(deploymentConfigInfoSerde)); this.environment = this.environmentProvider.Create(this.currentConfig.DeploymentConfig); this.encryptionProvider = Preconditions.CheckNotNull(encryptionProvider, nameof(encryptionProvider)); this.availabilityMetric = Preconditions.CheckNotNull(availabilityMetric, nameof(availabilityMetric)); this.status = DeploymentStatus.Unknown; Events.AgentCreated(); }
public static async Task <Agent> Create( IConfigSource configSource, IPlanner planner, IPlanRunner planRunner, IReporter reporter, IModuleIdentityLifecycleManager moduleIdentityLifecycleManager, IEnvironmentProvider environmentProvider, IEntityStore <string, string> configStore, ISerde <DeploymentConfigInfo> deploymentConfigInfoSerde, IEncryptionProvider encryptionProvider, IAvailabilityMetric availabilityMetric) { Preconditions.CheckNotNull(deploymentConfigInfoSerde, nameof(deploymentConfigInfoSerde)); Preconditions.CheckNotNull(configStore, nameof(configStore)); Option <DeploymentConfigInfo> deploymentConfigInfo = Option.None <DeploymentConfigInfo>(); try { Option <string> deploymentConfigInfoJson = await Preconditions.CheckNotNull(configStore, nameof(configStore)).Get(StoreConfigKey); await deploymentConfigInfoJson.ForEachAsync( async json => { string decryptedJson = await encryptionProvider.DecryptAsync(json); deploymentConfigInfo = Option.Some(deploymentConfigInfoSerde.Deserialize(decryptedJson)); }); } catch (Exception ex) when(!ex.IsFatal()) { Events.ErrorDeserializingConfig(ex); } var agent = new Agent( configSource, environmentProvider, planner, planRunner, reporter, moduleIdentityLifecycleManager, configStore, deploymentConfigInfo.GetOrElse(DeploymentConfigInfo.Empty), deploymentConfigInfoSerde, encryptionProvider, availabilityMetric); return(agent); }