-
Notifications
You must be signed in to change notification settings - Fork 845
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Resource Groups #210
Comments
Hi there! We use Pivotal Tracker to provide visibility into what our team is working on. A story for this issue has been automatically created. The current status is as follows:
This comment, as well as the labels on the issue, will be automatically updated as the status in Tracker changes. |
@dliebreich What do you think of this instead of Airfreight? |
I'm not sure how the example yml and json describes the solution. Otherwise, conceptually, it seems like it would meet our needs. One problem I can foresee is that you need to have the component resource configs match in the producer of the group and in the consumer of the group. If different teams maintained the producer and the consumer, that coordination might be somewhat expensive. |
For the purposes of integrating releases for Cloud Foundry (and this generalizes to any BOSH-deployed service composed of many releases), we require:
We accomplish this like so: https://github.com/cloudfoundry/cf-deployment/blob/master/blessed_versions.json We maintain our own code for writing and reading this artifact because it needs to be used (at least read) outside the context of Concourse. We also specifically do not want to fetch the resources referenced in that |
+1 on not fetching all the resources in a group. We would group the ops manager images and stemcells for each of the 4 IaaSs with the .pivotal file, but we would only want the one stemcell and one ops manager for the IaaS we are testing in that pipeline. |
Here's a more fleshed out example: resources:
- name: aws-stemcell
type: bosh-io-stemcell
source: {...}
- name: vsphere-stemcell
type: bosh-io-stemcell
source: {...}
- name: cf-release
type: bosh-io-release
source: {...}
- name: diego-release
type: bosh-io-release
source: {...}
resource_groups:
- name: diego-cf-compat
type: s3
source: {...}
resources: [cf-release, diego-release]
- name: cf-stemcell-compat
type: s3
source: {...}
resources: [cf-release, vsphere-stemcell, aws-stemcell]
jobs:
- name: something-with-cf-and-diego-on-aws
plan:
- aggregate:
- get: cf-release
groups: [diego-cf-compat, cf-stemcell-compat]
- get: diego-release
groups: [diego-cf-compat]
- get: aws-stemcell
groups: [cf-stemcell-compat] So, you could pick and choose what parts of the tuple you actually want, and you're still dealing with regular old Concourse resources, rather than passing around giant "union tarballs" or something. If you wanted to just produce URLs for the director to upload that would be done on a resource-by-resource basis, i.e. a param telling the resource to just give you the URL and not download it (which a few already support). Notes:
|
For our use case, not sure how much this buys us. We need to extract the On Thu, Nov 26, 2015 at 9:41 AM, Alex Suraci notifications@github.com
|
Let's just store the information for this in Git. We're familiar with it now and it's much easier for a human to look at diffs and the GitHub web interface than S3. I'm liking the Alex's syntax proposal above. @Amit-PivotalLabs I don't understand. Can you give an example of your workflow? |
@vito How would you |
The key point here is we don't need to get the resources, we sorta just need the data in the file backing the git repo backing the |
For the artifacts your team publishes at the end of the day, this won't be a silver bullet. For determining that set of outputs in the first place though, it could make your lives a bit easier. For example, if each team consistently reported the tuple of versions that worked together, mega's CI could just operate on the intersections for whatever deployment configurations you're concerned with. Disclaimer: no idea how you're determining these tuples today. If it's based on diego-cf-compatibility I'd expect that to be replaced with this resource groups feature instead. Not sure if other compatibility matrices currently exist. That being said, it'd be pretty easy to write the function from the individual resources to your own format. Which seems like a useful thing generically. The point behind not having the tuple's format be the focal point is to have the pipeline usage just mirror the semantics of If all you need is metadata, it's up to the resources to support that, e.g. the S3 resource will give you |
We discussed this problem on an unsuccessful hackday effort, calling it "correlated resources". If you think of a Concourse pipeline as a function, right now it doesn't allow you to control all the parameters at once. You can vary each individually, once, but backing up to try permutations is difficult (does We're interested in this problem because we want to develop an "approvals" resource -- a resource representing human approval of versions of other resources. So if I have a git SHA To achieve this, there needs to be a way to tell Concourse to treat correlated resources as a single unit. This also feeds into a larger discussion, which is inverting the UI emphasis from job to resource. The UI shows the state of the world as the integral of the stream of all resources coming into the system. However, what is interesting is the differential -- what the pipeline looks for this particular set of resources. This data is available but requires sleuthing to reconstruct. |
/cc @kimeberz for the differential UI - I've thought the same, and want to redo the resources page to be a lot more useful for data ingestion (including potentially having a page for viewing a particular version) |
[finishes #127219723] Submodule src/github.com/concourse/atc 1ee1c48..a3023dd: > ginkgo blur reoreded everything > return all public pipelines on GetAllPipelines endpoint > only check for basic auth on get token endpoint > do not default team name to main if not provided > do not default team name to main in api Submodule src/github.com/concourse/fly cb98e4c..3269297: > make --team-name required > retrieves token if there is no auth method set Submodule src/github.com/concourse/testflight fdd0c3f..abd306e: > do not default team name to 'main' Submodule src/github.com/onsi/ginkgo e43390e..74c678d: > Make JUnit reporter include failure location in message. (#262) > remove 1.4 from travis.yml > Add gcflags option (#276) > Revert "Use the go1.5 build tag to handle vendor exceptions" (#274) > Merge pull request #272 from fsouza/fix-vendor > Add flaky test mitigation (#261) > Allow units and precision in benchmark (#266) > Add Solaris support (#264) > Merge pull request #259 from kwadrat/master > Merge branch 'apvail-spell-fix' > Fix go16 vendor > Merge pull request #250 from james-lawrence/master > Merge pull request #228 from jayunit100/RegexFileNameFiltering > Fix test flakiness > Merge pull request #235 from mboersma/fix-travis > fix compilation on older versions of go > fix issue where packages that reference vendored dependencies weren't compiling > Merge pull request #216 from sha1sum/master > Merge pull request #209 from luxas/build_on_arm64 > Merge pull request #212 from cfmobile/master > Merge pull request #210 from cfmobile/master Submodule src/github.com/onsi/gomega 2152b45..9ed8da1: > Merge pull request #166 from trayo/patch-2 > Merge pull request #164 from wendorf/assert_typo > Merge remote-tracking branch 'origin/pr/163' > Merge pull request #160 from tinygrasshopper/fix_failing_close_ghttp > Merge pull request #150 from tinygrasshopper/build-fix > Merge pull request #159 from WesleyJeanette/patch-1 > Merge pull request #157 from kwadrat/master > Merge pull request #141 from mariantalla/gomega-yaml-matcher > Reset tmpDir in gexec.CleanupBuildArtifacts > Update test description for match json tests. > Make the error message for expected JSON values having the wrong type accurate > Merge pull request #133 from tjarratt/be-identical-to-matcher > Merge pull request #132 from tjarratt/improve-match-json-error-message > Merge pull request #128 from tinygrasshopper/have-cap > drop 1.4 from travis > ghttp tests should now pass in 1.6 > CloseClientConnections test uses http.Post instead of http.Get to avoid retries > add tip to .travis.yml > Merge pull request #125 from cfmobile/master > Merge pull request #122 from cfmobile/master > Merge pull request #119 from jim-slattery-rs/gitignore_idea > Merge pull request #118 from jim-slattery-rs/fix_up_succeed Signed-off-by: Yucheng Tu <ytu@pivotal.io>
think we're headed towards #684 as a general solution that would allow for this kind of workflow. closing this to consolidate. |
Problem
BOSH core team runs a pipeline to produce a bosh release and bosh cli gem combination. It also tests them against a specific version of bats git repo.
BOSH cpi team runs a pipeline that expects to consume bosh release, cli gem and bats repo combination so that it can test it all against a specific version of cpi release. Ultimately this pipeline publishes a new cpi release referencing other asset versions.
We would like to capture group of resource versions instead of just individual resource versions, so that cpi team's pipeline can run against a specific set of resources that passed core team's pipeline.
Other examples:
Proposal
I think concourse should introduce a new primitive for specifying resource groups. Resource groups would be versioned similarly to any other resource. Builds would be able to produce a resource group version and consume specific resource group version.
In UI this could look like a box around multiple resources to indicate that they come as a whole.
Resources mentioned in a resource group are not any different from any other resources. They will be configured with all the other resources and have exactly same semantics.
Backing store for resource groups could work similarly to any resource's backing store. For example concourse release can include s3_resource_group that stores and retrieves files from a bucket just like s3_resource.
Contents of each resource group will only include versions for other resources so that storage/retrieval is delegated to each resource. For example contents of v1 of core-assets resource group will be:
candidate-core-assets-bucket/core-asset-1.json
(json in yaml)
Possible configuration in the pipeline:
I'll skip details of how concourse will be able to fetch specific versions of group's resources and its api format.
The text was updated successfully, but these errors were encountered: