Git Product home page Git Product logo

roer's Introduction

roer

END OF LIFE: Roer has been EOL'd. Please use spin instead: https://github.com/spinnaker/spin

A thin CLI for Spinnaker.

This project is aimed to provide a thin, limited client that's suitable for CI environments where you may want to publish Pipeline Templates or update pipeline configurations in Spinnaker. For a CLI to help configure and operate use halyard: config & operating utilities are not in Roer's scope.

You can download the most recent version from the Releases tab.

Usage

Make sure your Spinnaker installation has pipeline-templates enabled:

hal config features edit --pipeline-templates true

Export SPINNAKER_API pointing to your Gate API.

NAME:
   roer - Spinnaker CLI

USAGE:
   main [global options] command [command options] [arguments...]

VERSION:
   dev

COMMANDS:
     pipeline           pipeline tasks
     pipeline-template  pipeline template tasks
     help, h            Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --verbose, -v               show debug messages
   --certPath value, -c value  HTTPS x509 cert path
   --keyPath value, -k value   HTTPS x509 key path
   --version                   print the version

Commands

pipeline-template

NAME:
   roer pipeline-template - pipeline template tasks

USAGE:
   roer pipeline-template  command [command options] [arguments...]

VERSION:
   dev

COMMANDS:
     publish  publish a pipeline template
     plan     validate a pipeline template and or plan a configuration
     convert  converts an existing, non-templated pipeline config into a scaffolded template

Publish template for use:

$ SPINNAKER_API=https://localhost:7002 \
  go run cmd/roer/main.go pipeline-template publish examples/wait-template.yml

Plan a pipeline run using the template (invalid config example):

$ SPINNAKER_API=https://localhost:7002 \
  go run cmd/roer/main.go pipeline-template plan examples/wait-config-invalid.yml
{
  "errors": [
    {
      "location": "configuration:stages.noConfigStanza",
      "message": "Stage configuration is unset",
      "severity": "FATAL"
    },
    {
      "location": "configuration:stages.noConfigStanza",
      "message": "A configuration-defined stage should have either dependsOn or an inject rule defined",
      "severity": "WARN"
    }
  ],
  "message": "Pipeline template is invalid",
  "status": "BAD_REQUEST"
}

Plan a pipeline run using the template (valid config example):

$ SPINNAKER_API=https://localhost:7002 \
  go run cmd/roer/main.go pipeline-template plan examples/wait-config.yml
{
  "application": "spintest",
  "id": "unknown",
  "keepWaitingPipelines": false,
  "limitConcurrent": true,
  "name": "mpt",
  "notifications": [],
  "parameterConfig": [],
  "stages": [
    {
      "id": "947eb68b-1b03-4f33-b7c2-b3fa38eeef94",
      "name": "wait",
      "refId": "wait",
      "requisiteStageRefIds": [],
      "type": "wait",
      "waitTime": 5
    }
  ],
  "trigger": {
    "parameters": {},
    "type": "manual",
    "user": "anonymous"
  }
}

pipeline

Create or update a managed pipeline within an application:

$ SPINNAKER_API=https://localhost:7002 \
  go run cmd/roer/main.go pipeline save examples/wait-config.yml

Development

All dependencies have been vendored into the repository and are managed via govendor. You can sync the deps with govendor sync.

$ go run cmd/roer/main.go

Extending

You can extend the interface, as well as inject your own HTTP client by providing your own main.go. This can be useful if you need to provide custom auth logic, or if you want to add new commands, but not contribute them directly to the project.

roer's People

Contributors

0xflotus avatar ajordens avatar benjaminws avatar cfieber avatar ctompkinson avatar danielpeach avatar davidxia avatar dmivankov avatar dwilliams-kenzan avatar emjburns avatar gardleopard avatar jonsie avatar jtk54 avatar ludokx avatar mikerowehl avatar robzienert avatar sargun avatar varikin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

roer's Issues

Pipeline save command is not working

I ran this command.

env SPINNAKER_API=http://localhost:8084 go run cmd/roer/main.go pipeline save examples/wait-config.yml

it returns exit status 0 but nothing changes in my Spinnaker UI.

How can solve this?

Roer pipeline-template plan failing

Getting the below error while executing the roer pipeline-template plan for a template. Could you please help me in understanding the root cause of the issue?

Template :
Note : Below is not a complete template.

