Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
lblackstone committed Sep 18, 2019
1 parent 8d6658d commit 1c223e7
Show file tree
Hide file tree
Showing 15 changed files with 1,059 additions and 35 deletions.
3 changes: 2 additions & 1 deletion pkg/await/apps_deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,8 @@ func (dia *deploymentInitAwaiter) aggregatePodErrors() logging.Messages {
glog.V(3).Infof("Failed to unmarshal Pod event: %v", err)
return nil
}
messages = append(messages, checker.Update(pod).Warnings()...)
m := checker.Update(pod)
messages = append(messages, m.MessagesWithSeverity(diag.Warning, diag.Error)...)
}

return messages
Expand Down
4 changes: 4 additions & 0 deletions pkg/await/await.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ func (r ResourceId) String() string {
return r.Name
}

func (r ResourceId) GVKString() string {
return fmt.Sprintf(`'[%s] %s'`, r.GVK, r.String())
}

func ResourceIdFromUnstructured(uns *unstructured.Unstructured) ResourceId {
return ResourceId{
Namespace: clients.NamespaceOrDefault(uns.GetNamespace()),
Expand Down
4 changes: 1 addition & 3 deletions pkg/await/awaiters.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,9 +353,7 @@ func untilAppsStatefulSetDeleted(config deleteAwaitConfig) error {

// --------------------------------------------------------------------------

func untilBatchV1JobDeleted(
ctx context.Context, clientForResource dynamic.ResourceInterface, name string,
) error {
func untilBatchV1JobDeleted(config deleteAwaitConfig) error {
// TODO

return nil
Expand Down
46 changes: 36 additions & 10 deletions pkg/await/batch_job.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/pulumi/pulumi-kubernetes/pkg/kinds"
"github.com/pulumi/pulumi-kubernetes/pkg/logging"
"github.com/pulumi/pulumi-kubernetes/pkg/metadata"
"github.com/pulumi/pulumi/pkg/diag"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/watch"
Expand All @@ -37,14 +38,16 @@ type jobInitAwaiter struct {
job *unstructured.Unstructured
config createAwaitConfig
state *states.StateChecker
messages logging.Messages
errors logging.TimeOrderedLogSet
resource ResourceId
}

func makeJobInitAwaiter(c createAwaitConfig) *jobInitAwaiter {
return &jobInitAwaiter{
config: c,
job: c.currentOutputs,
state: states.NewJobChecker(),
config: c,
job: c.currentOutputs,
state: states.NewJobChecker(),
resource: ResourceIdFromUnstructured(c.currentOutputs),
}
}

Expand All @@ -62,6 +65,12 @@ func (jia *jobInitAwaiter) Await() error {
}
defer jobWatcher.Stop()

podAggregator, err := NewPodAggregator(ResourceIdFromUnstructured(jia.job), jia.config.clientSet)
if err != nil {
return errors.Wrapf(err, "Could not create PodAggregator for %s", jia.resource.GVKString())
}
defer podAggregator.Stop()

timeout := metadata.TimeoutDuration(jia.config.timeout, jia.config.currentInputs, DefaultJobTimeoutMins*60)
for {
if jia.state.Ready() {
Expand All @@ -72,16 +81,21 @@ func (jia *jobInitAwaiter) Await() error {
select {
case <-jia.config.ctx.Done():
return &cancellationError{
object: jia.job,
// subErrors: jia.errorMessages(),
object: jia.job,
subErrors: jia.errorMessages(),
}
case <-time.After(timeout):
return &timeoutError{
object: jia.job,
// subErrors: jia.errorMessages(),
object: jia.job,
subErrors: jia.errorMessages(),
}
case event := <-jobWatcher.ResultChan():
jia.processJobEvent(event)
case messages := <-podAggregator.ResultChan():
for _, message := range messages {
jia.errors.Add(message)
jia.config.logMessage(message)
}
}
}
}
Expand Down Expand Up @@ -126,8 +140,20 @@ func (jia *jobInitAwaiter) processJobEvent(event watch.Event) {
return
}

jia.messages = jia.state.Update(job)
for _, message := range jia.messages {
messages := jia.state.Update(job)
for _, message := range messages.MessagesWithSeverity(diag.Warning, diag.Error) {
jia.errors.Add(message)
}
for _, message := range messages {
jia.config.logMessage(message)
}
}

func (jia *jobInitAwaiter) errorMessages() []string {
messages := make([]string, 0)
for _, message := range jia.errors.Messages {
messages = append(messages, message.S)
}

return messages
}
75 changes: 75 additions & 0 deletions pkg/await/recordings/states/job/backoffLimit.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"batch/v1\",\"kind\":\"Job\",\"metadata\":{\"labels\":{\"app.kubernetes.io/managed-by\":\"pulumi\"},\"name\":\"foo\"},\"spec\":{\"backoffLimit\":1,\"template\":{\"spec\":{\"activeDeadlineSeconds\":10,\"containers\":[{\"command\":[\"perl\",\"-Mbignum=bpi\",\"-wle\",\"print bpi(2000)\"],\"image\":\"perl-fail\",\"name\":\"pi\"}],\"restartPolicy\":\"Never\"}}}}\n"
},
"creationTimestamp": "2019-09-04T18:19:35Z",
"labels": {
"app.kubernetes.io/managed-by": "pulumi"
},
"name": "foo",
"namespace": "default",
"resourceVersion": "1127282",
"selfLink": "/apis/batch/v1/namespaces/default/jobs/foo",
"uid": "8c668c31-cf40-11e9-8c3a-025000000001"
},
"spec": {
"backoffLimit": 1,
"completions": 1,
"parallelism": 1,
"selector": {
"matchLabels": {
"controller-uid": "8c668c31-cf40-11e9-8c3a-025000000001"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"controller-uid": "8c668c31-cf40-11e9-8c3a-025000000001",
"job-name": "foo"
}
},
"spec": {
"activeDeadlineSeconds": 10,
"containers": [
{
"command": [
"perl",
"-Mbignum=bpi",
"-wle",
"print bpi(2000)"
],
"image": "perl-fail",
"imagePullPolicy": "Always",
"name": "pi",
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File"
}
],
"dnsPolicy": "ClusterFirst",
"restartPolicy": "Never",
"schedulerName": "default-scheduler",
"securityContext": {},
"terminationGracePeriodSeconds": 30
}
}
},
"status": {
"conditions": [
{
"lastProbeTime": "2019-09-04T18:19:55Z",
"lastTransitionTime": "2019-09-04T18:19:55Z",
"message": "Job has reached the specified backoff limit",
"reason": "BackoffLimitExceeded",
"status": "True",
"type": "Failed"
}
],
"failed": 2,
"startTime": "2019-09-04T18:19:35Z"
}
}
75 changes: 75 additions & 0 deletions pkg/await/recordings/states/job/deadlineExceeded.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"batch/v1\",\"kind\":\"Job\",\"metadata\":{\"labels\":{\"app.kubernetes.io/managed-by\":\"pulumi\"},\"name\":\"foo\"},\"spec\":{\"activeDeadlineSeconds\":1,\"backoffLimit\":1,\"completions\":1,\"parallelism\":1,\"template\":{\"spec\":{\"containers\":[{\"command\":[\"perl\",\"-Mbignum=bpi\",\"-wle\",\"print bpi(2000)\"],\"image\":\"perl\",\"name\":\"pi\"}],\"restartPolicy\":\"Never\"}}}}\n"
},
"creationTimestamp": "2019-09-09T21:53:56Z",
"labels": {
"app.kubernetes.io/managed-by": "pulumi"
},
"name": "foo",
"namespace": "default",
"resourceVersion": "1336251",
"selfLink": "/apis/batch/v1/namespaces/default/jobs/foo",
"uid": "525855e6-d34c-11e9-9aec-025000000001"
},
"spec": {
"activeDeadlineSeconds": 1,
"backoffLimit": 1,
"completions": 1,
"parallelism": 1,
"selector": {
"matchLabels": {
"controller-uid": "525855e6-d34c-11e9-9aec-025000000001"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"controller-uid": "525855e6-d34c-11e9-9aec-025000000001",
"job-name": "foo"
}
},
"spec": {
"containers": [
{
"command": [
"perl",
"-Mbignum=bpi",
"-wle",
"print bpi(2000)"
],
"image": "perl",
"imagePullPolicy": "Always",
"name": "pi",
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File"
}
],
"dnsPolicy": "ClusterFirst",
"restartPolicy": "Never",
"schedulerName": "default-scheduler",
"securityContext": {},
"terminationGracePeriodSeconds": 30
}
}
},
"status": {
"conditions": [
{
"lastProbeTime": "2019-09-09T21:53:57Z",
"lastTransitionTime": "2019-09-09T21:53:57Z",
"message": "Job was active longer than specified deadline",
"reason": "DeadlineExceeded",
"status": "True",
"type": "Failed"
}
],
"failed": 1,
"startTime": "2019-09-09T21:53:56Z"
}
}
73 changes: 73 additions & 0 deletions pkg/await/recordings/states/job/succeeded.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"batch/v1\",\"kind\":\"Job\",\"metadata\":{\"labels\":{\"app.kubernetes.io/managed-by\":\"pulumi\"},\"name\":\"foo\"},\"spec\":{\"backoffLimit\":4,\"template\":{\"spec\":{\"containers\":[{\"command\":[\"perl\",\"-Mbignum=bpi\",\"-wle\",\"print bpi(2000)\"],\"image\":\"perl\",\"name\":\"pi\"}],\"restartPolicy\":\"Never\"}}}}\n"
},
"creationTimestamp": "2019-07-11T19:30:43Z",
"labels": {
"app.kubernetes.io/managed-by": "pulumi"
},
"name": "foo",
"namespace": "default",
"resourceVersion": "764704",
"selfLink": "/apis/batch/v1/namespaces/default/jobs/foo",
"uid": "6000eff6-a412-11e9-a3c5-025000000001"
},
"spec": {
"backoffLimit": 4,
"completions": 1,
"parallelism": 1,
"selector": {
"matchLabels": {
"controller-uid": "6000eff6-a412-11e9-a3c5-025000000001"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"controller-uid": "6000eff6-a412-11e9-a3c5-025000000001",
"job-name": "foo"
}
},
"spec": {
"containers": [
{
"command": [
"perl",
"-Mbignum=bpi",
"-wle",
"print bpi(2000)"
],
"image": "perl",
"imagePullPolicy": "Always",
"name": "pi",
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File"
}
],
"dnsPolicy": "ClusterFirst",
"restartPolicy": "Never",
"schedulerName": "default-scheduler",
"securityContext": {},
"terminationGracePeriodSeconds": 30
}
}
},
"status": {
"completionTime": "2019-07-11T19:30:56Z",
"conditions": [
{
"lastProbeTime": "2019-07-11T19:30:56Z",
"lastTransitionTime": "2019-07-11T19:30:56Z",
"status": "True",
"type": "Complete"
}
],
"startTime": "2019-07-11T19:30:43Z",
"succeeded": 1
}
}
Loading

0 comments on commit 1c223e7

Please sign in to comment.