HN user

impl

82 karma

Hi. I work for Perforce, the old-school VCS company. I also like municipal broadband.

GitHub: https://github.com/impl

E-mail me: noah@perforce.com (work) / noah@noahfontes.com (personal)

Posts0
Comments20
View on HN
No posts found.

No. When you finance a car the lender gets a lien on the title. The title is still in your name. Usually one of the stipulations the lender places in their contract is that they hold the title for you in what is effectively "escrow" until the loan is paid off. Then they release the lien and send you your title.

The reason they do that is because a lien gives them the ability to, within a particular legal framework, get ownership of the car if you don't pay your loan, prevent the title from being transferred to someone they don't trust, etc. It's basically just risk mitigation.

This is cool. I like the frontend aspect. Looks really handy for a lot of apps where integration with other services is a core feature (I've built several just over the past few years, so I definitely get it).

I do wish it supported encrypted storage. For example, I wrote/maintain a Vault plugin to do basically the same work as the backend side of this project[0]. I wonder if you would be interested in supporting Vault as a backend in addition to PostgreSQL down the line? Feel free to reach out if so.

To answer your question:

Like some others here, I haven't found the actual integration points to be terribly difficult with most OAuth 2 servers. Once you have a token, you can call their APIs. No problem. I wrote the Vault plugin I referenced above to basically just do automatic refreshes without ever exposing client secrets/refresh tokens to our services, and it works fine.

Rather our customers would get into situations where they inadvertently revoked access, the user that authorized the integration initially left the company and it was automatically disabled, etc. and there was no notification that it happened. Basically all of the lifecycle management side that couldn't be automated down to "refresh my token when it's about to expire" sucked. So anything you're looking to support there would be a huge value-add IMO.

Another one is that each provider has their own scope definitions/mapping to their APIs. Some scopes subsume others (e.g. GitHub has all repos, public repos, org admin, org read-only, etc.). Some get deprecated and need to be replaced with others on the next auth attempt. We could never keep them up to date because they were usually just part of docs, not enumerated through some API somewhere. If you had a way to provide the user with a way to see and select those scopes in advance, that would be huge. Think if my app or a user could answer the question "I want to call this API endpoint, what scopes do I need?" by just asking your service to figure it out.

[0] https://github.com/puppetlabs/vault-plugin-secrets-oauthapp

Relay by Puppet | Senior Software Engineer | Portland, OR or remote (5 hour overlap with Pacific Time) | Full-time | https://puppet.com and https://relay.sh

Hi!

Relay is Puppet's fast-moving SaaS/PaaS endeavor into the cloud-native arena. Relay is an event-driven workflow execution engine that helps connect service APIs and infrastructure.

We're looking for a senior-level backend engineer[0] keen on DevOps and security to make our workflow execution system robust and powerful. Our stack is pragmatic: lots of Go, Kubernetes (we run untrusted user-specified containers), Tekton, Knative, all in GCP.

In non-pandemic times, Puppet has a sweet office in downtown Portland (but you're welcome to remain remote, too). We're a friendly bunch (well, I'd like to think so anyway) and we're absolutely committed to making our customers' lives better every day. If this sounds like something you'd be interested in, please apply!

And if you have any questions or just want to chat, feel free to shoot me an email at noah@puppet.com.

(Note: No recruiters, please.)

[0] https://puppet.com/company/careers/jobs/2808521

Puppet | Senior Software Engineer | Portland, OR or remote (5 hour overlap with Pacific Time) | Full-time | https://puppet.com

Hi!

Relay[0] is Puppet's fast-moving SaaS/PaaS endeavor into the cloud-native arena. Relay is an event-driven workflow execution engine that helps connect service APIs and infrastructure.

We're looking for a senior-level backend engineer[0] keen on DevOps and security to make our workflow execution system robust and powerful. Our stack is pragmatic: lots of Go, Kubernetes (we run untrusted user-specified containers), Tekton, Knative, all in GCP.

In non-pandemic times, Puppet has a sweet office in downtown Portland (but you're welcome to remain remote, too). We're a friendly bunch (well, I'd like to think so anyway) and we're absolutely committed to making our customers' lives better every day. If this sounds like something you'd be interested in, please apply!

And if you have any questions or just want to chat, feel free to shoot me an email at noah@puppet.com.

[0] https://relay.sh

[1] https://puppet.com/company/careers/jobs/2808521

Hi,

I wrote an SSH step for you. Here's the source code:

https://github.com/relay-integrations/relay-ssh/blob/master/...

And since it isn't documented yet, here's how you would use it in a workflow:

  steps:
  - name: ssh
    image: relaysh/ssh-step-exec
    spec:
      connection: !Connection {type: ssh, name: my-ssh-connection}
      username: relay
      port: 2222 # defaults to 22
      knownHosts: |
        server1.example.com ssh-rsa AAAAEXAMPLE
        server2.example.com ssh-rsa AAAANOTHEREXAMPLE
      # or
      #strictHostKeyChecking: false
      on:
      - server1.example.com
      - server2.example.com
      input:
      - whoami
      - uptime
      - cat /etc/passwd
Please feel free to shoot me an email (check my profile) and I'd be happy to help write a workflow for your use case with you!

We do have a Helm integration that might be able to help you out: https://relay.sh/integrations/helm/

The limiting factor right now would be whether your cluster is accessible to the internet, which of course isn't super common. We are working through what our story for connecting to on-prem infrastructure looks like, so if you can provide any additional details on your environment, it would be helpful!

Hi,

This is a good question, thank you! The flow of events into our system is somewhat different than GitHub Actions. We're trying to be a consumer of all sorts of events, including, say, data published to AWS SNS or via a Docker Hub webhook[0]. All of that isn't quite in place yet, but we want to act more like an event broker than a CI/CD solution alone.

One concept we're throwing around is supporting CloudEvents[1] and dispatching workflows based on event types. If anyone has experience with CloudEvents we'd love to hear if that would be something useful to you.

[0] https://github.com/relay-integrations/relay-dockerhub/blob/m...

[1] https://cloudevents.io/

1) Please, please support some other config file other than just YAML.

Although we don't directly advertise it, you can in fact write a workflow in JSON and there's an underlying JSON interchange format that is authoritative in our system. We expect that any other languages we support would "compile" to this JSON format. What other languages are interesting to you? We've looked at CUE[0], HCL, and of course Puppet itself.

[0] https://cuelang.org/

Right, but this project doesn't solve that problem, either. It wraps the underlying collection in a builder to make it less easy to access, but it doesn't appear that it places any additional restrictions on the types of members or collection elements (from the generated code on their site anyway).

If you weren't using this library, you could achieve something similar with, e.g.,

  someImmutableSet = Collections.unmodifiableSet(new HashSet<E>(someSet));
I think this library really is about making immutable objects accessible, i.e., taking away the boiler plate. Hand-writing immutable (and potentially mutable) implementations on top of interfaces for a whole set of DTOs is super annoying.