schema: "1"
id: APIUIFeatureCDTemplateV1
metadata:
  name: API/UI CD Template
  description: API/UI Continuous Delivery Pipeline Template
  owner: [email protected]
  scopes:
  - global
variables:
- name: variable1
  description: Variable1
- name: variable2
  description: Variable2
configuration:
  concurrentExecutions:
    limitConcurrent: true
    parallel: false
stages:
- id: deploy
  ...
partials: []

Error :

{
  "error": "Bad Request",
  "errors": [
    {
      "message": "unexpected schema version 'null'",
      "severity": "FATAL"
    }
  ],
  "exception": "com.netflix.spinnaker.kork.web.exceptions.ValidationException",
  "message": "Pipeline template is invalid",
  "status": 400,
  "timestamp": "2018-06-26T07:25:40.749+0000"
}

Basic Auth?

Is there a way to use basic auth with this instead of x509 certs? I have tried configuring this by adding username and password to the SPINNAKER_API environment variable. Thanks a lot!

plan subcommand's docs are misleading

The help message for roer pipeline-template plan are misleading. It says

validate a pipeline template and or plan a configuration",

		Given a pipeline template configuration, a plan operation
		will be run, with either the errors being returned or the
		final pipeline JSON that would be executed. 

But the output of this command isn't the final pipeline that would be produced compared to roer pipeline save. plan's output is missing configuration like triggers. What's the intended use of plan and what would an accurate help message be?

See https://gist.github.com/davidxia/462dfa23b63528ddb12b9caf2cbda039#file-result-of-publishing-and-planning for an example of the difference between plan and save.

Exception when trying to unmarshal response for application creation

When creating an application, the task succeeds but there is an exception when trying to unmarshal the response. Following is the exception message thrown and note where it says json: cannot unmarshal number 1556520132734 into Go struct field ExecutionResponse.buildTime of type int. The field with that value is the build time.

