{"id":29045328,"url":"https://github.com/cjeanner/tripleo-lab","last_synced_at":"2025-06-26T16:12:08.024Z","repository":{"id":33268127,"uuid":"135718960","full_name":"cjeanner/tripleo-lab","owner":"cjeanner","description":"Custom lab for tripleo - deployed on a physical node with libvirt","archived":false,"fork":false,"pushed_at":"2023-01-05T16:32:50.000Z","size":657,"stargazers_count":22,"open_issues_count":2,"forks_count":23,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-03-02T06:51:53.392Z","etag":null,"topics":["ansible","lab","openstack","quickstart","tripleo","tripleo-quickstart"],"latest_commit_sha":null,"homepage":"https://cjeanner.github.io/","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjeanner.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}},"created_at":"2018-06-01T13:09:13.000Z","updated_at":"2023-01-19T09:05:56.000Z","dependencies_parsed_at":"2023-01-15T00:14:27.823Z","dependency_job_id":null,"html_url":"https://github.com/cjeanner/tripleo-lab","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/cjeanner/tripleo-lab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjeanner%2Ftripleo-lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjeanner%2Ftripleo-lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjeanner%2Ftripleo-lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjeanner%2Ftripleo-lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjeanner","download_url":"https://codeload.github.com/cjeanner/tripleo-lab/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjeanner%2Ftripleo-lab/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262099757,"owners_count":23258674,"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":["ansible","lab","openstack","quickstart","tripleo","tripleo-quickstart"],"created_at":"2025-06-26T16:12:07.057Z","updated_at":"2025-06-26T16:12:08.012Z","avatar_url":"https://github.com/cjeanner.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Custom Lab for TripleO\nA simple way to bootstrap a bunch of VMs on a libvirt host. Gives more control\nthan quickstart in some cases.\n\n## Installation\nPlease run the following command in order to get \"tripleo operator\" collection:\n\n```Bash\nansible-playbook config-host.yaml\n```\n\n## Specs\nIt is expected to run the following resources:\n- 1 undercloud\n- 3 controllers\n- 2 computes\n- 3 ceph-storage\n\nThe amount of used memory for that env is about 52G, and about 20 CPU cores.\n\n## Prerequisite\n### Working ssh-agent on ansible-host\nA working ssh-agent must be running on the host launching ansible playbook. It\nis needed in order to hot-load the private ssh key for the undercloud access.\n\nIn case you're running the playbook for a \"middle machine\", you can just forward\nthe agent from your workstation.\n\n## Usage\n### Standard deploy:\n```Bash\nansible-playbook builder.yaml\n```\n\nIt will deploy a containerized undercloud and prepare the baremetal.json file\nyou will use in order to register nodes in ironic.\n\n### Redeploy the lab\nIf you issue a ```lab-destroy``` on the builder, you will need to redeploy the\nlab:\n```Bash\nansible-playbook builder.yaml --tags lab\n```\n\n### I have my undercloud and want to replay only specific tasks on it\nJust limit with the tags, and be sure to have the ```inventory``` tag. For\nexample, in order to just manage the overcloud images:\n```Bash\nansible-playbook builder.yaml -t inventory,overcloud-images\n```\n\n### I want to add a new instance to my current lab\nJust add the requested information in the yaml you used for the initial deploy,\nthen:\n```Bash\nansible-playbook builder.yaml -t domains -t baremetal -t vbmc\n```\n\nDomain tag will create the instance disk image and add it to libvirt. The vbmc\ntag will add the new to vbmc, and enable it. The baremetal tag will take care of\nthe different configuration on the undercloud.\n\nOne note though: you might want to delete the already-existing node(s) from the\nbaremetal.json on the undercloud, in order to avoid useless error output from\nthe import task.\n\nAlso, this ansible will NOT run the import task once more, it doesn't ensure\nall nodes are present. You will need to run, on your own:\n```Bash\nsource ~/stackrc\nopenstack overcloud node import --provide baremetal.json\n```\n\n### Extend the lab\nYou can pass variables and environment files using the ```-e``` option, like:\n```Bash\nansible-playbook builder.yaml --skip-tags overcloud-images --tags lab -e @environments/3ctl-1compute.yaml\n```\nThis will start a lab with just 3 controllers and 1 compute.\n\n#### Variables\n*vms*\n  Hash with the following entries:\n  - name (string)\n  - cpu (int)\n  - memory (int, MB)\n  - interfaces (list)\n    - network (network name, default 'ctlplane')\n  - autostart (bool)\n  - swap (string, for example 10G)\n  - iotune (list)\n    - tune (string, iotune option)\n      value (string, iotune option value)\n```YAML\nvms:\n  - name: undercloud\n    cpu: 16\n    memory: 20000\n    disksize: 100\n    interfaces:\n      - network: default\n      - net2\n    autostart: true\n  - name: controller-0\n    cpu: 8\n    memory: 20000\n    disksize: 100\n    interfaces:\n      - net1\n      - net2\n    autostart: false\n```\n\n*virt_user*\n  Username on the builder (will be created)\n\n*basedir*\n  Base directory for all the VM images\n\n*undercloud_password*\n  Root password on the undercloud VM (debug purpose)\n\n*undercloud_config*\n  List of hashes representing ini configuration for undercloud.conf file\n```YAML\n---\nundercloud_config:\n  - section: DEFAULT\n    option: container_cli\n    value: podman\n```\n\n*tripleo_repo_version*\n  Tripleo-repos package name/version. The default version is `master`. This can be changed this to any OpenStack version, like `stein` or `train`.\n\n*overcloud_images*\n  Hash with the following entries:\n  - file (string)\n  - content (string)\n\n*containerized_undercloud*\n  Boolean, default \"yes\"\n\n*use_heat*\n  Whether to add `--use-heat` to undercloud install command (Boolean).\n  Defaults \"no\"\n\n*deploy_undercloud*\n  Boolean\n\n*deploy_overcloud*\n  Boolean\n\n*proxy_host*\n  Allows to use a proxy on the lab - put IP:PORT as value\n\n*synchronize*\n  List of hashes with the following entries:\n  - name\n  - base\n  - container (optional, default False)\n  - host (optional, default True)\n  - dest (defaults to /home/stack/tripleo/)\n  Synchronize with rsync from your ansible controller to remote. The \"host\"\n  and \"container\" params are used for the build destiation - either container\n  or host, or both. It results in a different target directory.\n```YAML\nsynchronize:\n  - name: tripleo-heat-templates\n    base: /home/user/work\n    dest: /home/stack/tripleo/\n```\n\n*synchronize_default_dest*\n  String. Used if you don't set \"dest\" in the synchronize hash.\n  Default /home/stack/tripleo/\n\n*custom_rpms*\n  List of custom remote RPMS to install on your undercloud node\n\n*additional_envs*\n  List of additional env you want to pass to either standalone or overcloud deploy\n\n*standalone*\n  Deploy \"standalone\" tripleo (Bool, default no)\n\n*standalone_ceph*\n  Deploy ceph in standalone tripleo (Bool, default no)\n\n*standalone_container_cli*\n  Deploy standalone using said container CLI (String, default docker)\n\n*deploy_standalone*\n  Run the deploy script (Bool, default yes)\n\n*semodules*\n  Build modules based on .te files you can provide. List of dicts.\n```YAML\nsemodules:\n  - name: foobar\n    src: /full/path/foobar.te\n```\n\n*overcloud_image_update*\n  Whether you want to get a `yum update` on the overcloud-full prior its\n  upload into Glance. (Bool, default to yes)\n\n*undercloud_low_memory*\n  Creates a hieradata file to configure 1 worker per OpenStack\n  service. This hieradata file is consummed by the Undercloud.\n  (Bool, default no)\n\n*disable_selinux*\n  Allows to disable selinux on the undercloud, setting it to \"permissive\" while\n  still logging what would have been blocked.\n  (Bool, default no)\n\n*custom_repositories*\n  List of custom repositories dicts\n```YAML\ncustom_repositories:\n  - name: foo\n    file: (string, optional)\n    uri: https://foo.bar\n    gpg: (bool, optional)\n    priority: (int, optional)\n```\n\n*tripleoclient_pkgname*\n  Allows to set a custom name for the python-tripleoclient.\n  (Str, default python-tripleoclient)\n\n*unmanage_iface*\n  Point to the interface we want to unmanage from NetworkManager\n\n*container_prepare_overrides*\n  Dict of overrides for the default container-image-prepare.\n```YAML\ncontainer_prepare_overrides:\n  tag: my-test-tag\n  namespace: my.container.registry/rh-osbs\n  name_prefix: tripleo-\n  ceph_namespace: my.ceph.registry/ceph\n  ceph_tag: latest\n  ceph_image: myceph_image\n```\n\n*num_osds*\n  The number of OSD disks created per ceph node (int, default 1)\n\n*stack_ssh_keys*\n  Additional ssh keys you want to add on the undercloud \"stack\" user\n\n*oc_image_rpms*\n  List of RPMs/packages you want to inject in the overcloud image.\n\n*undercloud_hiera_override*\n  List of hieradata override you want to pass for the UC deploy\n```YAML\nundercloud_hiera_override:\n  - 'ironic::drivers::ipmi::use_ipmitool_retries: true'\n  - 'ironic::drivers::ipmi::command_retry_timeout: 180'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjeanner%2Ftripleo-lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjeanner%2Ftripleo-lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjeanner%2Ftripleo-lab/lists"}