This simplifies the stand-up of a sandbox:
Only 2 main Vagrant calls are now needed (`vagrant up` and `vagrant up machine1`). This PR only updates the Vagrant Virtualbox setup. The Vagrant Libvirt and Terraform still need to be updated. This uses docker-compose as the entry point for standing up the stack and makes the stand-up of the sandbox more portal. Vagrant and Terraform are only responsible for standing up infrastructure and then running docker-compose, not for running any glue scripts. The docker-compose calls out to single-shot services to do all the glue required to get the fully functional Tinkerbell stack up and running. All the single-shot services are idempotent. This increases portability and the development iteration loop. This also simplifies the required steps needed to get a fully functioning sandbox up and running. This is intended to help people looking to get started by getting them to a provisioned machine quicker and more easily. Signed-off-by: Jacob Weinstock <jakobweinstock@gmail.com>
This commit is contained in:
		
							
								
								
									
										76
									
								
								releases/cmd/getbinariesfromquay/docker/image.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								releases/cmd/getbinariesfromquay/docker/image.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| package docker | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"github.com/containers/image/v5/copy" | ||||
| 	"github.com/containers/image/v5/manifest" | ||||
| 	"github.com/containers/image/v5/signature" | ||||
| 	"github.com/containers/image/v5/transports/alltransports" | ||||
| 	"github.com/containers/image/v5/types" | ||||
| ) | ||||
|  | ||||
| type Image struct { | ||||
| 	src types.ImageSource | ||||
| 	ref types.ImageReference | ||||
| 	sys *types.SystemContext | ||||
| } | ||||
|  | ||||
| func ImageFromName(ctx context.Context, sys *types.SystemContext, name string) (*Image, error) { | ||||
| 	imageRef, err := alltransports.ParseImageName(name) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	src, err := imageRef.NewImageSource(ctx, sys) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &Image{ | ||||
| 		src: src, | ||||
| 		ref: imageRef, | ||||
| 		sys: sys, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func (img *Image) GetManifest(ctx context.Context) ([]byte, string, error) { | ||||
| 	rawManifest, _, err := img.src.GetManifest(ctx, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, "", err | ||||
| 	} | ||||
| 	return rawManifest, manifest.GuessMIMEType(rawManifest), nil | ||||
| } | ||||
|  | ||||
| func (img *Image) Copy(ctx context.Context, dst string) error { | ||||
| 	destRef, err := alltransports.ParseImageName(dst) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	pc, err := signature.NewPolicyContext(&signature.Policy{ | ||||
| 		Default: []signature.PolicyRequirement{ | ||||
| 			signature.NewPRInsecureAcceptAnything(), | ||||
| 		}, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = copy.Image(ctx, pc, destRef, img.ref, ©.Options{SourceCtx: img.sys}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type SchemaV2List struct { | ||||
| 	MediaType     string `json:"mediaType"` | ||||
| 	SchemaVersion int    `json:"schemaVersion"` | ||||
| 	Manifests     []struct { | ||||
| 		MediaType string `json:"mediaType"` | ||||
| 		Digest    string `json:"digest"` | ||||
| 		Size      int    `json:"size"` | ||||
| 		Platform  struct { | ||||
| 			Architecture string `json:"architecture"` | ||||
| 			Os           string `json:"os"` | ||||
| 			Variant      string `json:"variant"` | ||||
| 		} `json:"platform,omitempty"` | ||||
| 	} `json:"manifests"` | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Jacob Weinstock
					Jacob Weinstock