Ejemplo n.º 1
0
        public void TestSerializationForNotaryContentTrustDefaultValue()
        {
            DockerReportedConfig config = new DockerReportedConfig("image1:42", "{}", "sha256:foosha", Option.Maybe(new NotaryContentTrust()));
            string json     = JsonConvert.SerializeObject(config);
            string expected = "{\"image\":\"image1:42\",\"imageHash\":\"sha256:foosha\",\"createOptions\":\"{}\",\"notaryContentTrust\":{\"disableTOFU\":false}}";

            Assert.Equal(expected, json);
        }
Ejemplo n.º 2
0
        public void TestSerialization()
        {
            var createOptions = @"{""Env"": [""k1=v1"", ""k2=v2"", ""k3=v3""], ""HostConfig"": {""PortBindings"": {""43/udp"": [" +
                                string.Join(", ", Enumerable.Repeat(@"{""HostPort"": ""43""}", 50)) +
                                @"], ""42/tcp"": [{""HostPort"": ""42""}]}}}";
            var config   = new DockerReportedConfig("image1:42", createOptions, "sha256:foosha");
            var json     = JsonConvert.SerializeObject(config);
            var expected = "{\"image\":\"image1:42\",\"imageHash\":\"sha256:foosha\",\"createOptions\":\"{\\\"Env\\\":[\\\"k1=v1\\\",\\\"k2=v2\\\",\\\"k3=v3\\\"],\\\"HostConfig\\\":{\\\"PortBindings\\\":{\\\"43/udp\\\":[{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostP\",\"createOptions01\":\"ort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"},{\\\"HostPort\\\":\\\"43\\\"}],\\\"42/tcp\\\":[{\\\"HostPort\\\":\\\"42\\\"}]}}}\"}";

            Assert.Equal(expected, json);
        }
Ejemplo n.º 3
0
        public void TestDeserializationForNotaryContentTrustDefaultValue()
        {
            string testConfig = @"
            {
                'image': 'image1:42',
                'imageHash': 'sha256:foosha',
                'createOptions' : ""{}"",
                'notaryContentTrust' : {}
            }";

            DockerReportedConfig config         = new DockerReportedConfig("image1:42", "{}", "sha256:foosha", Option.Maybe(new NotaryContentTrust()));
            DockerReportedConfig expectedConfig = JsonConvert.DeserializeObject <DockerReportedConfig>(testConfig);

            Assert.Equal(expectedConfig, config);
        }
Ejemplo n.º 4
0
        public void TestSerializationForNotaryContentTrust()
        {
            NotaryContentTrust notaryContentTrust = new NotaryContentTrust
            {
                RootJsonPath        = "/home/path/module/rootjson",
                RootID              = "45634232423523232423423525253252532523432333",
                RootCertificatePath = "/home/path/module/rootca",
                DisableTOFU         = true
            };
            DockerReportedConfig config = new DockerReportedConfig("image1:42", "{}", "sha256:foosha", Option.Maybe(notaryContentTrust));

            string json     = JsonConvert.SerializeObject(config);
            string expected = "{\"image\":\"image1:42\",\"imageHash\":\"sha256:foosha\",\"createOptions\":\"{}\",\"notaryContentTrust\":{\"rootJsonPath\":\"/home/path/module/rootjson\",\"rootID\":\"45634232423523232423423525253252532523432333\",\"rootCertificatePath\":\"/home/path/module/rootca\",\"disableTOFU\":true}}";

            Assert.Equal(expected, json);
        }
