{"id":20000198,"url":"https://github.com/crc-org/crc-cloud","last_synced_at":"2025-07-25T23:04:19.568Z","repository":{"id":64827473,"uuid":"577654625","full_name":"crc-org/crc-cloud","owner":"crc-org","description":"Disposable OpenShift instances on cloud in minutes","archived":false,"fork":false,"pushed_at":"2025-05-14T12:59:20.000Z","size":14929,"stargazers_count":32,"open_issues_count":27,"forks_count":20,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-14T13:59:52.364Z","etag":null,"topics":["cloud","cloud-computing","containers","containers-platform","openshift","openshift-cluster"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crc-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-13T08:18:48.000Z","updated_at":"2025-05-14T12:59:25.000Z","dependencies_parsed_at":"2023-02-18T05:05:38.580Z","dependency_job_id":"64514ab1-ca37-470f-81ec-7eb1c79badbe","html_url":"https://github.com/crc-org/crc-cloud","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/crc-org/crc-cloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crc-org%2Fcrc-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crc-org%2Fcrc-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crc-org%2Fcrc-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crc-org%2Fcrc-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crc-org","download_url":"https://codeload.github.com/crc-org/crc-cloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crc-org%2Fcrc-cloud/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267078867,"owners_count":24032317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud","cloud-computing","containers","containers-platform","openshift","openshift-cluster"],"created_at":"2024-11-13T05:14:02.113Z","updated_at":"2025-07-25T23:04:19.511Z","avatar_url":"https://github.com/crc-org.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CRC Cloud - Runs Containers in the Cloud\n\n## Disposable OpenShift instances on cloud in minutes\n\n![CRC Cloud](assets/crc-cloud.png)\n\nThis project is stumbled upon [OpenSpot](https://github.com/ksingh7/openspot) made by [@ksingh7](https://github.com/ksingh7) and all the improvements made by [@tsebastiani](https://github.com/tsebastiani) creating the next generation for openspot were he got rid off bare metal hard requirement for running the single-node cluster on the cloud.\n\n## Disclaimer\n\nThis project has been developed for **experimental** purpose only and it's not **absolutely** meant to run production clusters.\n\nThe authors are not responsible in any manner of any cost on which the user may incur for inexperience or software failure.\n\nBefore running the script **be sure** to have an adequate experience to safely create and destroy resources on AWS or any other cloud provider that will be supported **without** the help of this software in order to recover **manually** from possible issues.\n\n## Overview  \n\nThis is a side project of [`Openshift Local` formerly `CRC`](https://github.com/crc-org), while `CRC` and `crc cli` main purpose is spin `Openshift Single Node` clusters on local development environments (it works multi-platform and multi-arch), `crc-cloud` will offer those clusters on cloud (multi-provider).\n\nThe following diagram shows what is the expected interaction between an user of `crc-cloud` and the assets provided by `CRC`:\n\n![crc-cloud flow](docs/crc-cloud-flow.svg?raw=true)\n\n## Usage\n\nTo facilite the usage of `crc-cloud`, a [container image](https://quay.io/repository/crcont/crc-cloud) is offered with all required dependecies. Using the container all 3 supported operation can be executed\n\n### Authetication  \n\nAll operations require to set the authentication mechanism in place.\n\nAs so any `aws` authentication mechanism is supported by `crc-cloud`:\n\n- long term credentials `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` as environment variables  \n- short lived credentials (in addition to `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` would require `AWS_SESSION_TOKEN`)\n- credentials on config file (default file ~/.aws/config), in case of multiple profiles it will also accepts `AWS_PROFILE`\n\nAs so any `gcp` authentication mechanism is supported by `crc-cloud`:\n\n- Credentials `GOOGLE_APPLICATION_CREDENTIALS` as environment variable\n- Project ID `GCLOUD_PROJECT` as environment variable\n- Region `GCLOUD_REGION` as environment variable\n- Zone `GCLOUD_ZONE` as environment variable\n\nAs so any `openstack` authentication mechanism is supported by `crc-cloud`:\n\n- `OS_CLIENT_CONFIG_FILE` as environment variable to select cloud yaml file which have details about the openstack cloud\n  - https://docs.openstack.org/os-client-config/1.24.0/\n- `OS_CLOUD` as environment variable to select the cloud from the cloud yaml file\n\n### Restrictions\n\n**Note**: `import` operation is not supported on `gcp` and `openstack` provider. \n\nAs of now please use following manual steps to import the image on `gcp`:\n```bash\n# Download the required bundle from https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/crc/bundles/openshift/\ncurl -L -O https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.14.3/crc_libvirt_4.14.3_amd64.crcbundle\n# Extract the bundle\ntar -xvf crc_libvirt_4.14.3_amd64.crcbundle \u0026\u0026 cd crc_libvirt_4.14.3_amd64\n# Convert the qcow2 image to raw\nqemu-img convert crc.qcow2 disk.raw\n# Compress the raw image to tar.gz\ntar --format=oldgnu -Sczf /tmp/crc.tar.gz disk.raw\n# Upload the tar.gz to GCS\ngsutil cp /tmp/crc.tar.gz gs://crc-bundle-github-ci\n# Create the image on GCP\ngcloud compute images create crc --source-uri  gs://crc-bundle-github-ci/crc.tar.gz\n# List the images and check for crc one\ngcloud compute images list --no-standard-images | grep crc\n```\n\nAs of now please use following manual steps to import the image on `openstack`:\n```bash\n# Download the required bundle from https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/crc/bundles/openshift/\ncurl -L -O https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.14.3/crc_libvirt_4.14.3_amd64.crcbundle\n# Extract the bundle\ntar -xvf crc_libvirt_4.14.3_amd64.crcbundle \u0026\u0026 cd crc_libvirt_4.14.3_amd64\n# Convert the qcow2 image to raw\nqemu-img convert crc.qcow2 crc.raw\n# Upload the raw image to openstack\nopenstack image create --disk-format raw --file crc.raw  --tag openshift-local --progress openshift-local-4.14.3\n```\n\nThe `import` operation downloads and transform the bundle offered by crc into an image supported by `AWS`, as so there are some disk demanding operation. So there is a requirement of at least 70G free on disk to run this operation.  \n\nThe AWS instance type of choice is *c6a.2xlarge* with 8vcpu and 16 GB of RAM. This will be customizable in the future, for the moment this fixed type imposes some [restrictions](https://aws.amazon.com/about-aws/whats-new/2022/12/amazon-ec2-m6a-c6a-instances-additional-regions/) on available regions to run crc cloud, those regions are:\n\n- us-east-1 and us-east-2  \n- us-west-1 and us-west-2  \n- ap-south-1, ap-southeast-1, ap-southeast-2 and ap-northeast-1  \n- eu-west-1, eu-central-1 and eu-west-2  \n\n### Operations\n\n#### Import\n\n`import` operation uses crc official bundles, transform them and import as an AMI on the user account. It is required to run `import` operation on each region where the user wants to sping the cluster.  \n\nUsage:\n\n```bash\nimport crc cloud image\n\nUsage:\n  crc-cloud import [flags]\n\nFlags:\n      --backed-url string              backed for stack state. Can be a local path with format file:///path/subpath or s3 s3://existing-bucket\n      --bundle-shasumfile-url string   custom url to download the shasum file to verify the bundle artifact\n      --bundle-url string              custom url to download the bundle artifact\n  -h, --help                           help for import\n      --output string                  path to export assets\n      --tags                           tags to add on each resource (--tags name1=value1,name2=value2)\n      --project-name string            project name to identify the instance of the stack\n      --provider string                target cloud provider\n```\n\nOutputs:\n\n- `image-id` file with the ami-id of the imported image  \n- `id_ecdsa` this is key required to spin the image. (It will be required on `create` operation, is user responsability to store this key)  \n\nSample\n\n```bash\npodman run -d --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e AWS_ACCESS_KEY_ID=${access_key_value} \\\n    -e AWS_SECRET_ACCESS_KEY=${secret_key_value} \\\n    -e AWS_DEFAULT_REGION=eu-west-1 \\\n    quay.io/crcont/crc-cloud:v0.0.2 import \\\n        --project-name \"ami-ocp412\" \\\n        --backed-url \"file:///workspace\" \\\n        --output \"/workspace\" \\\n        --tags version=nightly \\\n        --provider \"aws\" \\\n        --bundle-url \"https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.12.5/crc_libvirt_4.12.5_amd64.crcbundle\" \\\n        --bundle-shasumfile-url \"https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.12.5/sha256sum.txt\"\n\n```\n\n#### Create  \n\n`create` operation is responsible for create all required resources on the cloud provider to spin the Openshift Single Node Cluster.  \n\nUsage: In case of `aws` provider\n\n```bash\ncreate crc cloud instance on AWS\n\nUsage:\n  crc-cloud create aws [flags]\n\nFlags:\n      --aws-ami-id string           AMI identifier\n      --aws-disk-size string        Disk size in GB for the machine running the cluster. Default is 100.\n      --aws-instance-type string    Instance type for the machine running the cluster. Default is c6a.2xlarge.\n  -h, --help                        help for aws\n\nGlobal Flags:\n      --backed-url string            backed for stack state. Can be a local path with format file:///path/subpath or s3 s3://existing-bucket\n      --key-filepath string          path to init key obtained when importing the image\n      --output string                path to export assets\n      --tags                         tags to add on each resource (--tags name1=value1,name2=value2)\n      --project-name string          project name to identify the instance of the stack\n      --pullsecret-filepath string   path for pullsecret file\n```\n\nUsage: In case of `gcp` provider\n\n```bash\ncreate crc cloud instance on GCP\n\nUsage:\n  crc-cloud create gcp [flags]\n\nFlags:\n      --gcp-disk-size string       Disk size in GB for the machine running the cluster. Default is 100.\n      --gcp-image-id string        GCP image identifier\n      --gcp-instance-type string   Instance type for the machine running the cluster. Default is n1-standard-8.\n  -h, --help                       help for gcp\n\nGlobal Flags:\n      --backed-url string            backed for stack state. Can be a local path with format file:///path/subpath or s3 s3://existing-bucket\n      --key-filepath string          path to init key obtained when importing the image\n      --output string                path to export assets\n      --project-name string          project name to identify the instance of the stack\n      --pullsecret-filepath string   path for pullsecret file\n      --tags stringToString          tags to add on each resource (--tags name1=value1,name2=value2) (default [])\n```\n\nUsage: In case of `openstack` provider\n```bash\ncreate crc cloud instance on OpenStack\n\nUsage:\n  crc-cloud create openstack [flags]\n\nFlags:\n      --disk-size string   Disk size in GB for the machine running the cluster. Default is 100.\n      --flavor string      OpenStack flavor type for the machine running the cluster. Default is m1.xlarge.\n  -h, --help               help for openstack\n      --image string       OpenStack image identifier\n      --network string     OpenStack network name for the machine running the cluster.\n\nGlobal Flags:\n      --backed-url string            backed for stack state. Can be a local path with format file:///path/subpath or s3 s3://existing-bucket\n      --key-filepath string          path to init key obtained when importing the image\n      --output string                path to export assets\n      --project-name string          project name to identify the instance of the stack\n      --pullsecret-filepath string   path for pullsecret file\n      --tags stringToString          tags to add on each resource (--tags name1=value1,name2=value2) (default [])\n\n```\nOutputs:\n\n- `kubeconfig` file with the kube config to connect withint the cluster  \n- `host` file containing host address running the cluster\n- `username` file containing the username to connect the remote host\n- `id_rsa` key to connect the remote host\n- `password` password generated for `kubeadmin` and `developer` default cluster users\n\nSample for `aws` provider:\n\n```bash\npodman run -d --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e AWS_ACCESS_KEY_ID=${access_key_value} \\\n    -e AWS_SECRET_ACCESS_KEY=${secret_key_value} \\\n    -e AWS_DEFAULT_REGION=eu-west-1 \\\n    quay.io/crcont/crc-cloud:v0.0.2 create aws \\\n        --project-name \"crc-ocp412\" \\\n        --backed-url \"file:///workspace\" \\\n        --output \"/workspace\" \\\n        --tags account=qe-pt,profile=builder \\\n        --aws-ami-id \"ami-xxxx\" \\\n        --aws-instance-type \"c6i.4xlarge\" \\\n        --aws-disk-size \"200\" \\\n        --pullsecret-filepath \"/workspace/pullsecret\" \\\n        --key-filepath \"/workspace/id_ecdsa\"\n```\n\nSample for `gcp` provider:\n\n```bash\npodman run -d --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e GOOGLE_APPLICATION_CREDENTIALS=${gcp_credentials} \\\n    -e GCLOUD_PROJECT=${gcp_project_id} \\\n    -e GCLOUD_REGION=${gcp_region} \\\n    -e GCLOUD_ZONE=${gcp_zone} \\\n    quay.io/crcont/crc-cloud:v0.0.2 create gcp \\\n        --project-name \"crc-ocp412\" \\\n        --backed-url \"file:///workspace\" \\\n        --output \"/workspace\" \\\n        --tags account=qe-pt,profile=builder \\\n        --gcp-image-id \"gcp-xxxx\" \\\n        --gcp-instance-type \"n1-standard-8\" \\\n        --gcp-disk-size \"100\" \\\n        --pullsecret-filepath \"/workspace/pullsecret\" \\\n        --key-filepath \"/workspace/id_ecdsa\"\n```\n\nSample for `openstack` provider:\n\n```bash\npodman run --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e OS_CLOUD=openstack \\\n    -e OS_CLIENT_CONFIG_FILE=/workspace/prkumar_clouds.yaml \\\n    quay.io/crcont/crc-cloud:latest create openstack \\\n    --image openshift-local-4.14.12 \\\n    --backed-url file:///workspace \\\n    --project-name crc-ocp414 \\\n    --output /workspace \\\n    --key-filepath \"/workspace/id_ecdsa\" \\\n    --pullsecret-filepath \"/workspace/pull-secret\" \\\n    --disk-size 100 \\\n    --network provider_net_cci_5 \\\n    --flavor ocp-master\n```\n\n#### Destroy\n\n`destroy` operation will remove any resource created at the cloud provider, it uses the files holding the state of the infrastructure which has been store at location defined by parameter `backed-url` on `create` operation.  \n\nUsage:\n\n```bash\ndestroy crc cloud instance\n\nUsage:\n  crc-cloud destroy [flags]\n\nFlags:\n      --backed-url string     backed for stack state. Can be a local path with format file:///path/subpath or s3 s3://existing-bucket\n  -h, --help                  help for destroy\n      --project-name string   project name to identify the instance of the stack\n      --provider string       target cloud provider\n```\n\nSample for `aws` provider:\n\n```bash\npodman run -d --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e AWS_ACCESS_KEY_ID=${access_key_value} \\\n    -e AWS_SECRET_ACCESS_KEY=${secret_key_value} \\\n    -e AWS_DEFAULT_REGION=eu-west-1 \\\n    quay.io/crcont/crc-cloud:v0.0.2 destroy \\\n        --project-name \"crc-ocp412\" \\\n        --backed-url \"file:///workspace\" \\\n        --provider \"aws\" \n```\n\nSample for `gcp` provider:\n\n```bash\npodman run -d --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e GOOGLE_APPLICATION_CREDENTIALS=${gcp_credentials} \\\n    -e GCLOUD_PROJECT=${gcp_project_id} \\\n    -e GCLOUD_REGION=${gcp_region} \\\n    -e GCLOUD_ZONE=${gcp_zone} \\\n    quay.io/crcont/crc-cloud:v0.0.2 destroy \\\n        --project-name \"crc-ocp412\" \\\n        --backed-url \"file:///workspace\" \\\n        --provider \"gcp\"\n```\n\nSample for `openstack` provider:\n\n```bash\npodman run --rm \\\n    -v ${PWD}:/workspace:z \\\n    -e OS_CLOUD=openstack \\\n    -e OS_CLIENT_CONFIG_FILE=/workspace/prkumar_clouds.yaml \\\n    quay.io/crcont/crc-cloud:latest destroy \\\n    --provider openstack \\\n    --backed-url file:///workspace \\\n    --project-name crc-ocp414\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrc-org%2Fcrc-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrc-org%2Fcrc-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrc-org%2Fcrc-cloud/lists"}