{"id":20188741,"url":"https://github.com/remche/terraform-openstack-learninglab","last_synced_at":"2025-07-19T04:33:03.428Z","repository":{"id":112302359,"uuid":"369474282","full_name":"remche/terraform-openstack-learninglab","owner":"remche","description":"Build your learning lab on OpenStack","archived":false,"fork":false,"pushed_at":"2021-05-31T12:26:20.000Z","size":34,"stargazers_count":1,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-03T07:14:09.915Z","etag":null,"topics":["ocfs2","openstack","terraform","terraform-module"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/remche.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2021-05-21T08:54:02.000Z","updated_at":"2021-06-03T13:53:12.000Z","dependencies_parsed_at":"2023-04-29T14:06:58.807Z","dependency_job_id":null,"html_url":"https://github.com/remche/terraform-openstack-learninglab","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/remche/terraform-openstack-learninglab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remche%2Fterraform-openstack-learninglab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remche%2Fterraform-openstack-learninglab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remche%2Fterraform-openstack-learninglab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remche%2Fterraform-openstack-learninglab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/remche","download_url":"https://codeload.github.com/remche/terraform-openstack-learninglab/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remche%2Fterraform-openstack-learninglab/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265888902,"owners_count":23844527,"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","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":["ocfs2","openstack","terraform","terraform-module"],"created_at":"2024-11-14T03:30:54.159Z","updated_at":"2025-07-19T04:33:03.401Z","avatar_url":"https://github.com/remche.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# terraform-openstack-learninglab\n[![Terraform Registry](https://img.shields.io/badge/terraform-registry-blue.svg)](https://registry.terraform.io/modules/remche/learninglab/openstack)\n\nBuild your learning lab on OpenStack\n\nThis module will spawn instances, create users and optionnaly set up a OCFS2 drive.\n\n## :warning: Shared drive details\n\n### Requirements\n* A ceph volume type supporting [multiattach](https://docs.openstack.org/cinder/latest/admin/blockstorage-volume-multiattach.html)\n* An OS image featuring OCFS2 services and kernel modules\n\n### Usage\nTo avoid any data loss, the Cinder volume lifecyle is set to [prevent_destroy](https://www.terraform.io/docs/language/meta-arguments/lifecycle.html#prevent_destroy). It means that you won't be able to apply a plan that results in a volume destruction. To tear down the infrastructure, remove the volume from state first :\n\n```bash\nterraform state rm openstack_blockstorage_volume_v3.ocfs2[0]\nterraform destroy\n```\n\nOrphaned volume can be later manually destroyed or reused in future infrastructure via `volume_id` variable.\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 0.13 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_openstack\"\u003e\u003c/a\u003e [openstack](#provider\\_openstack) | n/a |\n| \u003ca name=\"provider_random\"\u003e\u003c/a\u003e [random](#provider\\_random) | n/a |\n| \u003ca name=\"provider_template\"\u003e\u003c/a\u003e [template](#provider\\_template) | n/a |\n\n## Modules\n\nNo modules.\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [openstack_blockstorage_volume_v3.ocfs2](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/blockstorage_volume_v3) | resource |\n| [openstack_compute_floatingip_associate_v2.associate_floating_ip](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/compute_floatingip_associate_v2) | resource |\n| [openstack_compute_instance_v2.instance](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/compute_instance_v2) | resource |\n| [openstack_compute_volume_attach_v2.ocfs2_attach](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/compute_volume_attach_v2) | resource |\n| [openstack_networking_floatingip_v2.floating_ip](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/networking_floatingip_v2) | resource |\n| [openstack_networking_network_v2.tp_net](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/networking_network_v2) | resource |\n| [openstack_networking_router_interface_v2.router_interface](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/networking_router_interface_v2) | resource |\n| [openstack_networking_router_v2.router](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/networking_router_v2) | resource |\n| [openstack_networking_subnet_v2.tp_subnet](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/networking_subnet_v2) | resource |\n| [random_password.password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) | resource |\n| [openstack_networking_network_v2.dmz_net](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/data-sources/networking_network_v2) | data source |\n| [template_cloudinit_config.config](https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/cloudinit_config) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_dns_domain\"\u003e\u003c/a\u003e [dns\\_domain](#input\\_dns\\_domain) | DNS domain | `string` | n/a | yes |\n| \u003ca name=\"input_dns_nameservers\"\u003e\u003c/a\u003e [dns\\_nameservers](#input\\_dns\\_nameservers) | DNS nameservers | `list(string)` | n/a | yes |\n| \u003ca name=\"input_flavor\"\u003e\u003c/a\u003e [flavor](#input\\_flavor) | Instance template | `string` | n/a | yes |\n| \u003ca name=\"input_floating_ip_network\"\u003e\u003c/a\u003e [floating\\_ip\\_network](#input\\_floating\\_ip\\_network) | Public network to use | `string` | n/a | yes |\n| \u003ca name=\"input_hostname_prefix\"\u003e\u003c/a\u003e [hostname\\_prefix](#input\\_hostname\\_prefix) | Prefix for instances | `string` | n/a | yes |\n| \u003ca name=\"input_image_id\"\u003e\u003c/a\u003e [image\\_id](#input\\_image\\_id) | Instance id | `string` | `\"\"` | no |\n| \u003ca name=\"input_image_name\"\u003e\u003c/a\u003e [image\\_name](#input\\_image\\_name) | Instance image name | `string` | `\"\"` | no |\n| \u003ca name=\"input_instance_count\"\u003e\u003c/a\u003e [instance\\_count](#input\\_instance\\_count) | Number of instance to spawn | `number` | n/a | yes |\n| \u003ca name=\"input_key_pair\"\u003e\u003c/a\u003e [key\\_pair](#input\\_key\\_pair) | Instance keypair | `string` | n/a | yes |\n| \u003ca name=\"input_password_length\"\u003e\u003c/a\u003e [password\\_length](#input\\_password\\_length) | User passwords length | `number` | `16` | no |\n| \u003ca name=\"input_same_password\"\u003e\u003c/a\u003e [same\\_password](#input\\_same\\_password) | Use same password for all users | `bool` | `false` | no |\n| \u003ca name=\"input_shared_volume\"\u003e\u003c/a\u003e [shared\\_volume](#input\\_shared\\_volume) | Use a OCFS shared volume | `bool` | `false` | no |\n| \u003ca name=\"input_subnet_cidr\"\u003e\u003c/a\u003e [subnet\\_cidr](#input\\_subnet\\_cidr) | Neutron subnet CIDR | `string` | `\"192.168.1.0/24\"` | no |\n| \u003ca name=\"input_user_count\"\u003e\u003c/a\u003e [user\\_count](#input\\_user\\_count) | Number of user to create | `number` | n/a | yes |\n| \u003ca name=\"input_user_prefix\"\u003e\u003c/a\u003e [user\\_prefix](#input\\_user\\_prefix) | Prefix for users | `string` | n/a | yes |\n| \u003ca name=\"input_volume_device\"\u003e\u003c/a\u003e [volume\\_device](#input\\_volume\\_device) | OCFS shared volume device path | `string` | `\"/dev/vdb\"` | no |\n| \u003ca name=\"input_volume_id\"\u003e\u003c/a\u003e [volume\\_id](#input\\_volume\\_id) | ID of an existing volume. Will create one if it does not exist | `string` | `\"\"` | no |\n| \u003ca name=\"input_volume_mount_point\"\u003e\u003c/a\u003e [volume\\_mount\\_point](#input\\_volume\\_mount\\_point) | OCFS shared volume mount point | `string` | `\"/mnt\"` | no |\n| \u003ca name=\"input_volume_size\"\u003e\u003c/a\u003e [volume\\_size](#input\\_volume\\_size) | OCFS shared volume size | `number` | `3` | no |\n| \u003ca name=\"input_volume_type\"\u003e\u003c/a\u003e [volume\\_type](#input\\_volume\\_type) | Cinder volume type (must support multiattach) | `string` | `\"\"` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_instances\"\u003e\u003c/a\u003e [instances](#output\\_instances) | List of instances |\n| \u003ca name=\"output_users\"\u003e\u003c/a\u003e [users](#output\\_users) | List of users/passwords |\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremche%2Fterraform-openstack-learninglab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fremche%2Fterraform-openstack-learninglab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremche%2Fterraform-openstack-learninglab/lists"}