Ejemplo n.º 5
0
        public void TestDeserializationForNotaryContentTrust()
        {
            string             testConfig         = @"
            {
                'image': 'image1:42',
                'imageHash': 'sha256:foosha',
                'createOptions' : ""{}"",
                'notaryContentTrust' : { 'rootJsonPath' : '/home/path/module/rootjson', 'rootID' : '45634232423523232423423525253252532523432333', 'rootCertificatePath' : '/home/path/module/rootca', 'disableTOFU': 'true'}
            }";
            NotaryContentTrust notaryContentTrust = new NotaryContentTrust
            {
                RootJsonPath        = "/home/path/module/rootjson",
                RootID              = "45634232423523232423423525253252532523432333",
                RootCertificatePath = "/home/path/module/rootca",
                DisableTOFU         = true
            };

            DockerReportedConfig config         = new DockerReportedConfig("image1:42", "{}", "sha256:foosha", Option.Maybe(notaryContentTrust));
            DockerReportedConfig expectedConfig = JsonConvert.DeserializeObject <DockerReportedConfig>(testConfig);

            Assert.Equal(expectedConfig, config);
        }
        public async Task <ModuleSet> GetModulesAsync(CancellationToken token)
        {
            IEnumerable <ModuleRuntimeInfo> moduleStatuses = await this.moduleStatusProvider.GetModules(token);

            var       modules   = new List <IModule>();
            ModuleSet moduleSet = this.deploymentConfig.GetModuleSet();

            foreach (ModuleRuntimeInfo moduleRuntimeInfo in moduleStatuses)
            {
                if (moduleRuntimeInfo.Type != "docker" || !(moduleRuntimeInfo is ModuleRuntimeInfo <DockerReportedConfig> dockerRuntimeInfo))
                {
                    Events.InvalidModuleType(moduleRuntimeInfo);
                    continue;
                }

                if (!moduleSet.Modules.TryGetValue(dockerRuntimeInfo.Name, out IModule configModule) || !(configModule is DockerModule dockerModule))
                {
                    dockerModule = new DockerModule(dockerRuntimeInfo.Name, string.Empty, ModuleStatus.Unknown, Core.RestartPolicy.Unknown, new DockerConfig(Constants.UnknownImage, new CreateContainerParameters(), Option.None <string>()), ImagePullPolicy.OnCreate, Core.Constants.HighestPriority, new ConfigurationInfo(), null, null);
                }

                Option <ModuleState> moduleStateOption = await this.moduleStateStore.Get(moduleRuntimeInfo.Name);

                ModuleState moduleState = moduleStateOption.GetOrElse(new ModuleState(0, moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue)));

                string  image = !string.IsNullOrWhiteSpace(dockerRuntimeInfo.Config.Image) ? dockerRuntimeInfo.Config.Image : dockerModule.Config.Image;
                var     dockerReportedConfig = new DockerReportedConfig(image, dockerModule.Config.CreateOptions, dockerRuntimeInfo.Config.ImageHash, dockerModule.Config.Digest);
                IModule module;
                switch (moduleRuntimeInfo.Name)
                {
                case Core.Constants.EdgeHubModuleName:
                    module = new EdgeHubDockerRuntimeModule(
                        dockerModule.DesiredStatus,
                        dockerModule.RestartPolicy,
                        dockerReportedConfig,
                        (int)dockerRuntimeInfo.ExitCode,
                        moduleRuntimeInfo.Description,
                        moduleRuntimeInfo.StartTime.GetOrElse(DateTime.MinValue),
                        moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue),
                        moduleState.RestartCount,
                        moduleState.LastRestartTimeUtc,
                        moduleRuntimeInfo.ModuleStatus,
                        dockerModule.ImagePullPolicy,
                        dockerModule.Priority,
                        dockerModule.ConfigurationInfo,
                        dockerModule.Env);
                    break;

                case Core.Constants.EdgeAgentModuleName:
                    module = new EdgeAgentDockerRuntimeModule(
                        dockerReportedConfig,
                        moduleRuntimeInfo.ModuleStatus,
                        (int)dockerRuntimeInfo.ExitCode,
                        moduleRuntimeInfo.Description,
                        moduleRuntimeInfo.StartTime.GetOrElse(DateTime.MinValue),
                        moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue),
                        dockerModule.ImagePullPolicy,
                        dockerModule.ConfigurationInfo,
                        dockerModule.Env);
                    break;

                default:
                    module = new DockerRuntimeModule(
                        moduleRuntimeInfo.Name,
                        dockerModule.Version,
                        dockerModule.DesiredStatus,
                        dockerModule.RestartPolicy,
                        dockerReportedConfig,
                        (int)dockerRuntimeInfo.ExitCode,
                        moduleRuntimeInfo.Description,
                        moduleRuntimeInfo.StartTime.GetOrElse(DateTime.MinValue),
                        moduleRuntimeInfo.ExitTime.GetOrElse(DateTime.MinValue),
                        moduleState.RestartCount,
                        moduleState.LastRestartTimeUtc,
                        moduleRuntimeInfo.ModuleStatus,
                        dockerModule.ImagePullPolicy,
                        dockerModule.Priority,
                        dockerModule.ConfigurationInfo,
                        dockerModule.Env,
                        dockerModule.Secrets);
                    break;
                }

                modules.Add(module);
            }

            return(ModuleSet.Create(modules.ToArray()));
        }