time="2019-04-29T06:42:12Z" level=warning msg="HTTP client not configured with TLS transport"
time="2019-04-29T06:42:12Z" level=info msg="Sending create app task"
time="2019-04-29T06:42:12Z" level=info msg="Waiting for task to complete..." refURL="/tasks/01D9KX8R3YPMT8Z3RBVPM59ZRH"
{"application":"app8","buildTime":1556520132734,"endTime":1556520132847,"execution":{"application":"app8","authentication":{"allowedAccounts":["dockerhub","default"],"user":"anonymous"},"buildTime":1556520132734,"canceled":false,"description":"Create Application: app8","endTime":1556520132847,"id":"01D9KX8R3YPMT8Z3RBVPM59ZRH","initialConfig":{},"keepWaitingPipelines":false,"limitConcurrent":false,"notifications":[],"origin":"api","stages":[{"context":{"application":{"email":"testapp.yml","name":"app8"},"application.name":"app8","newState":{"email":"testapp.yml","name":"app8"},"notification.type":"upsertapplication","parameters":{},"previousState":{"createTs":"1556519970817","email":"testapp.yml","lastModifiedBy":"anonymous","name":"APP8","trafficGuards":[],"updateTs":"1556520110000"},"refId":"0","requisiteStageRefIds":[]},"endTime":1556520132833,"id":"01D9KX8R3Y8VG87KRXGGX6YHCN","name":"createApplication","outputs":{},"refId":"0","requisiteStageRefIds":[],"startTime":1556520132757,"status":"SUCCEEDED","tasks":[{"endTime":1556520132822,"id":"1","implementingClass":"com.netflix.spinnaker.orca.applications.tasks.UpsertApplicationTask","loopEnd":false,"loopStart":false,"name":"createApplication","stageEnd":true,"stageStart":true,"startTime":1556520132761,"status":"SUCCEEDED"}],"type":"createApplication"}],"startTime":1556520132743,"status":"SUCCEEDED","systemNotifications":[],"trigger":{"artifacts":[],"dryRun":false,"notifications":[],"parameters":{},"rebake":false,"resolvedExpectedArtifacts":[],"strategy":false,"type":"manual","user":"anonymous"},"type":"ORCHESTRATION"},"id":"01D9KX8R3YPMT8Z3RBVPM59ZRH","name":"Create Application: app8","startTime":1556520132743,"status":"SUCCEEDED","steps":[{"endTime":1556520132822,"id":"1","implementingClass":"com.netflix.spinnaker.orca.applications.tasks.UpsertApplicationTask","loopEnd":false,"loopStart":false,"name":"createApplication","stageEnd":true,"stageStart":true,"startTime":1556520132761,"status":"SUCCEEDED"}],"variables":[{"key":"notification.type","value":"upsertapplication"},{"key":"requisiteStageRefIds","value":[]},{"key":"application","value":{"email":"testapp.yml","name":"app8"}},{"key":"refId","value":"0"},{"key":"parameters","value":{}},{"key":"newState","value":{"email":"testapp.yml","name":"app8"}},{"key":"application.name","value":"app8"},{"key":"previousState","value":{"createTs":"1556519970817","email":"testapp.yml","lastModifiedBy":"anonymous","name":"APP8","trafficGuards":[],"updateTs":"1556520110000"}}]}
json: cannot unmarshal number 1556520132734 into Go struct field ExecutionResponse.buildTime of type int
failed unmarshaling task status response
github.com/spinnaker/roer/spinnaker.(*client).GetTask
/Users/rzienert/go/src/github.com/spinnaker/roer/spinnaker/client.go:281
github.com/spinnaker/roer/spinnaker.(*client).PollTaskStatus
/Users/rzienert/go/src/github.com/spinnaker/roer/spinnaker/client.go:295
github.com/spinnaker/roer.AppCreateAction.func1
/Users/rzienert/go/src/github.com/spinnaker/roer/actions.go:96
github.com/spinnaker/roer/vendor/github.com/urfave/cli.HandleAction
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:483
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:193
github.com/spinnaker/roer/vendor/github.com/urfave/cli.(*App).RunAsSubcommand
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:374
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.startApp
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:280
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:79
github.com/spinnaker/roer/vendor/github.com/urfave/cli.(*App).Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:250
main.main
/Users/rzienert/go/src/github.com/spinnaker/roer/cmd/roer/main.go:25
runtime.main
/usr/local/Cellar/go/1.8.3/libexec/src/runtime/proc.go:185
runtime.goexit
/usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_386.s:1629
failed polling task status
github.com/spinnaker/roer/spinnaker.(*client).PollTaskStatus
/Users/rzienert/go/src/github.com/spinnaker/roer/spinnaker/client.go:297
github.com/spinnaker/roer.AppCreateAction.func1
/Users/rzienert/go/src/github.com/spinnaker/roer/actions.go:96
github.com/spinnaker/roer/vendor/github.com/urfave/cli.HandleAction
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:483
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:193
github.com/spinnaker/roer/vendor/github.com/urfave/cli.(*App).RunAsSubcommand
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:374
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.startApp
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:280
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:79
github.com/spinnaker/roer/vendor/github.com/urfave/cli.(*App).Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:250
main.main
/Users/rzienert/go/src/github.com/spinnaker/roer/cmd/roer/main.go:25
runtime.main
/usr/local/Cellar/go/1.8.3/libexec/src/runtime/proc.go:185
runtime.goexit
/usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_386.s:1629
poll create app status
github.com/spinnaker/roer.AppCreateAction.func1
/Users/rzienert/go/src/github.com/spinnaker/roer/actions.go:98
github.com/spinnaker/roer/vendor/github.com/urfave/cli.HandleAction
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:483
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:193
github.com/spinnaker/roer/vendor/github.com/urfave/cli.(*App).RunAsSubcommand
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:374
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.startApp
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:280
github.com/spinnaker/roer/vendor/github.com/urfave/cli.Command.Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/command.go:79
github.com/spinnaker/roer/vendor/github.com/urfave/cli.(*App).Run
/Users/rzienert/go/src/github.com/spinnaker/roer/vendor/github.com/urfave/cli/app.go:250
main.main
/Users/rzienert/go/src/github.com/spinnaker/roer/cmd/roer/main.go:25
runtime.main
/usr/local/Cellar/go/1.8.3/libexec/src/runtime/proc.go:185
runtime.goexit
/usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_386.s:1629

The requested URL /pipelines/start was not found on this server

I am trying to validate the template file but getting the URL not found error. Can someone please help me in solving this issue?

Command :
SPINNAKER_API=http://localhost:9000 go run cmd/roer/main.go pipeline-template plan examples/wait-config.yml

Spinnaker Version : 1.5.4

Error Log :

WARN[0000] HTTP client not configured with TLS transport 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /pipelines/start was not found on this server.</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at localhost Port 9000</address>
</body></html>

plan request failed
github.com/spinnaker/roer/spinnaker.(*client).Plan

FATA 00002 - can't interract with spinnaker

Hi all,
When i run the following command
roer pipeline-template convert jenkins jenkins-from-docker

