Summary and Schedule
Learn infrastructure as code by configuring a small public Potree website with Ansible on your laptop. Then use a separate Dataverse case study to reason about Terraform, secrets, data migration, and operational risk.
This lesson is for library data-services staff, OSPO and DataSquad students, and incoming service operators. You should be comfortable navigating a terminal, editing text files, and using basic Git. No AWS account, cloud credentials, or private repository access is required for the public core.
Preparing for EX294
For learners aiming to pass EX294, the core is a first practice pass, not complete exam preparation. After each worked example, close the solution and reproduce the required state independently, then verify it. Use the certification track for requirement-driven drills and the explicit coverage gaps. Dataverse is optional for this goal; Terraform is not an EX294 objective. Completing the website labs alone is not an exam-readiness test.
Public core: six episodes
- Follow one point cloud request: trace HTTP requests and diagnose a failure boundary.
- First converge and second run: write and repair a task, inspecting state as well as the recap.
- Variables, templates and handlers: change a requirement and predict a reload.
- Organize a role, validate inputs: add collection content without duplicating infrastructure logic.
- Break, diagnose, recover: use evidence to repair a fault and rebuild locally.
- Operate the service: interpret monitoring, release content, and roll back locally.
Allow about four hours plus breaks, with installation completed beforehand. You will publish and verify a local collection landing page; rendering an actual 3D scan still depends on the live public service. The companion repository has no verified offline point-cloud fixture workflow yet. Live exercises are labeled; recorded outputs support discussion when that service is unavailable.
Dataverse extension and optional practice
Start the Dataverse case study after the core. It explains the larger stack and historical operational decisions. Its command examples are for analysis, not a production runbook. Authorized maintainers need their project’s current repositories, access process, and reviewed runbook before operating infrastructure. Public learners can reason from the included excerpts.
Staff can use the extension to explain deployment, monitoring, restore, and cutover gates; reading it does not demonstrate production operating competence. The certification track maps practice and gaps separately. Using AI adds an optional task-review exercise.
Start with Setup.
| Setup Instructions | Download files required for the lesson | |
| Duration: 00h 00m | 1. Follow One Point Cloud Request |
What actually happens between typing a URL and seeing a 3D
scan? Which part of the system is responsible for each step? When a scan doesn’t load, how do you tell where it broke? |
| Duration: 00h 35m | 2. First Converge and Second Run |
What does it mean to run a playbook against a server, and then run it
again? What should the second run report, and why? How is “the playbook made no changes” different from “the site works”? |
| Duration: 01h 25m | 3. Variables, Templates and Handlers |
How does one requirement become a configuration file? When should a handler run? |
| Duration: 02h 00m | 4. Organize a Role, Validate Inputs |
Where does collection content belong? What can role input validation prove? |
| Duration: 02h 40m | 5. Break, Diagnose, Recover |
Which evidence distinguishes a content fault from a server
failure? Can a rebuild reproduce the repaired state? |
| Duration: 03h 15m | 6. Operate the Service |
What does a green monitor actually tell us? How do we release and roll back content locally? |
| Duration: 03h 55m | 7. Dataverse Case Study: Why We Built This Way |
What is this lesson and who is it for? What infrastructure does Dataverse need to run? How are Terraform, Ansible, and the Dataverse application connected? |
| Duration: 04h 15m | 8. Tooling Setup |
What tools do I need installed to work with this infrastructure? How do the three repositories fit together on my local machine? How do I configure AWS credentials for the correct profile? |
| Duration: 04h 45m | 9. Terraform: The Infrastructure Layer |
What AWS resources does Terraform manage for this project? How is Terraform state stored and shared between operators? How are Tim’s and Jamie’s environments organized? |
| Duration: 05h 20m | 10. Ansible: Configuration and Idempotency |
What does dataverse-ansible configure on the EC2
instance?What does idempotency mean in practice, and why does it matter for operations? How are environment-specific values managed without duplicating configuration? |
| Duration: 05h 55m | 11. The Dataverse Stack: Payara, Solr, and the Data Layer |
What is Payara and why does Dataverse use it? How does Dataverse store and retrieve data across RDS, S3, and Solr? What breaks when Solr is out of sync, and how do you fix it? |
| Duration: 06h 35m | 12. Secrets and Environment Configuration |
How are secrets kept out of the repository? What configuration is different between staging and production? What is a FAKE PID provider and why does it exist? |
| Duration: 07h 03m | 13. The Makefile: Daily Operations |
What can I do from the Makefile? What does make rebuild
actually do, step by step?When do I run make baseline
vs. make reindex?
|
| Duration: 07h 33m | 14. Testing and Validation |
How do I know the migration worked? What does the test suite check? What can baseline counts tell us, and what additional integrity checks are needed? |
| Duration: 08h 03m | 15. Using AI Tools in Infrastructure Work |
Where does AI actually help with infrastructure work, and where does it
mislead? What should I never share with an AI tool? How do I stay technically grounded when AI is doing a lot of the work? |
| Duration: 08h 43m | 16. The Migration Arc: 5.14 to 6.8 |
What changes between Dataverse 5.14 and 6.8? Why is the migration done in phases? What happens on cutover day and what does rollback look like? |
| Duration: 09h 13m | Finish |
The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.
Public core: your laptop only
Install Git, curl, Pixi, and Podman. Use the companion repository’s getting started guide for your platform (macOS, Linux, or Windows through WSL). Allow 30–60 minutes before the workshop for downloads and container setup. Internet access is needed for dependencies; this is not an offline installation.
Clone into a new directory, or use your existing checkout without overwriting work:
BASH
git clone https://github.com/ucla-data-science-center/pointcloud-infra.git
cd pointcloud-infra
pixi run setup
pixi run ansible --version
pixi run staging-up
pixi run staging-verify
Open https://localhost:8443/. Accept the self-signed certificate only for this local lab. Expect the collection listing and styling. Public S3-backed scans do not normally load from localhost. The role skips firewalld and SELinux enforcement in the container; this is not proof of production readiness.
All core commands start at the pointcloud-infra repository
root, unless a subshell explicitly changes directory.
pixi run supplies the controller tools; you do not need a
Pixi shell. Check git status --short before each exercise,
use a learner branch, and preserve any previous work. Do not run
deploy, deploy-check, or the tf-*
tasks during the core.
If Podman cannot connect, follow the platform guide to start its machine/service. If ports 8080 or 8443 are busy, stop the conflicting local service before retrying. If downloads fail, retain the error and check network access; do not substitute production deployment. The instructor can demonstrate while you inspect source.
Leave staging running for the next exercise, or stop this lab
container with pixi run staging-down. Recreate it with
pixi run staging-up.
The request-tracing episode uses only curl but depends on the live public site. All other core changes target local staging. No verified local point-cloud fixture is provided yet; the exercises publish HTML and test service behavior without claiming successful 3D rendering.
Dataverse extension: read-only case study
No additional installation or credentials are needed to analyze the extension. Private-repository exploration is optional and limited to authorized maintainers. Its historical examples must not be copied into a live terminal as workshop tasks.
For actual operator onboarding, obtain repository access, the intended AWS account and role/profile, SSH authorization, tool versions, and the existing Vault password through the project’s established process. This lesson does not specify that process or supply credentials. A newly generated password cannot decrypt existing project ciphertext. See Tooling setup.
The optional certification drills have a separate controller environment and disposable nodes; they are not prerequisites for the core.