From b59a22688829a2733e69ebe78ecb3698ccb1cddd Mon Sep 17 00:00:00 2001 From: Seth Hoenig Date: Tue, 15 Jun 2021 12:41:04 -0500 Subject: [PATCH] Merge pull request #10764 from hashicorp/b-passfail-lost consul: make failures_before_critical and success_before_passing work with group services --- command/agent/job_endpoint.go | 94 +++++++----------------------- command/agent/job_endpoint_test.go | 8 ++- 2 files changed, 27 insertions(+), 75 deletions(-) diff --git a/command/agent/job_endpoint.go b/command/agent/job_endpoint.go index a5b3cf4b1ff1..0f599ccc6d99 100644 --- a/command/agent/job_endpoint.go +++ b/command/agent/job_endpoint.go @@ -1041,60 +1041,7 @@ func ApiTaskToStructsTask(job *structs.Job, group *structs.TaskGroup, } } - if l := len(apiTask.Services); l != 0 { - structsTask.Services = make([]*structs.Service, l) - for i, service := range apiTask.Services { - structsTask.Services[i] = &structs.Service{ - Name: service.Name, - PortLabel: service.PortLabel, - Tags: service.Tags, - CanaryTags: service.CanaryTags, - EnableTagOverride: service.EnableTagOverride, - AddressMode: service.AddressMode, - Meta: helper.CopyMapStringString(service.Meta), - CanaryMeta: helper.CopyMapStringString(service.CanaryMeta), - } - - if l := len(service.Checks); l != 0 { - structsTask.Services[i].Checks = make([]*structs.ServiceCheck, l) - for j, check := range service.Checks { - structsTask.Services[i].Checks[j] = &structs.ServiceCheck{ - Name: check.Name, - Type: check.Type, - Command: check.Command, - Args: check.Args, - Path: check.Path, - Protocol: check.Protocol, - PortLabel: check.PortLabel, - AddressMode: check.AddressMode, - Interval: check.Interval, - Timeout: check.Timeout, - InitialStatus: check.InitialStatus, - TLSSkipVerify: check.TLSSkipVerify, - Header: check.Header, - Method: check.Method, - GRPCService: check.GRPCService, - GRPCUseTLS: check.GRPCUseTLS, - SuccessBeforePassing: check.SuccessBeforePassing, - FailuresBeforeCritical: check.FailuresBeforeCritical, - } - if check.CheckRestart != nil { - structsTask.Services[i].Checks[j].CheckRestart = &structs.CheckRestart{ - Limit: check.CheckRestart.Limit, - Grace: *check.CheckRestart.Grace, - IgnoreWarnings: check.CheckRestart.IgnoreWarnings, - } - } - } - } - - // Task services can't have a connect block. We still convert it so that - // we can later return a validation error. - if service.Connect != nil { - structsTask.Services[i].Connect = ApiConsulConnectToStructs(service.Connect) - } - } - } + structsTask.Services = ApiServicesToStructs(apiTask.Services) structsTask.Resources = ApiResourcesToStructs(apiTask.Resources) @@ -1254,7 +1201,6 @@ func ApiPortToStructs(in api.Port) structs.Port { } } -//TODO(schmichael) refactor and reuse in service parsing above func ApiServicesToStructs(in []*api.Service) []*structs.Service { if len(in) == 0 { return nil @@ -1278,24 +1224,26 @@ func ApiServicesToStructs(in []*api.Service) []*structs.Service { out[i].Checks = make([]*structs.ServiceCheck, l) for j, check := range s.Checks { out[i].Checks[j] = &structs.ServiceCheck{ - Name: check.Name, - Type: check.Type, - Command: check.Command, - Args: check.Args, - Path: check.Path, - Protocol: check.Protocol, - PortLabel: check.PortLabel, - Expose: check.Expose, - AddressMode: check.AddressMode, - Interval: check.Interval, - Timeout: check.Timeout, - InitialStatus: check.InitialStatus, - TLSSkipVerify: check.TLSSkipVerify, - Header: check.Header, - Method: check.Method, - GRPCService: check.GRPCService, - GRPCUseTLS: check.GRPCUseTLS, - TaskName: check.TaskName, + Name: check.Name, + Type: check.Type, + Command: check.Command, + Args: check.Args, + Path: check.Path, + Protocol: check.Protocol, + PortLabel: check.PortLabel, + Expose: check.Expose, + AddressMode: check.AddressMode, + Interval: check.Interval, + Timeout: check.Timeout, + InitialStatus: check.InitialStatus, + TLSSkipVerify: check.TLSSkipVerify, + Header: check.Header, + Method: check.Method, + GRPCService: check.GRPCService, + GRPCUseTLS: check.GRPCUseTLS, + TaskName: check.TaskName, + SuccessBeforePassing: check.SuccessBeforePassing, + FailuresBeforeCritical: check.FailuresBeforeCritical, } if check.CheckRestart != nil { out[i].Checks[j].CheckRestart = &structs.CheckRestart{ diff --git a/command/agent/job_endpoint_test.go b/command/agent/job_endpoint_test.go index d5219e483949..546b9600fcd7 100644 --- a/command/agent/job_endpoint_test.go +++ b/command/agent/job_endpoint_test.go @@ -2024,7 +2024,9 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) { Limit: 3, IgnoreWarnings: true, }, - TaskName: "task1", + TaskName: "task1", + SuccessBeforePassing: 2, + FailuresBeforeCritical: 3, }, }, Connect: &api.ConsulConnect{ @@ -2396,7 +2398,9 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) { Limit: 3, IgnoreWarnings: true, }, - TaskName: "task1", + TaskName: "task1", + SuccessBeforePassing: 2, + FailuresBeforeCritical: 3, }, }, Connect: &structs.ConsulConnect{