i receive

FATA[0002] getting pipeline config: failed unmarshaling pipeline config response: invalid character '<' 
looking for beginning of value

Do you have any idea about what could happen ?

Thank you for your help.

Override default timeout

Background

$ ./roer-darwin-amd64 --version
roer version 0.9.3

Current Behavior

$ ./roer-darwin-amd64 -v pipeline-template publish ../templates/spring-base-v1.yaml
DEBU[0000] Reading template                              file=../templates/spring-base-v1.yaml
INFO[0000] Publishing template
INFO[0000] Waiting for task to complete...               refURL=/tasks/df21a778-29b3-446f-80f2-f302a9e81ffc
DEBU[0001] Polling task                                  status=RUNNING
DEBU[0002] Polling task                                  status=RUNNING
...
# Polling task repeats for about a minute or so
[0059] Polling task                                  status=RUNNING

The above command appears to timeout without an error message.

$ echo $?
1

Desired Behavior

  1. An error message should be displayed for the non-zero exit code
  2. If this is a timeout issue, I would like to override the timeout

yaml templates values "" are changed into null when published

I have a spinnaker deploy step that deploys a kubernetes chart saved within (manifest source: text)
When I try to publish the pipeline template file the line under apiGroups with "" is replaced by "null" at one line and in the second line, apiGroups is deleted (because the value is null). But kubernetes chart requires the presence of apiGroups to work correctly, and value should be equal to ""

I tried different things including '', "", ~, [].... But was not able to get the needed ""
any ideas? or suggestions?

