Files
troubleshoot/pkg/redact/redact_test.go
Benjamin Yang a9d2180dd6 102 redactor newline corruption clean (#1947)
* fix: prevent redactors from corrupting binary files (#102)

Redactors were adding newlines to files without them, corrupting binary
files during support bundle collection (51 bytes → 53 bytes).

Created LineReader to track original newline state and only restore
newlines when they were present in the original file.

- Added pkg/redact/line_reader.go
- Refactored single_line.go, multi_line.go, literal.go
- Added 48 tests, all passing
- Verified: binary files now preserved byte-for-byte

Fixes #102


* fix: handle empty lines correctly in MultiLineRedactor

- Check line1 == nil instead of len(line1) == 0 for empty file detection
- Fixes edge case where file containing only '\n' would be dropped
- Addresses bugbot finding about empty line handling


* fix: handle empty lines correctly in MultiLineRedactor

- Check line1 != nil instead of len(line1) > 0 in both locations
- Fixes edge case where empty trailing lines would be dropped
- Fix test isolation in literal_test.go (move ResetRedactionList to parent)
- Addresses bugbot findings about empty line handling

* fmt

* chore: update regression baselines from run 20107431959

* adding defense

* fix: propagate non-EOF errors in all early return paths

Ensure non-EOF errors (like buffer overflow) are properly propagated
to caller in both pre-loop early returns. Addresses bugbot finding.

* fix: use unique test names to prevent redaction list pollution

Use t.Name() instead of hardcoded 'test' to ensure each test
has unique redactor name, preventing parallel test interference

---------

Co-authored-by: hedge-sparrow <sparrow@spooky.academy>
2025-12-10 16:55:54 -06:00

1877 lines
65 KiB
Go

package redact
import (
"io"
"io/ioutil"
"strings"
"testing"
troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
"github.com/stretchr/testify/require"
)
func Test_Redactors(t *testing.T) {
original := `[
{
"metadata": {
"name": "awesome-api",
"namespace": "default",
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"awesome-api\",\"namespace\":\"default\"},\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"app\":\"awesome-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"JWT_SIGNING_KEY\",\"value\":\"jwt-signing-key\"},{\"name\":\"TSED_SUPPRESS_ACCESSLOG\",\"value\":\"1\"},{\"name\":\"PINO_LOG_PRETTY\",\"value\":\"1\"},{\"name\":\"PINO_LOG_LEVEL\",\"value\":\"debug\"},{\"name\":\"NODE_ENV\",\"value\":\"development\"},{\"name\":\"MYSQL_HOST\",\"value\":\"mysql\"},{\"name\":\"MYSQL_USER\",\"value\":\"mysqluser\"},{\"name\":\"MYSQL_PASSWORD\",\"value\":\"password\"},{\"name\":\"MYSQL_PORT\",\"value\":\"3306\"},{\"name\":\"MYSQL_DATABASE\",\"value\":\"mysqldb\"},{\"name\":\"CUSTOMER_AVATAR_S3_BUCKET\",\"value\":\"products-dev-avatars-3\"},{\"name\":\"SUPPORT_BUNDLE_S3_BUCKET\",\"value\":\"products-dev-supportbundles\"},{\"name\":\"APP_RELEASE_S3_BUCKET\",\"value\":\"products-dev-releases\"},{\"name\":\"GRAPHQL_VENDOR_ENDPOINT\",\"value\":\"http://awesome-api:8013/graphql\"},{\"name\":\"GRAPHQL_PREM_ENDPOINT\",\"value\":\"http://awesome-api-prem:8033/graphql\"},{\"name\":\"ANALYZE_ENDPOINT\",\"value\":\"http://lazy-api:3000\"},{\"name\":\"GITHUB_CLIENT_ID\",\"value\":\"Iv1.64993a1aeb9575e0\"},{\"name\":\"GITHUB_PRIVATE_KEY_FILENAME\",\"value\":\"/secret-mounts/github-app-private-key--dev-only.pem\"},{\"name\":\"GITHUB_INTEGRATION_ID\",\"value\":\"7888\"},{\"name\":\"INSTALL_URL\",\"value\":\"http://localhost:8090\"},{\"name\":\"AWS_ACCESS_KEY_ID\",\"value\":\"fake\"},{\"name\":\"AWS_SECRET_ACCESS_KEY\",\"value\":\"fake\"},{\"name\":\"AWS_REGION\",\"value\":\"notaregion\"},{\"name\":\"AWS_OWNER_ACCOUNT\",\"value\":\"fake\"},{\"name\":\"S3_ENDPOINT\",\"value\":\"http://s3:4569\"},{\"name\":\"SERVER_MODE\",\"value\":\"vendor\"},{\"name\":\"NEW_RELIC_APP_NAME\",\"value\":\"awesome-api-vendor\"}],\"image\":\"localhost:32000/awesome-api:e9a281f7@sha256:6e988461ffce2bac3561234f736b9a504bfda1911fa6432b90e6bbb16f67f925\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"awesome-api\",\"ports\":[{\"containerPort\":3000,\"name\":\"awesome-api\"}],\"readinessProbe\":{\"failureThreshold\":3,\"httpGet\":{\"path\":\"/healthz\",\"port\":3000,\"scheme\":\"HTTP\"},\"initialDelaySeconds\":2,\"periodSeconds\":2,\"successThreshold\":1,\"timeoutSeconds\":1}}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "awesome-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "awesome-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0"
}
},
"spec": {
"containers": [
{
"name": "awesome-api",
"image": "localhost:32000/awesome-api:e9a281f7@sha256:6e988461ffce2bac3561234f736b9a504bfda1911fa6432b90e6bbb16f67f925",
"ports": [
{
"name": "awesome-api",
"containerPort": 3000,
"protocol": "TCP"
}
],
"env": [
{
"name": "DB_CONNECTION_STRING",
"value": "dbuser:thisisasecret@tcp(dbserver.org:3309)/blog_production"
},
{
"name": "POSTGRES_CONNECTION_STRING",
"value": "Provider=PostgreSQL OLE DB Provider;Data Source=myServerAddress;location=myDataBase;User ID=myUsername;password=myPassword;timeout=1000;"
},
{
"name": "POSTGRES_CONNECTION_STRING_2",
"value": "postgres://pg_user:pg_password@pg_host:5432/pg_database"
},
{
"name": "MYSQL_CONNECTION_STRING",
"value": "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;UseProcedureBodies=False;"
},
{
"name": "JWT_SIGNING_KEY",
"value": "jwt-signing-key"
},
{
"name": "TSED_SUPPRESS_ACCESSLOG",
"value": "1"
},
{
"name": "PINO_LOG_PRETTY",
"value": "1"
},
{
"name": "PINO_LOG_LEVEL",
"value": "debug"
},
{
"name": "NODE_ENV",
"value": "development"
},
{
"name": "MYSQL_HOST",
"value": "mysql"
},
{
"name": "MYSQL_USER",
"value": "mysqluser"
},
{
"name": "MYSQL_PASSWORD",
"value": "password"
},
{
"name": "MYSQL_PORT",
"value": "3306"
},
{
"name": "MYSQL_DATABASE",
"value": "mysqldb"
},
{
"name": "CUSTOMER_AVATAR_S3_BUCKET",
"value": "products-dev-avatars-3"
},
{
"name": "SUPPORT_BUNDLE_S3_BUCKET",
"value": "products-dev-supportbundles"
},
{
"name": "APP_RELEASE_S3_BUCKET",
"value": "products-dev-releases"
},
{
"name": "GRAPHQL_VENDOR_ENDPOINT",
"value": "http://awesome-api:8013/graphql"
},
{
"name": "GRAPHQL_PREM_ENDPOINT",
"value": "http://awesome-api-prem:8033/graphql"
},
{
"name": "ANALYZE_ENDPOINT",
"value": "http://lazy-api:3000"
},
{
"name": "GITHUB_CLIENT_ID",
"value": "Iv1.64993a1aeb9575e0"
},
{
"name": "GITHUB_PRIVATE_KEY_FILENAME",
"value": "/secret-mounts/github-app-private-key--dev-only.pem"
},
{
"name": "GITHUB_INTEGRATION_ID",
"value": "7888"
},
{
"name": "INSTALL_URL",
"value": "http://localhost:8090"
},
{
"name": "AWS_ACCESS_KEY_ID",
"value": "fake"
},
{
"name": "AWS_SECRET_ACCESS_KEY",
"value": "fake"
},
{
"name": "AWS_REGION",
"value": "notaregion"
},
{
"name": "AWS_OWNER_ACCOUNT",
"value": "fake"
},
{
"name": "S3_ENDPOINT",
"value": "http://s3:4569"
},
{
"name": "SERVER_MODE",
"value": "vendor"
},
{
"name": "NEW_RELIC_APP_NAME",
"value": "awesome-api-vendor"
}
],
"resources": {},
"readinessProbe": {
"httpGet": {
"path": "/healthz",
"port": 3000,
"scheme": "HTTP"
},
"initialDelaySeconds": 2,
"timeoutSeconds": 1,
"periodSeconds": 2,
"successThreshold": 1,
"failureThreshold": 3
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:33Z",
"lastTransitionTime": "2019-07-15T21:15:33Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
},
{
"metadata": {
"name": "gatekeeping-api",
"namespace": "default",
"selfLink": "/apis/apps/v1/namespaces/default/deployments/gatekeeping-api",
"uid": "aeb84dc6-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197507",
"generation": 1,
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"gatekeeping-api\",\"namespace\":\"default\"},\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"app\":\"gatekeeping-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"containers\":[{\"args\":[\"serve\"],\"env\":[{\"name\":\"GRAPHQL_API_ADDRESS\",\"value\":\"http://awesome-api-prem:3000/graphql\"}],\"image\":\"somebigbank/titled\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"gatekeeping-api\",\"ports\":[{\"containerPort\":3000,\"name\":\"gatekeeping-api\"}]}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "gatekeeping-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "gatekeeping-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"spec": {
"containers": [
{
"name": "gatekeeping-api",
"image": "somebigbank/titled",
"args": [
"serve"
],
"ports": [
{
"name": "gatekeeping-api",
"containerPort": 3000,
"protocol": "TCP"
}
],
"env": [
{
"name": "GRAPHQL_API_ADDRESS",
"value": "http://awesome-api-prem:3000/graphql"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:34Z",
"lastTransitionTime": "2019-07-15T21:15:34Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
},
{
"metadata": {
"name": "cranky-api",
"namespace": "default",
"selfLink": "/apis/apps/v1/namespaces/default/deployments/cranky-api",
"uid": "aebb750c-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197557",
"generation": 1,
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"cranky-api\",\"namespace\":\"default\"},\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"app\":\"cranky-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"ELASTICSEARCH_NODES\",\"value\":\"http://esuser:thisisnotasecret@elasticsearch:9200\"},{\"name\":\"MAX_LOGIN_ATTEMPTS\",\"value\":\"7\"},{\"name\":\"LICENSE_SIGNING_KEY\",\"value\":\"\"},{\"name\":\"JWT_SIGNING_KEY\",\"value\":\"jwt-signing-key\"},{\"name\":\"GITHUB_CLIENT_ID\",\"value\":\"9a92961100c3bd14b991\"},{\"name\":\"GITHUB_CLIENT_SECRET\",\"value\":\"not-a-secret\"},{\"name\":\"LICENSE_API_ENDPOINT\",\"value\":\"http://boring-api:3000\"},{\"name\":\"vendor_assets_bucket\",\"value\":\"replicaetd-vendor-assets-dev\"},{\"name\":\"vendor_web_host\",\"value\":\"http://localhost:8080\"},{\"name\":\"download_web_host\",\"value\":\"http://localhost:8080\"},{\"name\":\"SPEC_V1_PATH\",\"value\":\"/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v1\"},{\"name\":\"SPEC_V2_PATH\",\"value\":\"/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v2\"},{\"name\":\"AWS_ACCESS_KEY_ID\",\"value\":\"fake\"},{\"name\":\"AWS_SECRET_ACCESS_KEY\",\"value\":\"fake\"},{\"name\":\"AWS_REGION\",\"value\":\"notaregion\"},{\"name\":\"AWS_OWNER_ACCOUNT\",\"value\":\"fake\"},{\"name\":\"SQS_ENDPOINT\",\"value\":\"http://sqs:9324\"},{\"name\":\"RELEASE_UDPATE_SQS_QUEUE\",\"value\":\"preflight-checker\"},{\"name\":\"LICENSE_UDPATE_SQS_QUEUE\",\"value\":\"search-builder\"},{\"name\":\"AWS_SQS_MAIL_QUEUENAME\",\"value\":\"mail-dev\"},{\"name\":\"AWS_SQS_AIRGAP_QUEUENAME\",\"value\":\"airgap-dev\"},{\"name\":\"AWS_SQS_LICENSEAGGREGATOR_QUEUENAME\",\"value\":\"licenseaggregator-dev\"},{\"name\":\"INTEGRATION_API_SQS_QUEUE_NAME\",\"value\":\"integration-api-dev\"},{\"name\":\"BUGSNAG_ENV\",\"value\":\"dev\"},{\"name\":\"VENDOR_REGISTY_HOST\",\"value\":\"https://registry:10443\"},{\"name\":\"VENDOR_REGISTY_ENDPOINT\",\"value\":\"registry:10443\"},{\"name\":\"LOG_LEVEL\",\"value\":\"debug\"},{\"name\":\"ENVIRONMENT\",\"value\":\"dev\"},{\"name\":\"ALLOW_INSECURE_REGISTRY\",\"value\":\"true\"},{\"name\":\"GRAPHQL_API_ADDRESS\",\"value\":\"http://awesome-api:3000/graphql\"},{\"name\":\"PREM_GRAPHQL_API_ADDRESS\",\"value\":\"http://awesome-api-prem:3000/graphql\"},{\"name\":\"GRAPHQL_ENDPOINT\",\"value\":\"http://awesome-api:3000/graphql\"},{\"name\":\"TITLED_ENDPOINT\",\"value\":\"http://gatekeeping-api:3000\"},{\"name\":\"MYSQL_HOST\",\"value\":\"mysql\"},{\"name\":\"MYSQL_USER\",\"value\":\"mysqluser\"},{\"name\":\"MYSQL_PASSWORD\",\"value\":\"password\"},{\"name\":\"MYSQL_PORT\",\"value\":\"3306\"},{\"name\":\"MYSQL_DATABASE\",\"value\":\"mysqldb\"},{\"name\":\"AUDITOR_API_HOST\",\"value\":\"http://api.auditor.svc.cluster.local:3000/auditlog\"},{\"name\":\"AUDITOR_TOKEN\",\"value\":\"dev\"},{\"name\":\"AUDITOR_PROJECTID\",\"value\":\"dev\"},{\"name\":\"PROJECT_NAME\",\"value\":\"cranky-api\"}],\"image\":\"localhost:32000/cranky-api:e9a281f7-dirty@sha256:f6bbd155a2e7325ea93dbc48848eeba7b0e612b8849676df91e647f0d86ece03\",\"imagePullPolicy\":\"IfNotPresent\",\"livenessProbe\":{\"failureThreshold\":2,\"httpGet\":{\"path\":\"/healthz\",\"port\":8005,\"scheme\":\"HTTP\"},\"initialDelaySeconds\":30,\"periodSeconds\":15,\"timeoutSeconds\":1},\"name\":\"cranky-api\",\"ports\":[{\"containerPort\":8005,\"name\":\"cranky-api\"}],\"readinessProbe\":{\"failureThreshold\":3,\"httpGet\":{\"path\":\"/healthz\",\"port\":8005,\"scheme\":\"HTTP\"},\"initialDelaySeconds\":5,\"periodSeconds\":2,\"successThreshold\":2,\"timeoutSeconds\":1},\"workingDir\":\"/go/src/github.com/somebigbankhq/vandam/cranky-api\"}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "cranky-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "cranky-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"spec": {
"containers": [
{
"name": "cranky-api",
"image": "localhost:32000/cranky-api:e9a281f7-dirty@sha256:f6bbd155a2e7325ea93dbc48848eeba7b0e612b8849676df91e647f0d86ece03",
"workingDir": "/go/src/github.com/somebigbankhq/vandam/cranky-api",
"ports": [
{
"name": "cranky-api",
"containerPort": 8005,
"protocol": "TCP"
}
],
"env": [
{
"name": "ELASTICSEARCH_NODES",
"value": "http://esuser:thisisnotasecret@elasticsearch:9200"
},
{
"name": "MAX_LOGIN_ATTEMPTS",
"value": "7"
},
{
"name": "LICENSE_SIGNING_KEY"
},
{
"name": "JWT_SIGNING_KEY",
"value": "jwt-signing-key"
},
{
"name": "GITHUB_CLIENT_ID",
"value": "9a92961100c3bd14b991"
},
{
"name": "GITHUB_CLIENT_SECRET",
"value": "not-a-secret"
},
{
"name": "LICENSE_API_ENDPOINT",
"value": "http://boring-api:3000"
},
{
"name": "vendor_assets_bucket",
"value": "replicaetd-vendor-assets-dev"
},
{
"name": "vendor_web_host",
"value": "http://localhost:8080"
},
{
"name": "download_web_host",
"value": "http://localhost:8080"
},
{
"name": "SPEC_V1_PATH",
"value": "/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v1"
},
{
"name": "SPEC_V2_PATH",
"value": "/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v2"
},
{
"name": "AWS_ACCESS_KEY_ID",
"value": "fake"
},
{
"name": "AWS_SECRET_ACCESS_KEY",
"value": "fake"
},
{
"name": "AWS_REGION",
"value": "notaregion"
},
{
"name": "AWS_OWNER_ACCOUNT",
"value": "fake"
},
{
"name": "SQS_ENDPOINT",
"value": "http://sqs:9324"
},
{
"name": "RELEASE_UDPATE_SQS_QUEUE",
"value": "preflight-checker"
},
{
"name": "LICENSE_UDPATE_SQS_QUEUE",
"value": "search-builder"
},
{
"name": "AWS_SQS_MAIL_QUEUENAME",
"value": "mail-dev"
},
{
"name": "AWS_SQS_AIRGAP_QUEUENAME",
"value": "airgap-dev"
},
{
"name": "AWS_SQS_LICENSEAGGREGATOR_QUEUENAME",
"value": "licenseaggregator-dev"
},
{
"name": "INTEGRATION_API_SQS_QUEUE_NAME",
"value": "integration-api-dev"
},
{
"name": "BUGSNAG_ENV",
"value": "dev"
},
{
"name": "VENDOR_REGISTY_HOST",
"value": "https://registry:10443"
},
{
"name": "VENDOR_REGISTY_ENDPOINT",
"value": "registry:10443"
},
{
"name": "LOG_LEVEL",
"value": "debug"
},
{
"name": "ENVIRONMENT",
"value": "dev"
},
{
"name": "ALLOW_INSECURE_REGISTRY",
"value": "true"
},
{
"name": "GRAPHQL_API_ADDRESS",
"value": "http://awesome-api:3000/graphql"
},
{
"name": "PREM_GRAPHQL_API_ADDRESS",
"value": "http://awesome-api-prem:3000/graphql"
},
{
"name": "GRAPHQL_ENDPOINT",
"value": "http://awesome-api:3000/graphql"
},
{
"name": "TITLED_ENDPOINT",
"value": "http://gatekeeping-api:3000"
},
{
"name": "MYSQL_HOST",
"value": "mysql"
},
{
"name": "MYSQL_USER",
"value": "mysqluser"
},
{
"name": "MYSQL_PASSWORD",
"value": "password"
},
{
"name": "MYSQL_PORT",
"value": "3306"
},
{
"name": "MYSQL_DATABASE",
"value": "mysqldb"
},
{
"name": "AUDITOR_API_HOST",
"value": "http://api.auditor.svc.cluster.local:3000/auditlog"
},
{
"name": "AUDITOR_TOKEN",
"value": "dev"
},
{
"name": "AUDITOR_PROJECTID",
"value": "dev"
},
{
"name": "PROJECT_NAME",
"value": "cranky-api"
}
],
"resources": {},
"livenessProbe": {
"httpGet": {
"path": "/healthz",
"port": 8005,
"scheme": "HTTP"
},
"initialDelaySeconds": 30,
"timeoutSeconds": 1,
"periodSeconds": 15,
"successThreshold": 1,
"failureThreshold": 2
},
"readinessProbe": {
"httpGet": {
"path": "/healthz",
"port": 8005,
"scheme": "HTTP"
},
"initialDelaySeconds": 5,
"timeoutSeconds": 1,
"periodSeconds": 2,
"successThreshold": 2,
"failureThreshold": 3
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:34Z",
"lastTransitionTime": "2019-07-15T21:15:34Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
},
{
"metadata": {
"name": "front-end",
"namespace": "default",
"selfLink": "/apis/apps/v1/namespaces/default/deployments/front-end",
"uid": "aeabeecb-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197433",
"generation": 1,
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"front-end\",\"namespace\":\"default\"},\"spec\":{\"selector\":{\"matchLabels\":{\"app\":\"front-end\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"front-end\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"affinity\":{\"podAntiAffinity\":{\"preferredDuringSchedulingIgnoredDuringExecution\":[{\"podAffinityTerm\":{\"labelSelector\":{\"matchExpressions\":[{\"key\":\"app\",\"operator\":\"In\",\"values\":[\"front-end\"]}]},\"topologyKey\":\"kubernetes.io/hostname\"},\"weight\":2}]}},\"containers\":[{\"image\":\"localhost:32000/front-end:e9a281f7-dirty@sha256:382ed0992abac7e0d7b77ea6a43f0bed9fd5217dcf8550c2433db7037007636c\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"front-end\",\"ports\":[{\"containerPort\":8080,\"name\":\"front-end\"}]}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "front-end"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "front-end",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"spec": {
"containers": [
{
"name": "front-end",
"image": "localhost:32000/front-end:e9a281f7-dirty@sha256:382ed0992abac7e0d7b77ea6a43f0bed9fd5217dcf8550c2433db7037007636c",
"ports": [
{
"name": "front-end",
"containerPort": 8080,
"protocol": "TCP"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"affinity": {
"podAntiAffinity": {
"preferredDuringSchedulingIgnoredDuringExecution": [
{
"weight": 2,
"podAffinityTerm": {
"labelSelector": {
"matchExpressions": [
{
"key": "app",
"operator": "In",
"values": [
"front-end"
]
}
]
},
"topologyKey": "kubernetes.io/hostname"
}
}
]
}
},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": "25%",
"maxSurge": "25%"
}
},
"revisionHistoryLimit": 10,
"progressDeadlineSeconds": 600
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:41Z",
"lastTransitionTime": "2019-07-15T21:15:41Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
},
{
"type": "Progressing",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:41Z",
"lastTransitionTime": "2019-07-15T21:15:33Z",
"reason": "NewReplicaSetAvailable",
"message": "ReplicaSet \"front-end-54cf6bb649\" has successfully progressed."
}
]
}
},
{
"metadata": {
"name": "lazy-api",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/services/lazy-api",
"uid": "aea94ce2-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197269",
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app": "lazy-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"lazy-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"lazy-api\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"name\":\"lazy-api\",\"nodePort\":30005,\"port\":8005,\"targetPort\":\"lazy-api\"}],\"selector\":{\"app\":\"lazy-api\"},\"type\":\"NodePort\"}}\n"
}
},
"spec": {
"ports": [
{
"name": "lazy-api",
"protocol": "TCP",
"port": 8005,
"targetPort": "lazy-api",
"nodePort": 30005
}
],
"selector": {
"app": "lazy-api"
},
"type": "NodePort",
"sessionAffinity": "None",
"externalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
{
"auth_dump": [
{
"entity": "osd.0",
"key": "ABCxyzABCxyz/foo/bar123xyz/BAZAABBCCDD==",
"caps": {
"mgr": "allow profile osd",
"mon": "allow profile osd",
"osd": "allow *"
}
},
{
"entity": "client.admin",
"key": "ABCxyzABCxyz/foo/bar123xyz/BAZAABBCCDD==",
"caps": {
"mds": "allow *",
"mgr": "allow *",
"mon": "allow *",
"osd": "allow *"
}
},
{
"entity": "client.bootstrap-mds",
"key": "ABCxyzABCxyz/foo/bar123xyz/BAZAABBCCDD==",
"caps": {
"mon": "allow profile bootstrap-mds"
}
},
{
"entity": "client.rgw.rook.ceph.store.a",
"key": "ABCxyzABCxyz/foo/bar123xyz/BAZAABBCCDD==",
"caps": {
"mon": "allow rw",
"osd": "allow rwx"
}
},
{
"entity": "mgr.a",
"key": "ABCxyzABCxyz/foo/bar123xyz/BAZAABBCCDD==",
"caps": {
"mds": "allow *",
"mon": "allow profile mgr",
"osd": "allow *"
}
}
]
}
]`
expected := `[
{
"metadata": {
"name": "awesome-api",
"namespace": "default",
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"awesome-api\",\"namespace\":\"default\"},\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"app\":\"awesome-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"JWT_SIGNING_KEY\",\"value\":\"jwt-signing-key\"},{\"name\":\"TSED_SUPPRESS_ACCESSLOG\",\"value\":\"1\"},{\"name\":\"PINO_LOG_PRETTY\",\"value\":\"1\"},{\"name\":\"PINO_LOG_LEVEL\",\"value\":\"debug\"},{\"name\":\"NODE_ENV\",\"value\":\"development\"},{\"name\":\"MYSQL_HOST\",\"value\":\"mysql\"},{\"name\":\"MYSQL_USER\",\"value\":\"***HIDDEN***\"},{\"name\":\"MYSQL_PASSWORD\",\"value\":\"***HIDDEN***\"},{\"name\":\"MYSQL_PORT\",\"value\":\"3306\"},{\"name\":\"MYSQL_DATABASE\",\"value\":\"***HIDDEN***\"},{\"name\":\"CUSTOMER_AVATAR_S3_BUCKET\",\"value\":\"products-dev-avatars-3\"},{\"name\":\"SUPPORT_BUNDLE_S3_BUCKET\",\"value\":\"products-dev-supportbundles\"},{\"name\":\"APP_RELEASE_S3_BUCKET\",\"value\":\"products-dev-releases\"},{\"name\":\"GRAPHQL_VENDOR_ENDPOINT\",\"value\":\"http://awesome-api:8013/graphql\"},{\"name\":\"GRAPHQL_PREM_ENDPOINT\",\"value\":\"http://awesome-api-prem:8033/graphql\"},{\"name\":\"ANALYZE_ENDPOINT\",\"value\":\"http://lazy-api:3000\"},{\"name\":\"GITHUB_CLIENT_ID\",\"value\":\"Iv1.64993a1aeb9575e0\"},{\"name\":\"GITHUB_PRIVATE_KEY_FILENAME\",\"value\":\"/secret-mounts/github-app-private-key--dev-only.pem\"},{\"name\":\"GITHUB_INTEGRATION_ID\",\"value\":\"7888\"},{\"name\":\"INSTALL_URL\",\"value\":\"http://localhost:8090\"},{\"name\":\"AWS_ACCESS_KEY_ID\",\"value\":\"***HIDDEN***\"},{\"name\":\"AWS_SECRET_ACCESS_KEY\",\"value\":\"***HIDDEN***\"},{\"name\":\"AWS_REGION\",\"value\":\"notaregion\"},{\"name\":\"AWS_OWNER_ACCOUNT\",\"value\":\"***HIDDEN***\"},{\"name\":\"S3_ENDPOINT\",\"value\":\"http://s3:4569\"},{\"name\":\"SERVER_MODE\",\"value\":\"vendor\"},{\"name\":\"NEW_RELIC_APP_NAME\",\"value\":\"awesome-api-vendor\"}],\"image\":\"localhost:32000/awesome-api:e9a281f7@sha256:6e988461ffce2bac3561234f736b9a504bfda1911fa6432b90e6bbb16f67f925\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"awesome-api\",\"ports\":[{\"containerPort\":3000,\"name\":\"awesome-api\"}],\"readinessProbe\":{\"failureThreshold\":3,\"httpGet\":{\"path\":\"/healthz\",\"port\":3000,\"scheme\":\"HTTP\"},\"initialDelaySeconds\":2,\"periodSeconds\":2,\"successThreshold\":1,\"timeoutSeconds\":1}}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "awesome-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "awesome-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0"
}
},
"spec": {
"containers": [
{
"name": "awesome-api",
"image": "localhost:32000/awesome-api:e9a281f7@sha256:6e988461ffce2bac3561234f736b9a504bfda1911fa6432b90e6bbb16f67f925",
"ports": [
{
"name": "awesome-api",
"containerPort": 3000,
"protocol": "TCP"
}
],
"env": [
{
"name": "DB_CONNECTION_STRING",
"value": "***HIDDEN***:***HIDDEN***@tcp(***HIDDEN***:3309)/***HIDDEN***"
},
{
"name": "POSTGRES_CONNECTION_STRING",
"value": "Provider=PostgreSQL OLE DB Provider;Data Source=***HIDDEN***;location=***HIDDEN***;User ID=***HIDDEN***;password=***HIDDEN***;timeout=1000;"
},
{
"name": "POSTGRES_CONNECTION_STRING_2",
"value": "postgres://***HIDDEN***:***HIDDEN***@***HIDDEN***:5432/***HIDDEN***"
},
{
"name": "MYSQL_CONNECTION_STRING",
"value": "Server=***HIDDEN***;Database=***HIDDEN***;Uid=***HIDDEN***;Pwd=***HIDDEN***;UseProcedureBodies=False;"
},
{
"name": "JWT_SIGNING_KEY",
"value": "jwt-signing-key"
},
{
"name": "TSED_SUPPRESS_ACCESSLOG",
"value": "1"
},
{
"name": "PINO_LOG_PRETTY",
"value": "1"
},
{
"name": "PINO_LOG_LEVEL",
"value": "debug"
},
{
"name": "NODE_ENV",
"value": "development"
},
{
"name": "MYSQL_HOST",
"value": "mysql"
},
{
"name": "MYSQL_USER",
"value": "***HIDDEN***"
},
{
"name": "MYSQL_PASSWORD",
"value": "***HIDDEN***"
},
{
"name": "MYSQL_PORT",
"value": "3306"
},
{
"name": "MYSQL_DATABASE",
"value": "***HIDDEN***"
},
{
"name": "CUSTOMER_AVATAR_S3_BUCKET",
"value": "products-dev-avatars-3"
},
{
"name": "SUPPORT_BUNDLE_S3_BUCKET",
"value": "products-dev-supportbundles"
},
{
"name": "APP_RELEASE_S3_BUCKET",
"value": "products-dev-releases"
},
{
"name": "GRAPHQL_VENDOR_ENDPOINT",
"value": "http://awesome-api:8013/graphql"
},
{
"name": "GRAPHQL_PREM_ENDPOINT",
"value": "http://awesome-api-prem:8033/graphql"
},
{
"name": "ANALYZE_ENDPOINT",
"value": "http://lazy-api:3000"
},
{
"name": "GITHUB_CLIENT_ID",
"value": "Iv1.64993a1aeb9575e0"
},
{
"name": "GITHUB_PRIVATE_KEY_FILENAME",
"value": "/secret-mounts/github-app-private-key--dev-only.pem"
},
{
"name": "GITHUB_INTEGRATION_ID",
"value": "7888"
},
{
"name": "INSTALL_URL",
"value": "http://localhost:8090"
},
{
"name": "AWS_ACCESS_KEY_ID",
"value": "***HIDDEN***"
},
{
"name": "AWS_SECRET_ACCESS_KEY",
"value": "***HIDDEN***"
},
{
"name": "AWS_REGION",
"value": "notaregion"
},
{
"name": "AWS_OWNER_ACCOUNT",
"value": "***HIDDEN***"
},
{
"name": "S3_ENDPOINT",
"value": "http://s3:4569"
},
{
"name": "SERVER_MODE",
"value": "vendor"
},
{
"name": "NEW_RELIC_APP_NAME",
"value": "awesome-api-vendor"
}
],
"resources": {},
"readinessProbe": {
"httpGet": {
"path": "/healthz",
"port": 3000,
"scheme": "HTTP"
},
"initialDelaySeconds": 2,
"timeoutSeconds": 1,
"periodSeconds": 2,
"successThreshold": 1,
"failureThreshold": 3
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:33Z",
"lastTransitionTime": "2019-07-15T21:15:33Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
},
{
"metadata": {
"name": "gatekeeping-api",
"namespace": "default",
"selfLink": "/apis/apps/v1/namespaces/default/deployments/gatekeeping-api",
"uid": "aeb84dc6-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197507",
"generation": 1,
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"gatekeeping-api\",\"namespace\":\"default\"},\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"app\":\"gatekeeping-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"containers\":[{\"args\":[\"serve\"],\"env\":[{\"name\":\"GRAPHQL_API_ADDRESS\",\"value\":\"http://awesome-api-prem:3000/graphql\"}],\"image\":\"somebigbank/titled\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"gatekeeping-api\",\"ports\":[{\"containerPort\":3000,\"name\":\"gatekeeping-api\"}]}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "gatekeeping-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "gatekeeping-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"spec": {
"containers": [
{
"name": "gatekeeping-api",
"image": "somebigbank/titled",
"args": [
"serve"
],
"ports": [
{
"name": "gatekeeping-api",
"containerPort": 3000,
"protocol": "TCP"
}
],
"env": [
{
"name": "GRAPHQL_API_ADDRESS",
"value": "http://awesome-api-prem:3000/graphql"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:34Z",
"lastTransitionTime": "2019-07-15T21:15:34Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
},
{
"metadata": {
"name": "cranky-api",
"namespace": "default",
"selfLink": "/apis/apps/v1/namespaces/default/deployments/cranky-api",
"uid": "aebb750c-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197557",
"generation": 1,
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"cranky-api\",\"namespace\":\"default\"},\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"app\":\"cranky-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"ELASTICSEARCH_NODES\",\"value\":\"http://***HIDDEN***:***HIDDEN***@elasticsearch:9200\"},{\"name\":\"MAX_LOGIN_ATTEMPTS\",\"value\":\"7\"},{\"name\":\"LICENSE_SIGNING_KEY\",\"value\":\"\"},{\"name\":\"JWT_SIGNING_KEY\",\"value\":\"jwt-signing-key\"},{\"name\":\"GITHUB_CLIENT_ID\",\"value\":\"9a92961100c3bd14b991\"},{\"name\":\"GITHUB_CLIENT_SECRET\",\"value\":\"not-a-secret\"},{\"name\":\"LICENSE_API_ENDPOINT\",\"value\":\"http://boring-api:3000\"},{\"name\":\"vendor_assets_bucket\",\"value\":\"replicaetd-vendor-assets-dev\"},{\"name\":\"vendor_web_host\",\"value\":\"http://localhost:8080\"},{\"name\":\"download_web_host\",\"value\":\"http://localhost:8080\"},{\"name\":\"SPEC_V1_PATH\",\"value\":\"/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v1\"},{\"name\":\"SPEC_V2_PATH\",\"value\":\"/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v2\"},{\"name\":\"AWS_ACCESS_KEY_ID\",\"value\":\"***HIDDEN***\"},{\"name\":\"AWS_SECRET_ACCESS_KEY\",\"value\":\"***HIDDEN***\"},{\"name\":\"AWS_REGION\",\"value\":\"notaregion\"},{\"name\":\"AWS_OWNER_ACCOUNT\",\"value\":\"***HIDDEN***\"},{\"name\":\"SQS_ENDPOINT\",\"value\":\"http://sqs:9324\"},{\"name\":\"RELEASE_UDPATE_SQS_QUEUE\",\"value\":\"preflight-checker\"},{\"name\":\"LICENSE_UDPATE_SQS_QUEUE\",\"value\":\"search-builder\"},{\"name\":\"AWS_SQS_MAIL_QUEUENAME\",\"value\":\"mail-dev\"},{\"name\":\"AWS_SQS_AIRGAP_QUEUENAME\",\"value\":\"airgap-dev\"},{\"name\":\"AWS_SQS_LICENSEAGGREGATOR_QUEUENAME\",\"value\":\"licenseaggregator-dev\"},{\"name\":\"INTEGRATION_API_SQS_QUEUE_NAME\",\"value\":\"integration-api-dev\"},{\"name\":\"BUGSNAG_ENV\",\"value\":\"dev\"},{\"name\":\"VENDOR_REGISTY_HOST\",\"value\":\"https://registry:10443\"},{\"name\":\"VENDOR_REGISTY_ENDPOINT\",\"value\":\"registry:10443\"},{\"name\":\"LOG_LEVEL\",\"value\":\"debug\"},{\"name\":\"ENVIRONMENT\",\"value\":\"dev\"},{\"name\":\"ALLOW_INSECURE_REGISTRY\",\"value\":\"true\"},{\"name\":\"GRAPHQL_API_ADDRESS\",\"value\":\"http://awesome-api:3000/graphql\"},{\"name\":\"PREM_GRAPHQL_API_ADDRESS\",\"value\":\"http://awesome-api-prem:3000/graphql\"},{\"name\":\"GRAPHQL_ENDPOINT\",\"value\":\"http://awesome-api:3000/graphql\"},{\"name\":\"TITLED_ENDPOINT\",\"value\":\"http://gatekeeping-api:3000\"},{\"name\":\"MYSQL_HOST\",\"value\":\"mysql\"},{\"name\":\"MYSQL_USER\",\"value\":\"***HIDDEN***\"},{\"name\":\"MYSQL_PASSWORD\",\"value\":\"***HIDDEN***\"},{\"name\":\"MYSQL_PORT\",\"value\":\"3306\"},{\"name\":\"MYSQL_DATABASE\",\"value\":\"***HIDDEN***\"},{\"name\":\"AUDITOR_API_HOST\",\"value\":\"http://api.auditor.svc.cluster.local:3000/auditlog\"},{\"name\":\"AUDITOR_TOKEN\",\"value\":\"***HIDDEN***\"},{\"name\":\"AUDITOR_PROJECTID\",\"value\":\"dev\"},{\"name\":\"PROJECT_NAME\",\"value\":\"cranky-api\"}],\"image\":\"localhost:32000/cranky-api:e9a281f7-dirty@sha256:f6bbd155a2e7325ea93dbc48848eeba7b0e612b8849676df91e647f0d86ece03\",\"imagePullPolicy\":\"IfNotPresent\",\"livenessProbe\":{\"failureThreshold\":2,\"httpGet\":{\"path\":\"/healthz\",\"port\":8005,\"scheme\":\"HTTP\"},\"initialDelaySeconds\":30,\"periodSeconds\":15,\"timeoutSeconds\":1},\"name\":\"cranky-api\",\"ports\":[{\"containerPort\":8005,\"name\":\"cranky-api\"}],\"readinessProbe\":{\"failureThreshold\":3,\"httpGet\":{\"path\":\"/healthz\",\"port\":8005,\"scheme\":\"HTTP\"},\"initialDelaySeconds\":5,\"periodSeconds\":2,\"successThreshold\":2,\"timeoutSeconds\":1},\"workingDir\":\"/go/src/github.com/somebigbankhq/vandam/cranky-api\"}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "cranky-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "cranky-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"spec": {
"containers": [
{
"name": "cranky-api",
"image": "localhost:32000/cranky-api:e9a281f7-dirty@sha256:f6bbd155a2e7325ea93dbc48848eeba7b0e612b8849676df91e647f0d86ece03",
"workingDir": "/go/src/github.com/somebigbankhq/vandam/cranky-api",
"ports": [
{
"name": "cranky-api",
"containerPort": 8005,
"protocol": "TCP"
}
],
"env": [
{
"name": "ELASTICSEARCH_NODES",
"value": "http://***HIDDEN***:***HIDDEN***@elasticsearch:9200"
},
{
"name": "MAX_LOGIN_ATTEMPTS",
"value": "7"
},
{
"name": "LICENSE_SIGNING_KEY"
},
{
"name": "JWT_SIGNING_KEY",
"value": "jwt-signing-key"
},
{
"name": "GITHUB_CLIENT_ID",
"value": "9a92961100c3bd14b991"
},
{
"name": "GITHUB_CLIENT_SECRET",
"value": "not-a-secret"
},
{
"name": "LICENSE_API_ENDPOINT",
"value": "http://boring-api:3000"
},
{
"name": "vendor_assets_bucket",
"value": "replicaetd-vendor-assets-dev"
},
{
"name": "vendor_web_host",
"value": "http://localhost:8080"
},
{
"name": "download_web_host",
"value": "http://localhost:8080"
},
{
"name": "SPEC_V1_PATH",
"value": "/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v1"
},
{
"name": "SPEC_V2_PATH",
"value": "/go/src/github.com/somebigbankhq/vandam/cranky-api/spec/v2"
},
{
"name": "AWS_ACCESS_KEY_ID",
"value": "***HIDDEN***"
},
{
"name": "AWS_SECRET_ACCESS_KEY",
"value": "***HIDDEN***"
},
{
"name": "AWS_REGION",
"value": "notaregion"
},
{
"name": "AWS_OWNER_ACCOUNT",
"value": "***HIDDEN***"
},
{
"name": "SQS_ENDPOINT",
"value": "http://sqs:9324"
},
{
"name": "RELEASE_UDPATE_SQS_QUEUE",
"value": "preflight-checker"
},
{
"name": "LICENSE_UDPATE_SQS_QUEUE",
"value": "search-builder"
},
{
"name": "AWS_SQS_MAIL_QUEUENAME",
"value": "mail-dev"
},
{
"name": "AWS_SQS_AIRGAP_QUEUENAME",
"value": "airgap-dev"
},
{
"name": "AWS_SQS_LICENSEAGGREGATOR_QUEUENAME",
"value": "licenseaggregator-dev"
},
{
"name": "INTEGRATION_API_SQS_QUEUE_NAME",
"value": "integration-api-dev"
},
{
"name": "BUGSNAG_ENV",
"value": "dev"
},
{
"name": "VENDOR_REGISTY_HOST",
"value": "https://registry:10443"
},
{
"name": "VENDOR_REGISTY_ENDPOINT",
"value": "registry:10443"
},
{
"name": "LOG_LEVEL",
"value": "debug"
},
{
"name": "ENVIRONMENT",
"value": "dev"
},
{
"name": "ALLOW_INSECURE_REGISTRY",
"value": "true"
},
{
"name": "GRAPHQL_API_ADDRESS",
"value": "http://awesome-api:3000/graphql"
},
{
"name": "PREM_GRAPHQL_API_ADDRESS",
"value": "http://awesome-api-prem:3000/graphql"
},
{
"name": "GRAPHQL_ENDPOINT",
"value": "http://awesome-api:3000/graphql"
},
{
"name": "TITLED_ENDPOINT",
"value": "http://gatekeeping-api:3000"
},
{
"name": "MYSQL_HOST",
"value": "mysql"
},
{
"name": "MYSQL_USER",
"value": "***HIDDEN***"
},
{
"name": "MYSQL_PASSWORD",
"value": "***HIDDEN***"
},
{
"name": "MYSQL_PORT",
"value": "3306"
},
{
"name": "MYSQL_DATABASE",
"value": "***HIDDEN***"
},
{
"name": "AUDITOR_API_HOST",
"value": "http://api.auditor.svc.cluster.local:3000/auditlog"
},
{
"name": "AUDITOR_TOKEN",
"value": "***HIDDEN***"
},
{
"name": "AUDITOR_PROJECTID",
"value": "dev"
},
{
"name": "PROJECT_NAME",
"value": "cranky-api"
}
],
"resources": {},
"livenessProbe": {
"httpGet": {
"path": "/healthz",
"port": 8005,
"scheme": "HTTP"
},
"initialDelaySeconds": 30,
"timeoutSeconds": 1,
"periodSeconds": 15,
"successThreshold": 1,
"failureThreshold": 2
},
"readinessProbe": {
"httpGet": {
"path": "/healthz",
"port": 8005,
"scheme": "HTTP"
},
"initialDelaySeconds": 5,
"timeoutSeconds": 1,
"periodSeconds": 2,
"successThreshold": 2,
"failureThreshold": 3
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:34Z",
"lastTransitionTime": "2019-07-15T21:15:34Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
},
{
"metadata": {
"name": "front-end",
"namespace": "default",
"selfLink": "/apis/apps/v1/namespaces/default/deployments/front-end",
"uid": "aeabeecb-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197433",
"generation": 1,
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"deployment.kubernetes.io/revision": "1",
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"front-end\",\"namespace\":\"default\"},\"spec\":{\"selector\":{\"matchLabels\":{\"app\":\"front-end\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"front-end\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"}},\"spec\":{\"affinity\":{\"podAntiAffinity\":{\"preferredDuringSchedulingIgnoredDuringExecution\":[{\"podAffinityTerm\":{\"labelSelector\":{\"matchExpressions\":[{\"key\":\"app\",\"operator\":\"In\",\"values\":[\"front-end\"]}]},\"topologyKey\":\"kubernetes.io/hostname\"},\"weight\":2}]}},\"containers\":[{\"image\":\"localhost:32000/front-end:e9a281f7-dirty@sha256:382ed0992abac7e0d7b77ea6a43f0bed9fd5217dcf8550c2433db7037007636c\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"front-end\",\"ports\":[{\"containerPort\":8080,\"name\":\"front-end\"}]}]}}}}\n"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "front-end"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "front-end",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
}
},
"spec": {
"containers": [
{
"name": "front-end",
"image": "localhost:32000/front-end:e9a281f7-dirty@sha256:382ed0992abac7e0d7b77ea6a43f0bed9fd5217dcf8550c2433db7037007636c",
"ports": [
{
"name": "front-end",
"containerPort": 8080,
"protocol": "TCP"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"affinity": {
"podAntiAffinity": {
"preferredDuringSchedulingIgnoredDuringExecution": [
{
"weight": 2,
"podAffinityTerm": {
"labelSelector": {
"matchExpressions": [
{
"key": "app",
"operator": "In",
"values": [
"front-end"
]
}
]
},
"topologyKey": "kubernetes.io/hostname"
}
}
]
}
},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": "25%",
"maxSurge": "25%"
}
},
"revisionHistoryLimit": 10,
"progressDeadlineSeconds": 600
},
"status": {
"observedGeneration": 1,
"replicas": 1,
"updatedReplicas": 1,
"readyReplicas": 1,
"availableReplicas": 1,
"conditions": [
{
"type": "Available",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:41Z",
"lastTransitionTime": "2019-07-15T21:15:41Z",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
},
{
"type": "Progressing",
"status": "True",
"lastUpdateTime": "2019-07-15T21:15:41Z",
"lastTransitionTime": "2019-07-15T21:15:33Z",
"reason": "NewReplicaSetAvailable",
"message": "ReplicaSet \"front-end-54cf6bb649\" has successfully progressed."
}
]
}
},
{
"metadata": {
"name": "lazy-api",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/services/lazy-api",
"uid": "aea94ce2-a745-11e9-8ebd-42010aa8001f",
"resourceVersion": "7197269",
"creationTimestamp": "2019-07-15T21:15:33Z",
"labels": {
"app": "lazy-api",
"app.kubernetes.io/managed-by": "skaffold-v0.32.0",
"skaffold.dev/builder": "local",
"skaffold.dev/cleanup": "true",
"skaffold.dev/deployer": "kustomize",
"skaffold.dev/docker-api-version": "1.39",
"skaffold.dev/tag-policy": "git-commit",
"skaffold.dev/tail": "true"
},
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"lazy-api\",\"app.kubernetes.io/managed-by\":\"skaffold-v0.32.0\",\"skaffold.dev/builder\":\"local\",\"skaffold.dev/cleanup\":\"true\",\"skaffold.dev/deployer\":\"kustomize\",\"skaffold.dev/docker-api-version\":\"1.39\",\"skaffold.dev/tag-policy\":\"git-commit\",\"skaffold.dev/tail\":\"true\"},\"name\":\"lazy-api\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"name\":\"lazy-api\",\"nodePort\":30005,\"port\":8005,\"targetPort\":\"lazy-api\"}],\"selector\":{\"app\":\"lazy-api\"},\"type\":\"NodePort\"}}\n"
}
},
"spec": {
"ports": [
{
"name": "lazy-api",
"protocol": "TCP",
"port": 8005,
"targetPort": "lazy-api",
"nodePort": 30005
}
],
"selector": {
"app": "lazy-api"
},
"type": "NodePort",
"sessionAffinity": "None",
"externalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
{
"auth_dump": [
{
"entity": "osd.0",
"key": "***HIDDEN***",
"caps": {
"mgr": "allow profile osd",
"mon": "allow profile osd",
"osd": "allow *"
}
},
{
"entity": "client.admin",
"key": "***HIDDEN***",
"caps": {
"mds": "allow *",
"mgr": "allow *",
"mon": "allow *",
"osd": "allow *"
}
},
{
"entity": "client.bootstrap-mds",
"key": "***HIDDEN***",
"caps": {
"mon": "allow profile bootstrap-mds"
}
},
{
"entity": "client.rgw.rook.ceph.store.a",
"key": "***HIDDEN***",
"caps": {
"mon": "allow rw",
"osd": "allow rwx"
}
},
{
"entity": "mgr.a",
"key": "***HIDDEN***",
"caps": {
"mds": "allow *",
"mon": "allow profile mgr",
"osd": "allow *"
}
}
]
}
]`
wantRedactionsLen := 43
wantRedactionsCount := 25
t.Run("test default redactors", func(t *testing.T) {
req := require.New(t)
ResetRedactionList() // Ensure clean state before test
redactors, err := getRedactors("testpath")
req.NoError(err)
nextReader := io.Reader(strings.NewReader(original))
for _, r := range redactors {
nextReader = r.Redact(nextReader, "")
}
redacted, err := ioutil.ReadAll(nextReader)
req.NoError(err)
req.JSONEq(expected, string(redacted))
actualRedactions := GetRedactionList()
ResetRedactionList()
req.Len(actualRedactions.ByFile["testpath"], wantRedactionsLen)
req.Len(actualRedactions.ByRedactor, wantRedactionsCount)
ResetRedactionList()
})
}
func Test_redactMatchesPath(t *testing.T) {
type args struct {
path string
redact *troubleshootv1beta2.Redact
}
tests := []struct {
name string
args args
want bool
}{
{
name: "literal path",
args: args{
path: "/my/test/path",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "/my/test/path",
Files: nil,
},
},
},
want: true,
},
{
name: "no path",
args: args{
path: "/my/test/path",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "",
Files: nil,
},
},
},
want: true,
},
{
name: "wrong literal path",
args: args{
path: "/my/test/path",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "/my/test/path/two",
Files: nil,
},
},
},
want: false,
},
{
name: "path with glob",
args: args{
path: "/my/test/path/two",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "/my/test/path/*",
Files: nil,
},
},
},
want: true,
},
{
name: "path with glob in middle",
args: args{
path: "/my/test/path/two",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "/my/test/*/*",
Files: nil,
},
},
},
want: true,
},
{
name: "multiple paths",
args: args{
path: "/my/test/path/two",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "",
Files: []string{
"/not/the/path",
"/my/test/*/*",
},
},
},
},
want: true,
},
{
name: "double glob matching separator",
args: args{
path: "/my/test/path/two",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "/my/test/**",
Files: nil,
},
},
},
want: true,
},
{
name: "single glob does NOT match separator",
args: args{
path: "/my/test/path/two",
redact: &troubleshootv1beta2.Redact{
FileSelector: troubleshootv1beta2.FileSelector{
File: "/my/test/*",
Files: nil,
},
},
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
req := require.New(t)
got, err := redactMatchesPath(tt.args.path, tt.args.redact)
req.NoError(err)
req.Equal(tt.want, got)
})
}
}