schema: "1"
id: kubernetes-job
protect: false
metadata:
description: This template does not have a description
name: kubernetes-job
owner: [email protected]
scopes:

  • myappname
    variables:
    configuration:
    parameters:
    stages:
  • config:
    account: dev
    cloudProvider: kubernetes
    manifestArtifactAccount: embedded-artifact
    manifests:
    • apiVersion: batch/v1
      kind: Job
      metadata:
      name: maintenance-job
      namespace: myns
      spec:
      completions: 1
      template:
      metadata:
      name: my-job
      spec:
      containers:
      - command:
      - bash
      - bashscript.sh
      image: docker.image.com
      name: mycontainer
      restartPolicy: Never
    • apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: Role
      metadata:
      name: run-role-job
      namespace: myns
      rules:
      • apiGroups:
        • ""
        • extensions
        • apps
          resources:
        • deployments
        • configmaps
        • services
        • ingresses
        • secrets
          verbs:
        • get
        • list
        • delete
    • apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: run-maintenance
      namespace: myns
      roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: run-role-maintenance
      subjects:
      • apiGroup: ""
        kind: ServiceAccount
        name: default
        namespace: myns
        moniker:
        app: myapp
        relationships:
        loadBalancers: []
        securityGroups: []
        source: text
        dependsOn:
    • deleteManifest2
      id: deployManifest1
      inheritanceControl: {}
      inject: {}
      name: Deploy (Manifest
      type: deployManifest
  • config:
    account: dev
    cloudProvider: kubernetes
    kinds:
    • job
      location: myns
      manifestName: my-best-job
      options:
      cascading: true
      id: deleteManifest2
      inheritanceControl: {}
      inject: {}
      name: Delete (Manifest)
      type: deleteManifest

pipeline-template publish is removing double quotas around some variable

I have a strange problem that I couldn't figure out why. when using roer pipeline-template publish for publishing a template, it is removing some of double quotas from variables (boolean and integer), and because of this behaviour, deployment fails. let me explain with an example

This is the part of the template file

            containers:
              - image: "wurstmeister/kafka:1.1.0"
                name: kafka
                env:
                - name: "KAFKA_AUTO_CREATE_TOPICS_ENABLE"
                  value: "true"
                - name: "KAFKA_BROKER_ID"
                  value: "1"
                - name: "KAFKA_MESSAGE_MAX_BYTES"
                  value: "20000000"
                - name: "KAFKA_ADVERTISED_HOST_NAME"
                  value: "kafka"
                - name: "KAFKA_CREATE_TOPICS"
                  value: "event:1:1"
                - name: "KAFKA_ZOOKEEPER_CONNECT"
                  value: "zookeeper:2181/kafka"

This is the publish method

roer pipeline-template publish deploy-template.yml
INFO[0000] Publishing template
INFO[0000] Waiting for task to complete...               refURL=/tasks/****
INFO[0002] Pipeline has completed
INFO[0002] Task completed                                status=SUCCEEDED

This is the pipeline configuration after publish

        containers:
          - env:
              - name: KAFKA_AUTO_CREATE_TOPICS_ENABLE
                value: true
              - name: KAFKA_BROKER_ID
                value: 1
              - name: KAFKA_MESSAGE_MAX_BYTES
                value: 20000000
              - name: KAFKA_ADVERTISED_HOST_NAME
                value: kafka
              - name: KAFKA_CREATE_TOPICS
                value: 'event:1:1'
              - name: KAFKA_ZOOKEEPER_CONNECT
                value: 'zookeeper:2181/kafka'
            image: 'wurstmeister/kafka:1.1.0'

deployment fails, because publish removes double quotas aroound true,1 and 20000000

Is there a workaround for publish not to remove double quotas or replace it with single quotas like it does to other variables?

Pipeline template publish with webhook trigger isn`t working

How can I write webhook trigger pipeline with yml?
Am I making in yml or something wrong in spinnaker or roer?

It always be blank. I used pipeline save command.

My template.yml is here.
I created this yml by running roer pipeline convert and created a yml file from the output..

This is the pipeline a used to create a yml output.

image

I ran

env SPINNAKER_API=http://localhost:8084 go run cmd/hank/main.go pipeline-template convert testappfromgui webhooktrigger

The output is here.

configuration:
  concurrentExecutions:
    limitConcurrent: true
    parallel: false
  triggers:
  - enabled: true
    name: unnamed0
    payloadConstraints:
      tag: .*
    source: webhook
    type: webhook
id: testappfromgui-webhooktrigger
metadata:
  description: This template does not have a description
  name: webhooktrigger
  owner: anonymous
  scopes:
  - testappfromgui
protect: false
schema: "1"
stages: []

I used this yml for pipeline-template publish and it is not working.
And the result on the UI is this.

image

Add tail execution command

The client already has the ability to tail an execution, update the library to allow tailing an execution, outputting the state (or more likely a subset of its state?) on an interval until a completed state or a timeout occurs.

My Publish will no be affected on spinnaker

I made a GCE instance with cloud laucher.
Then I connected to this by ssh and port forward.

gcloud compute ssh --project={PROJECT] --zone=asia-northeast1-a [INSTANCE_NAME] -- -L 9000:localhost:9000  -L 8084:localhost:8084

The GUI is working good and I could execute pipeline created with the UI.

I wanted to program my pipeline so I ran this command

env SPINNAKER_API=http://localhost:8084 \
go run cmd/roer/main.go pipeline-template publish examples/wait-template.yml

This returns this log but nothing is changed on the UI.

INFO[0000] Publishing template
INFO[0000] Waiting for task to complete...               refURL=/tasks/ac11a77c-2222-4e18-93dd-f017f7fbef6e
INFO[0001] Pipeline has completed
INFO[0001] Task completed                                status=SUCCEEDED

I you tell me how I can fix this?

My version of roer is dev.

Provide OAuth Token

How can I provide an oauth token?
roer is always redirected to the login page

Error creating Pipelines

When I'm creating a new pipeline with:

SESSION="{Session Cookie}"
roer --as $SSESION app create $file_config path/something

Appear this error
FATA[0000] searching for existing pipeline config: get pipeline config failed

I used to use the same script and worked but it stopped working.

Unsupported Schema

I have everything running correctly, when I tried to run this command below got the error:

go run cmd/roer/main.go pipeline-template publish examples/wait-template.yml

INFO[0000] Publishing template
FATA[0000] publishing template: unable to check status of template: posting to /pipelineTemplates/wait: Get /pipelineTemplates/wait: unsupported protocol scheme ""
exit status 1

Roer cannot read private keys that have passphrases

While trying to run roer against our Spinnaker instance, I hit this error:

tls: failed to parse private key
loading x509 keypair
github.com/spinnaker/roer/spinnaker.DefaultHTTPClientFactory
	/Users/tnelson/go/src/github.com/spinnaker/roer/spinnaker/http.go:55

(Rest of stacktrace omitted for brevity's sake)

This is related to the use of tls.LoadX509KeyPair as mentioned here: golang/go#10181

roer should have an option to specify a passphrase for key files that need them.

roer and IAP

We have IAP (Identity-Aware Proxy) enabled in our spinnaker setup.
Is there anyway for roer to have permission to connect to SpinnakerAPI?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.