Build a GLPI Asset Assessment
Build a GLPI lab that remediates asset data and proves automated inventory.
Introduction
30 Second Summary
A candidate can sound confident while leaving you unsure whether they can handle unreliable asset data. Hiring becomes risky when practical evidence is missing.
In this project, you will build a candidate-ready IT asset lifecycle assessment in GLPI. A local Docker lab gives candidates a working system for proving how they repair unreliable asset data.
What You'll Build
You open the finished GLPI lab at http://localhost:8080 to see 50 normalized computers beside a live Windows endpoint reporting its current operating system plus installed software.
By the end of this project, you'll have:
- A candidate-ready assessment package with a 55-minute brief plus a private answer key. Its 100-point rubric lets two reviewers score the same visible evidence.
- A repeatable data-quality test where you import a flawed register before reconciling it to exactly 50 trustworthy computers.
- An authenticated endpoint proof that places a dynamic Windows computer in GLPI through automated inventory. You can open the computer to show its current operating-system data plus installed-software data.
- Secret Mission: Prove a repeated CSV import updates an existing asset while the static Computer count stays at 50.
Are there any prerequisites?
You need administrator access to a 64-bit Windows 10 computer running version 2004 or later, or to a Windows 11 computer.
Hardware virtualization plus internet access are required, with at least 8 GB RAM recommended for the local lab.
Before We Start
This first checkpoint defines an assessment for an intermediate practitioner working with Ubuntu, Docker, and IT asset lifecycles. A working GLPI system with authenticated automated endpoint inventory gives stronger hiring evidence because it proves practical deployment, data remediation, reconciliation, and operational validation skills.
Install the Ubuntu Docker Lab
The assessment needs a Linux host that every candidate can reproduce. Without one, later results could reflect differences between Windows computers instead of the candidate's skills.
You will use Windows Subsystem for Linux 2 to host Ubuntu 24.04 LTS. This gives the assessment a consistent Linux environment on Windows.
Inside Ubuntu, Docker Engine 29.8.1 runs the lab containers through Docker Compose. This route keeps Docker Desktop licensing outside the assessment.
In this step, get ready to:
- Install Ubuntu 24.04 LTS on WSL 2 with Windows PowerShell.
- Confirm systemd is available before adding Docker's official package repository.
- Prove the pinned Docker Engine and Compose plugin can run a test container.
Install Ubuntu 24.04 on WSL 2
WSL runs Ubuntu directly alongside Windows. Ubuntu becomes the Linux host for every container used in the assessment.
- Press the Windows key to open Windows search.
- Type PowerShell into the search field.
- Select Run as administrator in the search results.
- Approve the Windows permission request.
Expect the Ubuntu download to take several minutes. Windows may also request a restart before the distribution can finish setting itself up.
- Install Ubuntu 24.04 by running this command:
wsl.exe --install -d Ubuntu-24.04
What does this command do?
The command enables the Windows features required by WSL. It also installs the named Ubuntu distribution.
The distribution name pins the assessment host to Ubuntu 24.04 instead of accepting an unspecified default.
- Restart Windows if the installer requests it.
- Press the Windows key after Windows starts again.
- Type Ubuntu into the search field.
- Press Enter to launch the installed distribution.
The password setup can feel unresponsive because Ubuntu hides every keystroke.
- Create your Ubuntu username when the terminal asks for it.
- Create your Ubuntu password when the terminal asks for it.
- Retype the password to confirm it.
- Return to the Administrator PowerShell window from earlier.
Before you check, which WSL version do you expect Windows to report for Ubuntu?
- Check the installed distribution by running this command in PowerShell:
wsl.exe --list --verbose
What should you see?
Find Ubuntu in the distribution list. Its version column should show 2.
That VERSION 2 result proves the assessment host uses WSL 2.
Ubuntu missing or using the wrong WSL version?
Restart Windows if the installation requested it. A pending restart can prevent Ubuntu from completing its registration.
Confirm that your Windows account has administrator access before trying the installation again.
Help me diagnose why Ubuntu is missing or not using WSL 2.
Prepare Ubuntu for Docker packages
Ubuntu uses systemd to manage background services such as the Docker daemon. The current Ubuntu distribution installed through WSL enables it by default.
- Switch back to the Ubuntu terminal from earlier.
- Confirm the service manager is available by running this command:
systemctl status
What does this check prove?
The command asks systemd for the overall system state. A system status response confirms Ubuntu can manage the Docker service after installation.
You should see system status details instead of a message saying the service manager is unavailable. Press Q if the status opens in a scrollable view.
Systemd unavailable?
Update WSL before changing Ubuntu configuration. Current Ubuntu installations created through WSL use systemd by default.
Follow Microsoft's WSL systemd guide if your installation still reports that systemd is unavailable.
Help me restore systemd in my Ubuntu WSL environment.
Ubuntu needs Docker's signed package source before it can install the pinned engine version. The signing key lets the package manager verify that the downloaded packages came from Docker.
- Prepare to enter your Ubuntu password when sudo requests elevated access.
- Approve the package installation if Ubuntu pauses for confirmation.
- Trust Docker's package source by running these commands:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
How does the repository setup work?
- The first package update refreshes Ubuntu's existing software catalog.
- The keyring stores Docker's signing key in a location the package manager can read.
- The source block selects Docker's stable Ubuntu packages for your processor architecture.
- The final package update loads Docker packages into Ubuntu's available software catalog.
The final refresh should include Docker's Ubuntu package source without a signature failure. Ubuntu is now ready to install the pinned packages.
Repository setup failed?
Check that Ubuntu has internet access if a download fails. Corporate proxies can also block the Docker package host.
Confirm that each command completed before moving to the next one. A missing signing key prevents the final package refresh from trusting the repository.
Help me diagnose my Docker apt repository setup.
Install and verify Docker Engine
A version pin gives every candidate the same container runtime. The Compose plugin is installed beside the engine so later steps can manage the GLPI stack as one application.
This check branches on the software already present in Ubuntu. A missing Docker command is the expected result in a clean lab.
- Check the current Docker version by running this command:
docker --version
What does this check tell you?
The command reports an installed Docker version when the client already exists. A missing command means the clean Ubuntu environment is ready for its first Docker installation.
The package download can take a few minutes. Ubuntu may pause for confirmation while it prepares the engine and its plugins.
✔️ I see version 29.8.1 or higher
Docker is already present. Install the pinned package set to align the engine with this assessment and include the Compose plugin.
- Approve the package changes if Ubuntu requests confirmation.
- Pin the assessment's Docker packages by running these commands:
VERSION_STRING=5:29.8.1-1~ubuntu.24.04~noble
sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
What does this install?
The version variable holds the exact Docker Engine package release for Ubuntu 24.04. Both engine packages use that same pin.
The remaining packages provide the container runtime plus the Buildx and Compose plugins.
ⓧ I see an older version
The existing engine is below the assessment pin. Install the pinned package set from the repository you just added.
- Approve the package changes if Ubuntu requests confirmation.
- Upgrade the assessment's Docker packages by running these commands:
VERSION_STRING=5:29.8.1-1~ubuntu.24.04~noble
sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
What does this install?
The version variable selects Docker Engine 29.8.1 for Ubuntu 24.04. The package manager aligns the engine client with the same version.
The same installation adds the container runtime plus the Buildx and Compose plugins.
ⓧ Command not found
This is the normal state for a clean Ubuntu lab. Install Docker Engine and its plugins from the official repository.
- Approve the package installation if Ubuntu requests confirmation.
- Install the pinned Docker packages by running these commands:
VERSION_STRING=5:29.8.1-1~ubuntu.24.04~noble
sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
What does this install?
The version variable pins Docker Engine to 29.8.1 on Ubuntu 24.04. This keeps the assessment runtime reproducible.
The installation also adds the container runtime plus the Buildx and Compose plugins.
Docker packages failed to install?
Confirm that the repository setup finished without a signing error. The pinned engine packages cannot be found if the final package refresh failed.
Check your internet connection if Ubuntu cannot download a package. Keep the version string unchanged so the lab remains reproducible.
Help me diagnose the pinned Docker Engine installation.
- Confirm that the Compose plugin is available by running this command:
docker compose version
What should you see?
You should see a Docker Compose version line. That response confirms Ubuntu can find the installed Compose plugin.
Before you run the final test, do you expect Docker to reach the test image and start a container?
- Test the Docker daemon by running this command:
sudo docker run hello-world
What should you see?
Docker downloads the test image when it is not already stored locally. It then starts a container that prints a confirmation message and exits.
That confirmation proves the client can reach the Docker daemon. It also proves the daemon can download and run a container image.
Test container did not run?
Keep sudo at the start of the test command. This lab has not added your Ubuntu user to Docker's privileged group.
Check the systemd result from earlier if the Docker daemon is unavailable. The service manager must be working for the engine to run.
Help me diagnose why the Docker test container does not run.
Your Linux container host is ready. Next, you will launch the pinned GLPI stack and prepare the tools used in the assessment.
Launch and Prepare GLPI
Your Ubuntu host now runs Docker Engine 29.8.1. That gives your assessment a working container host.
Before adding deliberate register defects, you need a known-good GLPI baseline. You will launch the pinned assessment stack.
You will also enable Data Injection for later imports. A Windows GLPI Agent installation completes the baseline.
In this step, get ready to:
- Launch the pinned GLPI baseline.
- Enable Data Injection for later CSV imports.
- Install GLPI Agent on Windows.
Launch the pinned stack
A Docker Compose file defines the complete local lab. It connects GLPI to a pinned MySQL database.
The stack stores both services in named volumes. Your assessment data survives container restarts.
- Create the glpi-assessment folder on your Desktop by running these commands:
mkdir -p ~/Desktop/glpi-assessment
cd ~/Desktop/glpi-assessment
What do these commands do?
- The first command creates the glpi-assessment folder inside ~/Desktop.
- The second command moves your terminal into that folder.
- Create docker-compose.yml inside glpi-assessment by opening it with GNU nano:
nano docker-compose.yml
What does this command do?
GNU nano opens docker-compose.yml for editing. It creates the file when you save it.
- Paste this exact Compose configuration into GNU nano:
name: glpi-assessment
services:
glpi:
image: "glpi/glpi:11.0.8"
restart: "unless-stopped"
volumes:
- glpi_data:/var/glpi
env_file: .env
depends_on:
- db
ports:
- "8080:80"
db:
image: "mysql:8.4.11"
restart: "unless-stopped"
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_DATABASE: ${GLPI_DB_NAME}
MYSQL_USER: ${GLPI_DB_USER}
MYSQL_PASSWORD: ${GLPI_DB_PASSWORD}
volumes:
glpi_data:
db_data:
What does this configuration do?
- The glpi service uses glpi/glpi:11.0.8.
- The db service uses mysql:8.4.11.
- The port mapping publishes GLPI at http://localhost:8080.
- The volumes preserve GLPI files plus database records.
- Press Ctrl+O to save docker-compose.yml.
- Press Enter to confirm the filename.
- Press Ctrl+X to exit GNU nano.
- Confirm the file exists by running:
ls
What should I see?
You should see docker-compose.yml in the folder listing. This confirms the first stack artifact is saved.
Cannot find the Compose file?
Check that GNU nano saved the file as docker-compose.yml. A different name prevents Docker Compose from finding the configuration.
Confirm that your terminal is inside ~/Desktop/glpi-assessment.
Help me check why my Docker Compose file is missing from the assessment folder.
The stack reads database settings from .env. The separate .env.example file preserves a safe template for the candidate package.
- Create .env inside glpi-assessment by opening it with GNU nano:
nano .env
What does this command do?
GNU nano opens the local environment file. Docker Compose reads this file when it starts the services.
- Paste these database settings into .env:
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi
GLPI_DB_PASSWORD=your-glpi-db-password-here
What do these settings control?
- The host value points GLPI to the Compose service named db.
- The port value connects GLPI to MySQL on 3306.
- The remaining values create the application database plus its database user.
This password stays inside your local lab. Keep it out of screenshots so your evidence never exposes a credential.
- Replace your-glpi-db-password-here in your local .env with a strong database password.
- Press Ctrl+O to save .env.
- Press Enter to confirm the filename.
- Press Ctrl+X to exit GNU nano.
- Create .env.example inside glpi-assessment by opening it with GNU nano:
nano .env.example
Why create an example file?
The example file records every required setting without containing your real password. This is the environment file you can safely include in the candidate package.
- Paste this safe template into .env.example:
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi
GLPI_DB_PASSWORD=your-glpi-db-password-here
How is this file used?
The candidate can copy this template when preparing a fresh lab. The placeholder shows where their private database password belongs.
- Press Ctrl+O to save .env.example.
- Press Enter to confirm the filename.
- Press Ctrl+X to exit GNU nano.
- Confirm all three project files exist by running:
ls
What should I see now?
You should see docker-compose.yml plus .env plus .env.example in the assessment folder.
✔️ Awesome, I've got everything!
- Save all three files before launching the stack.
ⓧ I'd like to double check the full code
- Compare docker-compose.yml with this complete reference:
name: glpi-assessment
services:
glpi:
image: "glpi/glpi:11.0.8"
restart: "unless-stopped"
volumes:
- glpi_data:/var/glpi
env_file: .env
depends_on:
- db
ports:
- "8080:80"
db:
image: "mysql:8.4.11"
restart: "unless-stopped"
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_DATABASE: ${GLPI_DB_NAME}
MYSQL_USER: ${GLPI_DB_USER}
MYSQL_PASSWORD: ${GLPI_DB_PASSWORD}
volumes:
glpi_data:
db_data:
This is the complete pinned Compose configuration for the assessment lab.
- Compare the structure of .env with this redacted reference:
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi
GLPI_DB_PASSWORD=your-glpi-db-password-here
The reference keeps the password placeholder visible. Your local .env contains the private replacement.
- Compare .env.example with this complete reference:
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi
GLPI_DB_PASSWORD=your-glpi-db-password-here
This example remains safe to share because it contains only the documented placeholder.
The first launch downloads both pinned images. Expect this to take a few minutes while Docker creates the services plus their volumes.
- Launch the assessment stack in the background by running:
sudo docker compose up -d
What does this command do?
Docker Compose creates the glpi service plus the db service. The background mode returns control of the Ubuntu terminal after startup.
The declared glpi_data plus db_data volumes preserve the local lab state.
- Wait for the command to return to the Ubuntu prompt.
- Open http://localhost:8080 in your Windows browser.
- Refresh the page after a short wait if GLPI is still starting.
You should see the GLPI login page. That page proves Windows can reach the containerized service through WSL localhost forwarding.
GLPI page not loading?
Confirm that the three files are inside the same glpi-assessment folder. Docker Compose needs the configuration plus the local environment file together.
Check the indentation in docker-compose.yml. YAML spacing controls how the services are grouped.
Help me diagnose why my GLPI Compose stack does not load at localhost port 8080.
Secure GLPI and enable Data Injection
A fresh GLPI installation provides a default administrator account. You need to replace that public credential before capturing assessment evidence.
- Enter glpi as the administrator username.
- Enter glpi as the initial administrator password.
- Submit the login form.
Changing the default password closes the most obvious route into the lab. Store the replacement somewhere private so you can rehearse the assessment later.
- Open the administrator account menu.
- Use its password controls to set a unique local password.
- Save the updated administrator account.
Data Injection provides the CSV template plus mapping workflow used in the next step. Version 2.15.11 supports this pinned GLPI release.
- Open the Marketplace from the GLPI navigation.
- Search for Data Injection.
- Select the plugin entry showing version 2.15.11.
- Click Download.
- Click Install after the download completes.
- Click Enable after installation.
- Confirm the plugin status shows version 2.15.11 as enabled.
Why skip GLPI Inventory?
Basic computer inventory is native in GLPI 11.0.8. The GLPI Inventory plugin adds other tasks outside this assessment's endpoint proof.
Cannot enable Data Injection?
Confirm that the plugin entry shows version 2.15.11. An older entry may target a different GLPI release.
Complete the download before selecting the installation control. The enable action becomes available after installation.
Help me diagnose why Data Injection 2.15.11 does not become enabled in GLPI 11.0.8.
Install GLPI Agent and verify the baseline
The Windows agent provides the live endpoint proof later in the assessment. This step installs the software without assigning a server target or OAuth credentials.
The installer may trigger a Windows security prompt. Approving that prompt allows the agent service to be installed on your computer.
- Download GLPI Agent version 1.19 from the official GLPI-Agent-1.19-x64.msi link.
- Open your browser's downloads list.
- Run GLPI-Agent-1.19-x64.msi.
- Approve the Windows security prompt if it appears.
- Leave the server target empty during the graphical installation.
- Leave the OAuth client fields empty.
- Complete the installation.
Why leave the agent unconfigured?
This step proves that the endpoint software installs cleanly. The authenticated server target belongs to the later automated-inventory test.
- Press the Windows key to open Windows search.
- Type Installed apps.
- Press Enter to open the matching settings page.
- Search the installed application list for GLPI Agent.
- Confirm the installed version is 1.19.
Agent missing from Installed apps?
Confirm that you ran the 64-bit installer named GLPI-Agent-1.19-x64.msi. Check whether the Windows security prompt is still waiting behind another window.
Help me diagnose why GLPI Agent 1.19 is missing from Windows Installed apps after running the MSI installer.
Before you run the final check, which two Compose service names do you expect to see running?
- Switch back to the Ubuntu terminal from earlier.
- Check the assessment services by running:
sudo docker compose ps
What should I see?
You should see services named glpi plus db with running statuses. The GLPI service should publish host port 8080.
- Sign out of GLPI in your Windows browser.
- Return to http://localhost:8080.
- Confirm the GLPI login page loads.
- Return to the Installed apps page from earlier.
- Confirm GLPI Agent version 1.19 remains listed.
That is the baseline secured. Your pinned GLPI stack now runs locally with CSV import tooling plus a Windows agent ready for later authentication.
Your assessment platform is ready. Next up, you will introduce the flawed register so the candidate has a real data-quality problem to solve.
Create the Deliberately Flawed Candidate Pack
Your local GLPI lab now gives the assessment a working destination. The next hiring signal depends on whether a candidate can turn unreliable source data into controlled asset records.
A CSV register can contain 50 rows while still being unsafe for lifecycle decisions. This step creates that realistic data problem and uses Data Injection to make the consequences visible.
In this step, get ready to:
- Create the candidate-facing assessment brief.
- Build the deliberately flawed 50-row asset register.
- Attempt the dirty import using Inventory number as the reconciliation field.
Write the candidate brief
The brief defines the candidate's timebox and required result. It also makes every scoring expectation visible before the assessment starts.
- Use the file editor from earlier to create a folder named candidate inside your existing assessment folder.
- Create brief.md inside the new candidate folder.
You should now see candidate/brief.md beside the existing Compose files in your assessment folder.
- Add the challenge context and required outcomes by pasting this first section into candidate/brief.md:
# GLPI Asset Lifecycle Challenge
Timebox: 55 minutes
Scenario: You inherited an incomplete register for 50 company computers. Build a working GLPI system that converts this source into trustworthy lifecycle records and prove that one supplied Windows endpoint can report automatically.
## Starting materials
- An Ubuntu host with Docker Engine and Docker Compose ready
- `docker-compose.yml` and `.env.example`
- `asset-register.csv`
- The GLPI Agent 1.19 Windows installer
## Required result
1. Start the supplied GLPI stack and secure the administrator account.
2. Install and enable Data Injection from the GLPI Marketplace.
3. Audit and correct the supplied register. Preserve 50 legitimate computers while resolving blocking identifier conflicts and normalizing lifecycle values.
4. Import the corrected register as Computers. Use Inventory number as the reconciliation link so reruns update rather than duplicate assets.
5. Make the GLPI records useful for lifecycle decisions. Show ownership, location, state, purchase and warranty information, maintenance evidence, and planned disposal where applicable.
6. Enable native inventory and connect the supplied Windows endpoint with OAuth Client Credentials. Show current operating-system and installed-software data from the agent.
What Does This Section Define?
- The scenario asks the candidate to convert an incomplete register into trustworthy lifecycle records.
- The starting materials keep the assessment focused on GLPI deployment and data remediation.
- The six required results define observable outcomes for deployment, security, reconciliation, lifecycle data, and automated inventory.
- Save candidate/brief.md.
- Scroll to the bottom of the file.
You should see the sixth required result ending with current operating-system and installed-software data from the agent.
Brief Structure Looks Wrong?
Check that the Markdown headings begin at the start of their lines. Confirm that each numbered outcome occupies its own line.
If the formatting still looks uneven, ask for help checking the first section of the Markdown brief.
- Append the submission requirements below the sixth required result by pasting this section:
## Submission evidence
- `docker compose ps` output showing the GLPI and database services running
- GLPI Computer list showing 50 corrected static records
- One imported Computer showing lifecycle and financial details
- Data Injection result report
- Inventory configuration showing inventory enabled and OAuth authentication selected, with secrets hidden
- One dynamic Windows Computer showing operating-system and installed-software data
- A short note naming the defects corrected and one production hardening action you would take
Do not expose database passwords, OAuth client secrets, or other credentials in screenshots.
Why Require Evidence?
The evidence list ties each assessment claim to something a reviewer can inspect. The final warning keeps credentials outside screenshots and submitted files.
- Save candidate/brief.md.
- Check the final line of the file.
You should see the instruction that prevents candidates from exposing database passwords or OAuth client secrets.
Missing Submission Items?
Confirm that the submission section contains seven bullet points. Check that the credential warning appears after the list.
If an item is missing, ask for help comparing the submission evidence section.
✔️ Awesome, I've got everything!
Your candidate brief now contains the complete challenge context, required outcomes, evidence list, and credential warning.
ⓧ I'd like to double check the full code
# GLPI Asset Lifecycle Challenge
Timebox: 55 minutes
Scenario: You inherited an incomplete register for 50 company computers. Build a working GLPI system that converts this source into trustworthy lifecycle records and prove that one supplied Windows endpoint can report automatically.
## Starting materials
- An Ubuntu host with Docker Engine and Docker Compose ready
- `docker-compose.yml` and `.env.example`
- `asset-register.csv`
- The GLPI Agent 1.19 Windows installer
## Required result
1. Start the supplied GLPI stack and secure the administrator account.
2. Install and enable Data Injection from the GLPI Marketplace.
3. Audit and correct the supplied register. Preserve 50 legitimate computers while resolving blocking identifier conflicts and normalizing lifecycle values.
4. Import the corrected register as Computers. Use Inventory number as the reconciliation link so reruns update rather than duplicate assets.
5. Make the GLPI records useful for lifecycle decisions. Show ownership, location, state, purchase and warranty information, maintenance evidence, and planned disposal where applicable.
6. Enable native inventory and connect the supplied Windows endpoint with OAuth Client Credentials. Show current operating-system and installed-software data from the agent.
## Submission evidence
- `docker compose ps` output showing the GLPI and database services running
- GLPI Computer list showing 50 corrected static records
- One imported Computer showing lifecycle and financial details
- Data Injection result report
- Inventory configuration showing inventory enabled and OAuth authentication selected, with secrets hidden
- One dynamic Windows Computer showing operating-system and installed-software data
- A short note naming the defects corrected and one production hardening action you would take
Do not expose database passwords, OAuth client secrets, or other credentials in screenshots.
How to Compare the File
Compare every heading and list item with your saved file. Preserve the wording because the brief defines the assessment contract.
Build the flawed asset register
The register contains realistic defects across identity, assignment, normalization, and lifecycle data. Those defects create the evidence needed to test a candidate's diagnostic judgment.
- Create asset-register.csv inside the existing candidate folder.
You should now see candidate/asset-register.csv next to candidate/brief.md.
- Add the header and source rows 1 through 10 by pasting this first data block:
Source_Row;Asset_ID;Name;Serial_Number;Manufacturer;Model;Type;Assigned_User;Location;Status;Purchase_Date;Warranty_End;Last_Maintenance;Planned_Disposal;Notes
1;AST-001;FIN-LT-001;S-DL-1001;Dell;Latitude 5450;Laptop;alex.morgan;HQ Floor 1;In use;2024-02-12;2027-02-11;2026-07-01;2028-02-12;Finance standard build
2;AST-002;FIN-LT-002;S-DL-1002;Dell;Latitude 5450;Laptop;jamie.lee;HQ1;active;2024-02-12;2027-02-11;2026-06-15;2028-02-12;Finance standard build
3;AST-003;FIN-DT-003;S-HP-1003;HP;Pro Mini 400 G9;Desktop;sam.patel;hq floor 1;Deployed;2023-11-20;2026-11-19;2025-03-10;2028-11-20;Fixed workstation
4;AST-004;FIN-LT-004;S-LN-1004;Lenovo;ThinkPad T14 Gen 5;Laptop;taylor.chen;HQ Floor 2;In Use;2024-05-06;2027-05-05;2026-05-20;2028-05-06;
5;AST-005;FIN-LT-005;S-LN-1005;Lenovo;ThinkPad T14 Gen 5;Laptop;robin.khan;HQ-2;in use;2024-05-06;2027-05-05;2026-05-21;2028-05-06;
6;AST-006;FIN-DT-006;S-DL-1006;Dell;OptiPlex 7020;Desktop;morgan.diaz;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-17;2028-08-14;
7;AST-007;FIN-DT-007;S-DL-1006;Dell;OptiPlex 7020;Desktop;casey.ng;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-18;2028-08-14;Serial conflicts with row 6
8;AST-008;FIN-LT-008;S-HP-1008;HP;EliteBook 840 G11;Laptop;drew.smith;Remote;Active;2024-09-02;2027-09-01;2026-08-01;2028-09-02;
9;AST-009;FIN-LT-009;S-HP-1009;HP;EliteBook 840 G11;Laptop;avery.jones;remote worker;in-use;2024-09-02;2027-09-01;2026-08-02;2028-09-02;
10;AST-010;FIN-SP-010;S-MS-1010;Microsoft;Surface Laptop 6;Laptop;quinn.brown;Remote;In use;2024-03-31;;2025-02-01;2028-03-31;Warranty missing
What Do These Rows Test?
The first ten rows introduce location aliases and status aliases. They also contain a duplicate serial number and a missing warranty date.
- Save candidate/asset-register.csv.
- Scroll to the last visible record.
You should see source row 10 ending with Warranty missing.
Columns Look Misaligned?
Confirm that every field is separated by one semicolon. Keep empty fields between two semicolons because they represent deliberate missing values.
If the first rows do not align, ask for help checking the CSV delimiters.
- Place your cursor after source row 10.
- Append source rows 11 through 20 by pasting this data block:
11;AST-011;HR-LT-001;S-DL-1011;Dell;Latitude 5450;Laptop;jordan.wilson;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-09;2028-01-08;
12;AST-012;HR-LT-002;S-DL-1012;Dell;Latitude 5450;Laptop;;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-10;2028-01-08;In-use asset has no owner
13;;HR-LT-003;S-LN-1013;Lenovo;ThinkPad T14 Gen 4;Laptop;riley.garcia;HQ Floor 2;In use;2023-06-19;2026-06-18;2025-01-10;2027-06-19;Inventory number missing
14;AST-014;HR-DT-004;S-HP-1014;HP;Pro Mini 400 G9;Desktop;parker.martin;HQ2;deployed;2023-10-02;2026-10-01;2025-11-04;2028-10-02;
15;AST-015;HR-LT-005;S-LN-1015;Lenovo;ThinkPad T14 Gen 4;Laptop;dakota.clark;HQ Floor 2;Maintenance;2023-06-19;2026-06-18;2026-09-01;2027-06-19;Keyboard replacement
16;AST-016;HR-LT-006;S-DL-1016;Dell;Latitude 5450;Laptop;;Warehouse;In Stock;2025-01-15;2028-01-14;2026-04-15;2029-01-15;Spare
17;AST-017;HR-LT-007;S-DL-1017;Dell;Latitude 5450;Laptop;;warehouse;stock;2025-01-15;2028-01-14;2026-04-16;2029-01-15;Spare
18;AST-018;HR-SP-008;S-MS-1018;Microsoft;Surface Laptop 6;Laptop;skyler.white;Remote;In use;2024-04-22;2027-04-21;2026-02-20;2028-04-22;
19;AST-019;HR-DT-009;S-HP-1019;HP;Pro Mini 400 G9;Desktop;emerson.hall;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-11;2028-09-11;
20;AST-019;HR-DT-010;S-HP-1020;HP;Pro Mini 400 G9;Desktop;finley.young;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-12;2028-09-11;Duplicate inventory number
What Do These Rows Test?
This group introduces an ownership gap and a missing Inventory number. Source rows 19 and 20 also share the same Inventory number.
- Save candidate/asset-register.csv.
- Scroll to source rows 19 and 20.
You should see AST-019 in both records. That repeated value creates a reconciliation conflict.
Duplicate Value Missing?
Check that source row 13 has an empty field immediately after its row number. Confirm that source rows 19 and 20 both contain the exact value AST-019.
If the defects disappeared during pasting, ask for help restoring rows 11 through 20.
- Place your cursor after source row 20.
- Append source rows 21 through 30 by pasting this data block:
21;AST-021;ENG-LT-001;S-LN-1021;Lenovo;ThinkPad P1 Gen 7;Laptop;harper.king;East Branch;In use;2024-07-01;2027-06-30;2026-07-05;2028-07-01;Engineering workstation
22;AST-022;ENG-LT-002;S-LN-1022;Lenovo;ThinkPad P1 Gen 7;Laptop;rowan.scott;Branch-East;Active;2024-07-01;2027-06-30;;2028-07-01;Maintenance missing
23;AST-023;ENG-DT-003;S-DL-1023;Dell;Precision 3680;Desktop;reese.green;East Branch;In use;2024-08-12;2027-08-11;2026-08-20;2028-08-12;
24;AST-024;ENG-DT-004;S-DL-1024;Dell;Precision 3680;Desktop;hayden.adams;east branch;deployed;2024-08-12;2027-08-11;2026-08-21;2028-08-12;
25;AST-025;ENG-LT-005;S-HP-1025;HP;ZBook Power G11;Laptop;blake.baker;Remote;In Use;2024-10-07;2027-10-06;2026-08-28;2028-10-07;
26;AST-026;ENG-LT-006;S-HP-1026;HP;ZBook Power G11;Laptop;charlie.nelson;Remote;in use;2024-10-07;2027-10-06;2026-08-29;2028-10-07;
27;;ENG-LT-007;S-LN-1027;Lenovo;ThinkPad P1 Gen 7;Laptop;frankie.carter;East Branch;In use;2024-07-01;2027-06-30;2026-07-06;2028-07-01;Inventory number missing
28;AST-028;ENG-DT-008;S-DL-1028;Dell;Precision 3680;Desktop;phoenix.mitchell;East Branch;Repair;2024-08-12;2027-08-11;2026-09-03;2028-08-12;Power supply fault
29;AST-029;ENG-LT-009;S-HP-1029;HP;ZBook Power G11;Laptop;river.perez;remote;Active;2025-07-01;;2026-08-31;2029-07-01;Warranty missing
30;AST-030;ENG-LT-010;S-LN-1030;Lenovo;ThinkPad P1 Gen 7;Laptop;;Warehouse;In Stock;2025-02-03;2028-02-02;2026-05-03;2029-02-03;Spare
What Do These Rows Test?
This group repeats the missing Inventory number problem. It also adds location aliases, status aliases, a missing maintenance date, and a missing warranty date.
- Save candidate/asset-register.csv.
- Scroll to source row 27.
You should see an empty Asset_ID field before ENG-LT-007.
Blank Field Filled Accidentally?
Keep the two semicolons immediately after source row 27. That empty position represents the missing Inventory number.
If the row shifted into the wrong columns, ask for help checking source row 27.
- Place your cursor after source row 30.
- Append source rows 31 through 40 by pasting this data block:
31;AST-031;OPS-LT-001;S-DL-1031;Dell;Latitude 5450;Laptop;sage.roberts;HQ Floor 1;In use;2024-02-26;2027-02-25;2026-07-11;2028-02-26;
32;AST-032;OPS-LT-002;S-DL-1032;Dell;Latitude 5450;Laptop;;HQ Floor 1;active;2024-02-26;2027-02-25;2026-07-12;2028-02-26;In-use asset has no owner
33;AST-033; OPS-LT-003 ;S-LN-1033;Lenovo;ThinkPad T14 Gen 5;Laptop;kendall.turner;HQ-1;In Use;2024-06-10;2027-06-09;2026-06-22;2028-06-10;Name contains surrounding spaces
34;AST-034;OPS-LT-004;S-LN-1034;Lenovo;ThinkPad T14 Gen 5;Laptop;marley.phillips;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-23;2028-06-10;
35;AST-035;OPS-LT-004;S-LN-1035;Lenovo;ThinkPad T14 Gen 5;Laptop;remy.campbell;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-24;2028-06-10;Duplicate computer name
36;AST-036;OPS-DT-006;S-HP-1036;HP;Pro Mini 400 G9;Desktop;shawn.evans;HQ Floor 2;In use;2023-12-04;2026-12-03;2025-05-04;2028-12-04;
37;AST-037;OPS-DT-007;S-HP-1037;HP;Pro Mini 400 G9;Desktop;;Warehouse;stock;2023-12-04;2026-12-03;2025-05-05;2028-12-04;Spare
38;AST-038;OPS-LT-008;;Lenovo;ThinkPad T14 Gen 4;Laptop;devon.edwards;HQ Floor 2;In use;2023-07-17;2026-07-16;2025-02-17;2027-07-17;Serial missing
39;AST-039;OPS-LT-009;S-DL-1039;Dell;Latitude 5440;Laptop;micah.collins;Remote;maintenance;2023-04-03;2026-04-02;2026-09-05;2027-04-03;Battery service
40;AST-040;OPS-DT-010;S-DL-1040;Dell;OptiPlex 7010;Desktop;noel.stewart;HQ Floor 1;In use;2023-05-01;2026-04-30;2025-04-30;2022-05-01;Disposal date precedes purchase
What Do These Rows Test?
These rows introduce surrounding whitespace and a duplicate Computer name. They also contain an ownership gap, a missing serial number, and an impossible disposal date.
- Save candidate/asset-register.csv.
- Compare source rows 34 and 35.
You should see OPS-LT-004 as the Computer name in both records.
Malformed Names Look Normal?
Preserve the spaces around OPS-LT-003 in source row 33. Keep the duplicate OPS-LT-004 names in source rows 34 and 35.
If your editor trimmed the value, ask for help restoring the deliberate name defects.
- Place your cursor after source row 40.
- Append source rows 41 through 50 by pasting this final data block:
41;AST-041;SAL-LT-001;S-HP-1041;HP;EliteBook 840 G11;Laptop;ari.morris;Remote;In use;2024-09-16;2027-09-15;2026-08-15;2028-09-16;
42;AST-042;SAL-LT-002;S-HP-1042;HP;EliteBook 840 G11;Laptop;lee.rogers;remote worker;Active;2024-09-16;2027-09-15;2026-08-16;2028-09-16;
43;AST-043;SAL-SP-003;S-MS-1043;Microsoft;Surface Laptop 6;Laptop;jaime.reed;East Branch;deployed;2024-04-29;2027-04-28;2026-04-29;2028-04-29;
44;AST-044;SAL-LT-004;S-DL-1044;Dell;Latitude 5450;Laptop;alexis.cook;Branch East;In Use;2024-02-19;2027-02-18;2026-06-19;2028-02-19;
45;AST-045;SAL-LT-005;S-LN-1045;Lenovo;ThinkPad T14 Gen 5;Laptop;marin.bailey;East Branch;In use;2025-04-01;2024-03-31;2026-07-19;2029-04-01;Warranty precedes purchase
46;AST-046;SAL-DT-006;S-HP-1046;HP;Pro Mini 400 G9;Desktop;;Warehouse;Retired;2022-01-10;2025-01-09;2024-06-10;;Retired without disposal date
47;AST-047;SAL-DT-007;S-DL-1047;Dell;OptiPlex 7010;Desktop;;Warehouse;disposed;2022-02-14;2025-02-13;2024-07-14;2026-02-28;Ready for disposal record
48;AST-048;SAL-LT-008;S-DL-1048;Dell;Latitude 5440;Laptop;casey.ward;Remote;In use;2023-03-20;2026-03-19;2025-02-20;2027-03-20;
49;AST-049;SAL-LT-009;S-LN-1049;Lenovo;ThinkPad T14 Gen 4;Laptop;jules.bell;HQ Floor 2;Repair;2023-07-24;2026-07-23;2026-09-06;2027-07-24;Display replacement
50;AST-050;SAL-LT-010;S-HP-1050;HP;EliteBook 840 G11;Laptop;andrea.murphy;HQ2;In use;2024-09-23;2027-09-22;2026-08-23;2028-09-23;
What Do These Rows Test?
The final rows include location and status aliases. They also contain a warranty date before purchase and a retired asset without a disposal date.
- Save candidate/asset-register.csv.
- Scroll from the header to the final source row.
You should see one header row followed by source rows 1 through 50.
Register Does Not End at Row 50?
Check for a missing pasted block or a duplicated block. The source row numbers must progress from 1 through 50 once each.
If the sequence is broken, ask for help finding the missing or repeated rows.
✔️ Awesome, I've got everything!
Your register now contains the complete header and all 50 deliberately flawed source rows.
ⓧ I'd like to double check the full code
Source_Row;Asset_ID;Name;Serial_Number;Manufacturer;Model;Type;Assigned_User;Location;Status;Purchase_Date;Warranty_End;Last_Maintenance;Planned_Disposal;Notes
1;AST-001;FIN-LT-001;S-DL-1001;Dell;Latitude 5450;Laptop;alex.morgan;HQ Floor 1;In use;2024-02-12;2027-02-11;2026-07-01;2028-02-12;Finance standard build
2;AST-002;FIN-LT-002;S-DL-1002;Dell;Latitude 5450;Laptop;jamie.lee;HQ1;active;2024-02-12;2027-02-11;2026-06-15;2028-02-12;Finance standard build
3;AST-003;FIN-DT-003;S-HP-1003;HP;Pro Mini 400 G9;Desktop;sam.patel;hq floor 1;Deployed;2023-11-20;2026-11-19;2025-03-10;2028-11-20;Fixed workstation
4;AST-004;FIN-LT-004;S-LN-1004;Lenovo;ThinkPad T14 Gen 5;Laptop;taylor.chen;HQ Floor 2;In Use;2024-05-06;2027-05-05;2026-05-20;2028-05-06;
5;AST-005;FIN-LT-005;S-LN-1005;Lenovo;ThinkPad T14 Gen 5;Laptop;robin.khan;HQ-2;in use;2024-05-06;2027-05-05;2026-05-21;2028-05-06;
6;AST-006;FIN-DT-006;S-DL-1006;Dell;OptiPlex 7020;Desktop;morgan.diaz;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-17;2028-08-14;
7;AST-007;FIN-DT-007;S-DL-1006;Dell;OptiPlex 7020;Desktop;casey.ng;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-18;2028-08-14;Serial conflicts with row 6
8;AST-008;FIN-LT-008;S-HP-1008;HP;EliteBook 840 G11;Laptop;drew.smith;Remote;Active;2024-09-02;2027-09-01;2026-08-01;2028-09-02;
9;AST-009;FIN-LT-009;S-HP-1009;HP;EliteBook 840 G11;Laptop;avery.jones;remote worker;in-use;2024-09-02;2027-09-01;2026-08-02;2028-09-02;
10;AST-010;FIN-SP-010;S-MS-1010;Microsoft;Surface Laptop 6;Laptop;quinn.brown;Remote;In use;2024-03-31;;2025-02-01;2028-03-31;Warranty missing
11;AST-011;HR-LT-001;S-DL-1011;Dell;Latitude 5450;Laptop;jordan.wilson;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-09;2028-01-08;
12;AST-012;HR-LT-002;S-DL-1012;Dell;Latitude 5450;Laptop;;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-10;2028-01-08;In-use asset has no owner
13;;HR-LT-003;S-LN-1013;Lenovo;ThinkPad T14 Gen 4;Laptop;riley.garcia;HQ Floor 2;In use;2023-06-19;2026-06-18;2025-01-10;2027-06-19;Inventory number missing
14;AST-014;HR-DT-004;S-HP-1014;HP;Pro Mini 400 G9;Desktop;parker.martin;HQ2;deployed;2023-10-02;2026-10-01;2025-11-04;2028-10-02;
15;AST-015;HR-LT-005;S-LN-1015;Lenovo;ThinkPad T14 Gen 4;Laptop;dakota.clark;HQ Floor 2;Maintenance;2023-06-19;2026-06-18;2026-09-01;2027-06-19;Keyboard replacement
16;AST-016;HR-LT-006;S-DL-1016;Dell;Latitude 5450;Laptop;;Warehouse;In Stock;2025-01-15;2028-01-14;2026-04-15;2029-01-15;Spare
17;AST-017;HR-LT-007;S-DL-1017;Dell;Latitude 5450;Laptop;;warehouse;stock;2025-01-15;2028-01-14;2026-04-16;2029-01-15;Spare
18;AST-018;HR-SP-008;S-MS-1018;Microsoft;Surface Laptop 6;Laptop;skyler.white;Remote;In use;2024-04-22;2027-04-21;2026-02-20;2028-04-22;
19;AST-019;HR-DT-009;S-HP-1019;HP;Pro Mini 400 G9;Desktop;emerson.hall;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-11;2028-09-11;
20;AST-019;HR-DT-010;S-HP-1020;HP;Pro Mini 400 G9;Desktop;finley.young;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-12;2028-09-11;Duplicate inventory number
21;AST-021;ENG-LT-001;S-LN-1021;Lenovo;ThinkPad P1 Gen 7;Laptop;harper.king;East Branch;In use;2024-07-01;2027-06-30;2026-07-05;2028-07-01;Engineering workstation
22;AST-022;ENG-LT-002;S-LN-1022;Lenovo;ThinkPad P1 Gen 7;Laptop;rowan.scott;Branch-East;Active;2024-07-01;2027-06-30;;2028-07-01;Maintenance missing
23;AST-023;ENG-DT-003;S-DL-1023;Dell;Precision 3680;Desktop;reese.green;East Branch;In use;2024-08-12;2027-08-11;2026-08-20;2028-08-12;
24;AST-024;ENG-DT-004;S-DL-1024;Dell;Precision 3680;Desktop;hayden.adams;east branch;deployed;2024-08-12;2027-08-11;2026-08-21;2028-08-12;
25;AST-025;ENG-LT-005;S-HP-1025;HP;ZBook Power G11;Laptop;blake.baker;Remote;In Use;2024-10-07;2027-10-06;2026-08-28;2028-10-07;
26;AST-026;ENG-LT-006;S-HP-1026;HP;ZBook Power G11;Laptop;charlie.nelson;Remote;in use;2024-10-07;2027-10-06;2026-08-29;2028-10-07;
27;;ENG-LT-007;S-LN-1027;Lenovo;ThinkPad P1 Gen 7;Laptop;frankie.carter;East Branch;In use;2024-07-01;2027-06-30;2026-07-06;2028-07-01;Inventory number missing
28;AST-028;ENG-DT-008;S-DL-1028;Dell;Precision 3680;Desktop;phoenix.mitchell;East Branch;Repair;2024-08-12;2027-08-11;2026-09-03;2028-08-12;Power supply fault
29;AST-029;ENG-LT-009;S-HP-1029;HP;ZBook Power G11;Laptop;river.perez;remote;Active;2025-07-01;;2026-08-31;2029-07-01;Warranty missing
30;AST-030;ENG-LT-010;S-LN-1030;Lenovo;ThinkPad P1 Gen 7;Laptop;;Warehouse;In Stock;2025-02-03;2028-02-02;2026-05-03;2029-02-03;Spare
31;AST-031;OPS-LT-001;S-DL-1031;Dell;Latitude 5450;Laptop;sage.roberts;HQ Floor 1;In use;2024-02-26;2027-02-25;2026-07-11;2028-02-26;
32;AST-032;OPS-LT-002;S-DL-1032;Dell;Latitude 5450;Laptop;;HQ Floor 1;active;2024-02-26;2027-02-25;2026-07-12;2028-02-26;In-use asset has no owner
33;AST-033; OPS-LT-003 ;S-LN-1033;Lenovo;ThinkPad T14 Gen 5;Laptop;kendall.turner;HQ-1;In Use;2024-06-10;2027-06-09;2026-06-22;2028-06-10;Name contains surrounding spaces
34;AST-034;OPS-LT-004;S-LN-1034;Lenovo;ThinkPad T14 Gen 5;Laptop;marley.phillips;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-23;2028-06-10;
35;AST-035;OPS-LT-004;S-LN-1035;Lenovo;ThinkPad T14 Gen 5;Laptop;remy.campbell;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-24;2028-06-10;Duplicate computer name
36;AST-036;OPS-DT-006;S-HP-1036;HP;Pro Mini 400 G9;Desktop;shawn.evans;HQ Floor 2;In use;2023-12-04;2026-12-03;2025-05-04;2028-12-04;
37;AST-037;OPS-DT-007;S-HP-1037;HP;Pro Mini 400 G9;Desktop;;Warehouse;stock;2023-12-04;2026-12-03;2025-05-05;2028-12-04;Spare
38;AST-038;OPS-LT-008;;Lenovo;ThinkPad T14 Gen 4;Laptop;devon.edwards;HQ Floor 2;In use;2023-07-17;2026-07-16;2025-02-17;2027-07-17;Serial missing
39;AST-039;OPS-LT-009;S-DL-1039;Dell;Latitude 5440;Laptop;micah.collins;Remote;maintenance;2023-04-03;2026-04-02;2026-09-05;2027-04-03;Battery service
40;AST-040;OPS-DT-010;S-DL-1040;Dell;OptiPlex 7010;Desktop;noel.stewart;HQ Floor 1;In use;2023-05-01;2026-04-30;2025-04-30;2022-05-01;Disposal date precedes purchase
41;AST-041;SAL-LT-001;S-HP-1041;HP;EliteBook 840 G11;Laptop;ari.morris;Remote;In use;2024-09-16;2027-09-15;2026-08-15;2028-09-16;
42;AST-042;SAL-LT-002;S-HP-1042;HP;EliteBook 840 G11;Laptop;lee.rogers;remote worker;Active;2024-09-16;2027-09-15;2026-08-16;2028-09-16;
43;AST-043;SAL-SP-003;S-MS-1043;Microsoft;Surface Laptop 6;Laptop;jaime.reed;East Branch;deployed;2024-04-29;2027-04-28;2026-04-29;2028-04-29;
44;AST-044;SAL-LT-004;S-DL-1044;Dell;Latitude 5450;Laptop;alexis.cook;Branch East;In Use;2024-02-19;2027-02-18;2026-06-19;2028-02-19;
45;AST-045;SAL-LT-005;S-LN-1045;Lenovo;ThinkPad T14 Gen 5;Laptop;marin.bailey;East Branch;In use;2025-04-01;2024-03-31;2026-07-19;2029-04-01;Warranty precedes purchase
46;AST-046;SAL-DT-006;S-HP-1046;HP;Pro Mini 400 G9;Desktop;;Warehouse;Retired;2022-01-10;2025-01-09;2024-06-10;;Retired without disposal date
47;AST-047;SAL-DT-007;S-DL-1047;Dell;OptiPlex 7010;Desktop;;Warehouse;disposed;2022-02-14;2025-02-13;2024-07-14;2026-02-28;Ready for disposal record
48;AST-048;SAL-LT-008;S-DL-1048;Dell;Latitude 5440;Laptop;casey.ward;Remote;In use;2023-03-20;2026-03-19;2025-02-20;2027-03-20;
49;AST-049;SAL-LT-009;S-LN-1049;Lenovo;ThinkPad T14 Gen 4;Laptop;jules.bell;HQ Floor 2;Repair;2023-07-24;2026-07-23;2026-09-06;2027-07-24;Display replacement
50;AST-050;SAL-LT-010;S-HP-1050;HP;EliteBook 840 G11;Laptop;andrea.murphy;HQ2;In use;2024-09-23;2027-09-22;2026-08-23;2028-09-23;
How to Compare the Register
Compare the source row sequence and delimiter positions with your saved file. Preserve every missing value, duplicate value, alias, and invalid date because each defect supports the assessment.
Configure and test the dirty import
A reconciliation field tells Data Injection how an incoming row matches an existing Computer. Inventory number is the required link field for this assessment because repeated imports must update the same asset.
- Return to the local GLPI instance at http://localhost:8080.
- Select Tools from the GLPI navigation.
- Select Data injection.
- Start a new template for Computer records.
You should now see the template configuration workflow for Computer imports.
- Enable line creation.
- Enable row updates.
The template now allows new Computers and updates to matched Computers.
- Mark the source file as having a header.
- Set the delimiter to a semicolon.
The import preview should now treat the first line as field names and divide each source row into separate columns.
- Set the encoding to UTF-8.
- Continue to the field-mapping stage.
Each source column now needs a destination in GLPI. Identity mappings determine which physical asset each row represents.
- Map Name to Name.
- Map Serial_Number to Serial number.
- Map Asset_ID to Inventory number.
- Map Manufacturer to Manufacturer.
- Map Model to Model.
- Map Type to Type.
Why Map Identity First?
The identity fields establish what each imported row represents. The classification fields make the resulting Computer list useful for filtering and review.
- Map Assigned_User to User.
- Map Location to Location.
- Map Status to Status.
- Map Purchase_Date to its matching purchase date field.
- Map Warranty_End to its matching warranty field.
- Map Last_Maintenance to its matching lifecycle or financial-information field.
- Map Planned_Disposal to its matching lifecycle or financial-information field.
- Route remaining source data to Comments or an appropriate financial-information field.
The mapping summary should now cover identity, assignment, location, status, lifecycle data, and supporting source details.
- Select Inventory number as the required link field.
- Save the Computer import template.
Why Inventory Number Is Required
Data Injection requires at least one link field. Every imported row must contain the selected field so the plugin can reconcile that row with a Computer.
- Choose the saved Computer template from Data injection.
- Select candidate/asset-register.csv as the source file.
- Set the import encoding to UTF-8.
Before you start the import, predict whether every source row becomes one trustworthy Computer.
- Click Proceed with import.
The result report shows errors or the resulting Computer count fails to reconcile to 50 trustworthy records. The missing and duplicate Inventory numbers expose the weakness in the source register.
The Shortfall Is Intentional
A selected link field must be populated in every imported row. Blank or conflicting Inventory numbers prevent a dependable one-row-to-one-Computer reconciliation.
This visible shortfall gives candidates a concrete problem to diagnose before they can produce a controlled register.
- Capture the Data Injection result report.
- Open the Computer list in GLPI.
- Record the resulting static Computer count as your dirty import Computer count.
You should have an import report showing errors or a static Computer count that does not reconcile to 50 trustworthy Computers.
Dirty Import Looks Successful?
Confirm that Inventory number is the required link field. Check that source rows 13 and 27 still have blank Asset_ID values.
Confirm that source rows 19 and 20 still share AST-019. If the result remains unclear, ask for help interpreting the dirty import.
You now have a candidate pack that turns hidden register defects into observable assessment evidence. Next up, you will build the clean reference outcome and scoring standard that reviewers can apply consistently.
Validate the Scoring Standard
Your dirty import has exposed how unreliable data behaves in GLPI. That evidence proves the assessment contains a meaningful data problem.
Two reviewers still need a shared standard that leads them to the same hiring decision. In this step, you will create the private answer key before validating its clean outcome.
In this step, get ready to:
- Create the private reference register, findings guide, and scoring rubric.
- Import the normalized register through the existing Data Injection template.
- Validate the 100-point rubric against observable evidence.
Create the private answer key
The clean CSV register defines the expected 50-computer result. The findings guide documents every defect that a reviewer should recognize.
- Return to the file editor you used for the candidate pack.
- Create an assessor-only folder inside your assessment folder.
You should see the private folder beside the existing candidate folder.
- Create reference-register.csv inside the assessor-only folder.
- Add the header plus source rows 1 through 17 with this first section:
Source_Row;Asset_ID;Name;Serial_Number;Manufacturer;Model;Type;Assigned_User;Location;Status;Purchase_Date;Warranty_End;Last_Maintenance;Planned_Disposal;Notes
1;AST-001;FIN-LT-001;S-DL-1001;Dell;Latitude 5450;Laptop;alex.morgan;HQ Floor 1;In use;2024-02-12;2027-02-11;2026-07-01;2028-02-12;Finance standard build
2;AST-002;FIN-LT-002;S-DL-1002;Dell;Latitude 5450;Laptop;jamie.lee;HQ Floor 1;In use;2024-02-12;2027-02-11;2026-06-15;2028-02-12;Finance standard build
3;AST-003;FIN-DT-003;S-HP-1003;HP;Pro Mini 400 G9;Desktop;sam.patel;HQ Floor 1;In use;2023-11-20;2026-11-19;2025-03-10;2028-11-20;Fixed workstation
4;AST-004;FIN-LT-004;S-LN-1004;Lenovo;ThinkPad T14 Gen 5;Laptop;taylor.chen;HQ Floor 2;In use;2024-05-06;2027-05-05;2026-05-20;2028-05-06;
5;AST-005;FIN-LT-005;S-LN-1005;Lenovo;ThinkPad T14 Gen 5;Laptop;robin.khan;HQ Floor 2;In use;2024-05-06;2027-05-05;2026-05-21;2028-05-06;
6;AST-006;FIN-DT-006;S-DL-1006;Dell;OptiPlex 7020;Desktop;morgan.diaz;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-17;2028-08-14;
7;AST-007;FIN-DT-007;S-DL-1007;Dell;OptiPlex 7020;Desktop;casey.ng;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-18;2028-08-14;Serial corrected
8;AST-008;FIN-LT-008;S-HP-1008;HP;EliteBook 840 G11;Laptop;drew.smith;Remote;In use;2024-09-02;2027-09-01;2026-08-01;2028-09-02;
9;AST-009;FIN-LT-009;S-HP-1009;HP;EliteBook 840 G11;Laptop;avery.jones;Remote;In use;2024-09-02;2027-09-01;2026-08-02;2028-09-02;
10;AST-010;FIN-SP-010;S-MS-1010;Microsoft;Surface Laptop 6;Laptop;quinn.brown;Remote;In use;2024-03-31;2027-03-30;2025-02-01;2028-03-31;Warranty completed
11;AST-011;HR-LT-001;S-DL-1011;Dell;Latitude 5450;Laptop;jordan.wilson;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-09;2028-01-08;
12;AST-012;HR-LT-002;S-DL-1012;Dell;Latitude 5450;Laptop;unassigned-review;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-10;2028-01-08;Ownership exception flagged
13;AST-013;HR-LT-003;S-LN-1013;Lenovo;ThinkPad T14 Gen 4;Laptop;riley.garcia;HQ Floor 2;In use;2023-06-19;2026-06-18;2025-01-10;2027-06-19;Inventory number assigned
14;AST-014;HR-DT-004;S-HP-1014;HP;Pro Mini 400 G9;Desktop;parker.martin;HQ Floor 2;In use;2023-10-02;2026-10-01;2025-11-04;2028-10-02;
15;AST-015;HR-LT-005;S-LN-1015;Lenovo;ThinkPad T14 Gen 4;Laptop;dakota.clark;HQ Floor 2;Maintenance;2023-06-19;2026-06-18;2026-09-01;2027-06-19;Keyboard replacement
16;AST-016;HR-LT-006;S-DL-1016;Dell;Latitude 5450;Laptop;;Warehouse;In stock;2025-01-15;2028-01-14;2026-04-15;2029-01-15;Spare
17;AST-017;HR-LT-007;S-DL-1017;Dell;Latitude 5450;Laptop;;Warehouse;In stock;2025-01-15;2028-01-14;2026-04-16;2029-01-15;Spare
What does this data establish?
- The header preserves the same mapping used by the candidate register.
- Each Inventory number is populated.
- The corrected fields document deliberate remediation decisions.
- Save assessor-only/reference-register.csv.
- Confirm the final visible source row is 17.
Do the columns look uneven?
Confirm the file uses semicolons between every field. A missing delimiter shifts the remaining values into the wrong columns.
Ask for help checking the first reference-register section.
- Append source rows 18 through 34 below source row 17:
18;AST-018;HR-SP-008;S-MS-1018;Microsoft;Surface Laptop 6;Laptop;skyler.white;Remote;In use;2024-04-22;2027-04-21;2026-02-20;2028-04-22;
19;AST-019;HR-DT-009;S-HP-1019;HP;Pro Mini 400 G9;Desktop;emerson.hall;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-11;2028-09-11;
20;AST-020;HR-DT-010;S-HP-1020;HP;Pro Mini 400 G9;Desktop;finley.young;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-12;2028-09-11;Inventory number corrected
21;AST-021;ENG-LT-001;S-LN-1021;Lenovo;ThinkPad P1 Gen 7;Laptop;harper.king;East Branch;In use;2024-07-01;2027-06-30;2026-07-05;2028-07-01;Engineering workstation
22;AST-022;ENG-LT-002;S-LN-1022;Lenovo;ThinkPad P1 Gen 7;Laptop;rowan.scott;East Branch;In use;2024-07-01;2027-06-30;2026-07-06;2028-07-01;Maintenance completed
23;AST-023;ENG-DT-003;S-DL-1023;Dell;Precision 3680;Desktop;reese.green;East Branch;In use;2024-08-12;2027-08-11;2026-08-20;2028-08-12;
24;AST-024;ENG-DT-004;S-DL-1024;Dell;Precision 3680;Desktop;hayden.adams;East Branch;In use;2024-08-12;2027-08-11;2026-08-21;2028-08-12;
25;AST-025;ENG-LT-005;S-HP-1025;HP;ZBook Power G11;Laptop;blake.baker;Remote;In use;2024-10-07;2027-10-06;2026-08-28;2028-10-07;
26;AST-026;ENG-LT-006;S-HP-1026;HP;ZBook Power G11;Laptop;charlie.nelson;Remote;In use;2024-10-07;2027-10-06;2026-08-29;2028-10-07;
27;AST-027;ENG-LT-007;S-LN-1027;Lenovo;ThinkPad P1 Gen 7;Laptop;frankie.carter;East Branch;In use;2024-07-01;2027-06-30;2026-07-06;2028-07-01;Inventory number assigned
28;AST-028;ENG-DT-008;S-DL-1028;Dell;Precision 3680;Desktop;phoenix.mitchell;East Branch;Maintenance;2024-08-12;2027-08-11;2026-09-03;2028-08-12;Power supply fault
29;AST-029;ENG-LT-009;S-HP-1029;HP;ZBook Power G11;Laptop;river.perez;Remote;In use;2025-07-01;2028-06-30;2026-08-31;2029-07-01;Warranty completed
30;AST-030;ENG-LT-010;S-LN-1030;Lenovo;ThinkPad P1 Gen 7;Laptop;;Warehouse;In stock;2025-02-03;2028-02-02;2026-05-03;2029-02-03;Spare
31;AST-031;OPS-LT-001;S-DL-1031;Dell;Latitude 5450;Laptop;sage.roberts;HQ Floor 1;In use;2024-02-26;2027-02-25;2026-07-11;2028-02-26;
32;AST-032;OPS-LT-002;S-DL-1032;Dell;Latitude 5450;Laptop;unassigned-review;HQ Floor 1;In use;2024-02-26;2027-02-25;2026-07-12;2028-02-26;Ownership exception flagged
33;AST-033;OPS-LT-003;S-LN-1033;Lenovo;ThinkPad T14 Gen 5;Laptop;kendall.turner;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-22;2028-06-10;Name trimmed
34;AST-034;OPS-LT-004;S-LN-1034;Lenovo;ThinkPad T14 Gen 5;Laptop;marley.phillips;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-23;2028-06-10;
What does this section resolve?
- Rows 20 and 27 replace missing or duplicate Inventory numbers.
- Rows 22 and 29 complete missing lifecycle dates.
- The location vocabulary now uses the approved forms.
- Save assessor-only/reference-register.csv.
- Confirm source row 34 now sits directly below source row 33.
Are the source rows out of order?
Check that the second section begins immediately after source row 17. Duplicate headers or skipped rows make the reference outcome unreliable.
Ask for help locating a row-order problem.
- Append source rows 35 through 50 below source row 34:
35;AST-035;OPS-LT-005;S-LN-1035;Lenovo;ThinkPad T14 Gen 5;Laptop;remy.campbell;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-24;2028-06-10;Name corrected
36;AST-036;OPS-DT-006;S-HP-1036;HP;Pro Mini 400 G9;Desktop;shawn.evans;HQ Floor 2;In use;2023-12-04;2026-12-03;2025-05-04;2028-12-04;
37;AST-037;OPS-DT-007;S-HP-1037;HP;Pro Mini 400 G9;Desktop;;Warehouse;In stock;2023-12-04;2026-12-03;2025-05-05;2028-12-04;Spare
38;AST-038;OPS-LT-008;S-LN-1038;Lenovo;ThinkPad T14 Gen 4;Laptop;devon.edwards;HQ Floor 2;In use;2023-07-17;2026-07-16;2025-02-17;2027-07-17;Serial assigned
39;AST-039;OPS-LT-009;S-DL-1039;Dell;Latitude 5440;Laptop;micah.collins;Remote;Maintenance;2023-04-03;2026-04-02;2026-09-05;2027-04-03;Battery service
40;AST-040;OPS-DT-010;S-DL-1040;Dell;OptiPlex 7010;Desktop;noel.stewart;HQ Floor 1;In use;2023-05-01;2026-04-30;2025-04-30;2028-05-01;Disposal date corrected
41;AST-041;SAL-LT-001;S-HP-1041;HP;EliteBook 840 G11;Laptop;ari.morris;Remote;In use;2024-09-16;2027-09-15;2026-08-15;2028-09-16;
42;AST-042;SAL-LT-002;S-HP-1042;HP;EliteBook 840 G11;Laptop;lee.rogers;Remote;In use;2024-09-16;2027-09-15;2026-08-16;2028-09-16;
43;AST-043;SAL-SP-003;S-MS-1043;Microsoft;Surface Laptop 6;Laptop;jaime.reed;East Branch;In use;2024-04-29;2027-04-28;2026-04-29;2028-04-29;
44;AST-044;SAL-LT-004;S-DL-1044;Dell;Latitude 5450;Laptop;alexis.cook;East Branch;In use;2024-02-19;2027-02-18;2026-06-19;2028-02-19;
45;AST-045;SAL-LT-005;S-LN-1045;Lenovo;ThinkPad T14 Gen 5;Laptop;marin.bailey;East Branch;In use;2025-04-01;2028-03-31;2026-07-19;2029-04-01;Warranty date corrected
46;AST-046;SAL-DT-006;S-HP-1046;HP;Pro Mini 400 G9;Desktop;;Warehouse;Retired;2022-01-10;2025-01-09;2024-06-10;2026-01-31;Disposal date completed
47;AST-047;SAL-DT-007;S-DL-1047;Dell;OptiPlex 7010;Desktop;;Warehouse;Retired;2022-02-14;2025-02-13;2024-07-14;2026-02-28;Ready for disposal record
48;AST-048;SAL-LT-008;S-DL-1048;Dell;Latitude 5440;Laptop;casey.ward;Remote;In use;2023-03-20;2026-03-19;2025-02-20;2027-03-20;
49;AST-049;SAL-LT-009;S-LN-1049;Lenovo;ThinkPad T14 Gen 4;Laptop;jules.bell;HQ Floor 2;Maintenance;2023-07-24;2026-07-23;2026-09-06;2027-07-24;Display replacement
50;AST-050;SAL-LT-010;S-HP-1050;HP;EliteBook 840 G11;Laptop;andrea.murphy;HQ Floor 2;In use;2024-09-23;2027-09-22;2026-08-23;2028-09-23;
What completes the reference register?
- The final rows resolve duplicate names plus missing serial information.
- The corrected dates preserve a defensible lifecycle sequence.
- The completed file contains one clean reference row for every source row.
- Save assessor-only/reference-register.csv.
- Confirm the file ends with source row 50.
Is the final row missing?
Check that the last section begins with source row 35. Confirm that source row 50 remains the final record.
Ask for help checking the completed reference register.
✔️ Awesome, I've got everything!
Great. Save assessor-only/reference-register.csv before continuing.
ⓧ I'd like to double check the full code
Source_Row;Asset_ID;Name;Serial_Number;Manufacturer;Model;Type;Assigned_User;Location;Status;Purchase_Date;Warranty_End;Last_Maintenance;Planned_Disposal;Notes
1;AST-001;FIN-LT-001;S-DL-1001;Dell;Latitude 5450;Laptop;alex.morgan;HQ Floor 1;In use;2024-02-12;2027-02-11;2026-07-01;2028-02-12;Finance standard build
2;AST-002;FIN-LT-002;S-DL-1002;Dell;Latitude 5450;Laptop;jamie.lee;HQ Floor 1;In use;2024-02-12;2027-02-11;2026-06-15;2028-02-12;Finance standard build
3;AST-003;FIN-DT-003;S-HP-1003;HP;Pro Mini 400 G9;Desktop;sam.patel;HQ Floor 1;In use;2023-11-20;2026-11-19;2025-03-10;2028-11-20;Fixed workstation
4;AST-004;FIN-LT-004;S-LN-1004;Lenovo;ThinkPad T14 Gen 5;Laptop;taylor.chen;HQ Floor 2;In use;2024-05-06;2027-05-05;2026-05-20;2028-05-06;
5;AST-005;FIN-LT-005;S-LN-1005;Lenovo;ThinkPad T14 Gen 5;Laptop;robin.khan;HQ Floor 2;In use;2024-05-06;2027-05-05;2026-05-21;2028-05-06;
6;AST-006;FIN-DT-006;S-DL-1006;Dell;OptiPlex 7020;Desktop;morgan.diaz;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-17;2028-08-14;
7;AST-007;FIN-DT-007;S-DL-1007;Dell;OptiPlex 7020;Desktop;casey.ng;HQ Floor 1;In use;2023-08-14;2026-08-13;2026-01-18;2028-08-14;Serial corrected
8;AST-008;FIN-LT-008;S-HP-1008;HP;EliteBook 840 G11;Laptop;drew.smith;Remote;In use;2024-09-02;2027-09-01;2026-08-01;2028-09-02;
9;AST-009;FIN-LT-009;S-HP-1009;HP;EliteBook 840 G11;Laptop;avery.jones;Remote;In use;2024-09-02;2027-09-01;2026-08-02;2028-09-02;
10;AST-010;FIN-SP-010;S-MS-1010;Microsoft;Surface Laptop 6;Laptop;quinn.brown;Remote;In use;2024-03-31;2027-03-30;2025-02-01;2028-03-31;Warranty completed
11;AST-011;HR-LT-001;S-DL-1011;Dell;Latitude 5450;Laptop;jordan.wilson;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-09;2028-01-08;
12;AST-012;HR-LT-002;S-DL-1012;Dell;Latitude 5450;Laptop;unassigned-review;HQ Floor 2;In use;2024-01-08;2027-01-07;2026-06-10;2028-01-08;Ownership exception flagged
13;AST-013;HR-LT-003;S-LN-1013;Lenovo;ThinkPad T14 Gen 4;Laptop;riley.garcia;HQ Floor 2;In use;2023-06-19;2026-06-18;2025-01-10;2027-06-19;Inventory number assigned
14;AST-014;HR-DT-004;S-HP-1014;HP;Pro Mini 400 G9;Desktop;parker.martin;HQ Floor 2;In use;2023-10-02;2026-10-01;2025-11-04;2028-10-02;
15;AST-015;HR-LT-005;S-LN-1015;Lenovo;ThinkPad T14 Gen 4;Laptop;dakota.clark;HQ Floor 2;Maintenance;2023-06-19;2026-06-18;2026-09-01;2027-06-19;Keyboard replacement
16;AST-016;HR-LT-006;S-DL-1016;Dell;Latitude 5450;Laptop;;Warehouse;In stock;2025-01-15;2028-01-14;2026-04-15;2029-01-15;Spare
17;AST-017;HR-LT-007;S-DL-1017;Dell;Latitude 5450;Laptop;;Warehouse;In stock;2025-01-15;2028-01-14;2026-04-16;2029-01-15;Spare
18;AST-018;HR-SP-008;S-MS-1018;Microsoft;Surface Laptop 6;Laptop;skyler.white;Remote;In use;2024-04-22;2027-04-21;2026-02-20;2028-04-22;
19;AST-019;HR-DT-009;S-HP-1019;HP;Pro Mini 400 G9;Desktop;emerson.hall;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-11;2028-09-11;
20;AST-020;HR-DT-010;S-HP-1020;HP;Pro Mini 400 G9;Desktop;finley.young;HQ Floor 1;In use;2023-09-11;2026-09-10;2025-10-12;2028-09-11;Inventory number corrected
21;AST-021;ENG-LT-001;S-LN-1021;Lenovo;ThinkPad P1 Gen 7;Laptop;harper.king;East Branch;In use;2024-07-01;2027-06-30;2026-07-05;2028-07-01;Engineering workstation
22;AST-022;ENG-LT-002;S-LN-1022;Lenovo;ThinkPad P1 Gen 7;Laptop;rowan.scott;East Branch;In use;2024-07-01;2027-06-30;2026-07-06;2028-07-01;Maintenance completed
23;AST-023;ENG-DT-003;S-DL-1023;Dell;Precision 3680;Desktop;reese.green;East Branch;In use;2024-08-12;2027-08-11;2026-08-20;2028-08-12;
24;AST-024;ENG-DT-004;S-DL-1024;Dell;Precision 3680;Desktop;hayden.adams;East Branch;In use;2024-08-12;2027-08-11;2026-08-21;2028-08-12;
25;AST-025;ENG-LT-005;S-HP-1025;HP;ZBook Power G11;Laptop;blake.baker;Remote;In use;2024-10-07;2027-10-06;2026-08-28;2028-10-07;
26;AST-026;ENG-LT-006;S-HP-1026;HP;ZBook Power G11;Laptop;charlie.nelson;Remote;In use;2024-10-07;2027-10-06;2026-08-29;2028-10-07;
27;AST-027;ENG-LT-007;S-LN-1027;Lenovo;ThinkPad P1 Gen 7;Laptop;frankie.carter;East Branch;In use;2024-07-01;2027-06-30;2026-07-06;2028-07-01;Inventory number assigned
28;AST-028;ENG-DT-008;S-DL-1028;Dell;Precision 3680;Desktop;phoenix.mitchell;East Branch;Maintenance;2024-08-12;2027-08-11;2026-09-03;2028-08-12;Power supply fault
29;AST-029;ENG-LT-009;S-HP-1029;HP;ZBook Power G11;Laptop;river.perez;Remote;In use;2025-07-01;2028-06-30;2026-08-31;2029-07-01;Warranty completed
30;AST-030;ENG-LT-010;S-LN-1030;Lenovo;ThinkPad P1 Gen 7;Laptop;;Warehouse;In stock;2025-02-03;2028-02-02;2026-05-03;2029-02-03;Spare
31;AST-031;OPS-LT-001;S-DL-1031;Dell;Latitude 5450;Laptop;sage.roberts;HQ Floor 1;In use;2024-02-26;2027-02-25;2026-07-11;2028-02-26;
32;AST-032;OPS-LT-002;S-DL-1032;Dell;Latitude 5450;Laptop;unassigned-review;HQ Floor 1;In use;2024-02-26;2027-02-25;2026-07-12;2028-02-26;Ownership exception flagged
33;AST-033;OPS-LT-003;S-LN-1033;Lenovo;ThinkPad T14 Gen 5;Laptop;kendall.turner;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-22;2028-06-10;Name trimmed
34;AST-034;OPS-LT-004;S-LN-1034;Lenovo;ThinkPad T14 Gen 5;Laptop;marley.phillips;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-23;2028-06-10;
35;AST-035;OPS-LT-005;S-LN-1035;Lenovo;ThinkPad T14 Gen 5;Laptop;remy.campbell;HQ Floor 1;In use;2024-06-10;2027-06-09;2026-06-24;2028-06-10;Name corrected
36;AST-036;OPS-DT-006;S-HP-1036;HP;Pro Mini 400 G9;Desktop;shawn.evans;HQ Floor 2;In use;2023-12-04;2026-12-03;2025-05-04;2028-12-04;
37;AST-037;OPS-DT-007;S-HP-1037;HP;Pro Mini 400 G9;Desktop;;Warehouse;In stock;2023-12-04;2026-12-03;2025-05-05;2028-12-04;Spare
38;AST-038;OPS-LT-008;S-LN-1038;Lenovo;ThinkPad T14 Gen 4;Laptop;devon.edwards;HQ Floor 2;In use;2023-07-17;2026-07-16;2025-02-17;2027-07-17;Serial assigned
39;AST-039;OPS-LT-009;S-DL-1039;Dell;Latitude 5440;Laptop;micah.collins;Remote;Maintenance;2023-04-03;2026-04-02;2026-09-05;2027-04-03;Battery service
40;AST-040;OPS-DT-010;S-DL-1040;Dell;OptiPlex 7010;Desktop;noel.stewart;HQ Floor 1;In use;2023-05-01;2026-04-30;2025-04-30;2028-05-01;Disposal date corrected
41;AST-041;SAL-LT-001;S-HP-1041;HP;EliteBook 840 G11;Laptop;ari.morris;Remote;In use;2024-09-16;2027-09-15;2026-08-15;2028-09-16;
42;AST-042;SAL-LT-002;S-HP-1042;HP;EliteBook 840 G11;Laptop;lee.rogers;Remote;In use;2024-09-16;2027-09-15;2026-08-16;2028-09-16;
43;AST-043;SAL-SP-003;S-MS-1043;Microsoft;Surface Laptop 6;Laptop;jaime.reed;East Branch;In use;2024-04-29;2027-04-28;2026-04-29;2028-04-29;
44;AST-044;SAL-LT-004;S-DL-1044;Dell;Latitude 5450;Laptop;alexis.cook;East Branch;In use;2024-02-19;2027-02-18;2026-06-19;2028-02-19;
45;AST-045;SAL-LT-005;S-LN-1045;Lenovo;ThinkPad T14 Gen 5;Laptop;marin.bailey;East Branch;In use;2025-04-01;2028-03-31;2026-07-19;2029-04-01;Warranty date corrected
46;AST-046;SAL-DT-006;S-HP-1046;HP;Pro Mini 400 G9;Desktop;;Warehouse;Retired;2022-01-10;2025-01-09;2024-06-10;2026-01-31;Disposal date completed
47;AST-047;SAL-DT-007;S-DL-1047;Dell;OptiPlex 7010;Desktop;;Warehouse;Retired;2022-02-14;2025-02-13;2024-07-14;2026-02-28;Ready for disposal record
48;AST-048;SAL-LT-008;S-DL-1048;Dell;Latitude 5440;Laptop;casey.ward;Remote;In use;2023-03-20;2026-03-19;2025-02-20;2027-03-20;
49;AST-049;SAL-LT-009;S-LN-1049;Lenovo;ThinkPad T14 Gen 4;Laptop;jules.bell;HQ Floor 2;Maintenance;2023-07-24;2026-07-23;2026-09-06;2027-07-24;Display replacement
50;AST-050;SAL-LT-010;S-HP-1050;HP;EliteBook 840 G11;Laptop;andrea.murphy;HQ Floor 2;In use;2024-09-23;2027-09-22;2026-08-23;2028-09-23;
- Create expected-findings.md inside the assessor-only folder.
- Add the identity plus normalization findings with this first section:
# Expected Findings
## Blocking identity defects
- Missing Inventory numbers: source rows 13 and 27
- Duplicate Inventory number: source rows 19 and 20 both use AST-019
- Duplicate serial number: source rows 6 and 7 both use S-DL-1006
- Missing serial number: source row 38
- Duplicate Computer name: source rows 34 and 35
- Surrounding whitespace in a Computer name: source row 33
## Normalization defects
- Location aliases must resolve to HQ Floor 1, HQ Floor 2, Warehouse, Remote, or East Branch.
- Status aliases must resolve to In use, In stock, Maintenance, or Retired.
- In-use assets without a named owner occur on source rows 12 and 32. A candidate may assign a verified user or flag an explicit ownership exception.
What does this guide capture?
- The identity section names defects that can block reliable reconciliation.
- The normalization section defines the approved vocabulary.
- The ownership rule allows a documented exception when assignment cannot be verified.
- Save assessor-only/expected-findings.md.
- Confirm the first section ends with the ownership exception rule.
Are any identity defects missing?
Compare the listed source rows with the dirty register. The guide must retain each missing identifier plus each duplicate identifier.
Ask for help comparing the identity findings.
- Append the lifecycle plus acceptable-evidence sections below the ownership rule:
## Lifecycle defects
- Missing warranty dates: source rows 10 and 29
- Missing maintenance date: source row 22
- Planned disposal before purchase: source row 40
- Warranty before purchase: source row 45
- Retired asset without a disposal date: source row 46
## Acceptable evidence
- Exactly 50 static Computer records after remediation
- Unique and populated Inventory numbers for all 50 records
- No unresolved duplicate serials or duplicate Computer names
- Normalized location and status vocabulary
- Lifecycle dates that are present and chronologically defensible
- One additional dynamic Computer reported by GLPI Agent with operating-system and installed-software data
Why include acceptable evidence?
The defect list tells reviewers what changed. The acceptable-evidence section tells them what a successful system must visibly prove.
- Save assessor-only/expected-findings.md.
- Confirm the guide ends with evidence for one dynamic Computer.
Do lifecycle findings conflict?
Check the source-row numbers against the dirty register. Keep warranty, maintenance, purchase, and disposal findings in their matching categories.
Ask for help checking the lifecycle findings.
✔️ Awesome, I've got everything!
Your private findings guide now covers the designed defects plus the acceptable outcome.
ⓧ I'd like to double check the full code
# Expected Findings
## Blocking identity defects
- Missing Inventory numbers: source rows 13 and 27
- Duplicate Inventory number: source rows 19 and 20 both use AST-019
- Duplicate serial number: source rows 6 and 7 both use S-DL-1006
- Missing serial number: source row 38
- Duplicate Computer name: source rows 34 and 35
- Surrounding whitespace in a Computer name: source row 33
## Normalization defects
- Location aliases must resolve to HQ Floor 1, HQ Floor 2, Warehouse, Remote, or East Branch.
- Status aliases must resolve to In use, In stock, Maintenance, or Retired.
- In-use assets without a named owner occur on source rows 12 and 32. A candidate may assign a verified user or flag an explicit ownership exception.
## Lifecycle defects
- Missing warranty dates: source rows 10 and 29
- Missing maintenance date: source row 22
- Planned disposal before purchase: source row 40
- Warranty before purchase: source row 45
- Retired asset without a disposal date: source row 46
## Acceptable evidence
- Exactly 50 static Computer records after remediation
- Unique and populated Inventory numbers for all 50 records
- No unresolved duplicate serials or duplicate Computer names
- Normalized location and status vocabulary
- Lifecycle dates that are present and chronologically defensible
- One additional dynamic Computer reported by GLPI Agent with operating-system and installed-software data
- Create scoring-rubric.md inside the assessor-only folder.
- Add the deployment plus remediation sections with this first rubric section:
# Scoring Rubric
Total: 100 points
Recommended pass mark: 70
## Docker and GLPI deployment: 15 points
- 5: Both Compose services are running and GLPI is reachable.
- 5: Data persists through a container restart.
- 5: The administrator password is changed and secrets are absent from submitted evidence.
## Register remediation and import: 25 points
- 8: Exactly 50 legitimate static Computers are present.
- 7: Inventory numbers are populated and unique, with Inventory number used as the link field.
- 5: Duplicate or missing names and serial numbers are resolved or explicitly quarantined.
- 5: The Data Injection report is supplied and material errors are addressed.
What does this rubric prioritize?
Deployment earns points for a reachable system plus persistent data. Register remediation earns points for a trustworthy 50-computer result.
- Save assessor-only/scoring-rubric.md.
- Confirm the first two dimensions total 40 points.
Do the points look uneven?
Keep deployment evidence separate from register quality. Combining them would hide whether the candidate can operate the platform or remediate its data.
Ask for help checking the first two scoring dimensions.
- Append the lifecycle plus automated-inventory sections below the Data Injection criterion:
## Lifecycle quality: 25 points
- 6: Locations use the approved five-value vocabulary.
- 6: Statuses use In use, In stock, Maintenance, or Retired consistently.
- 5: In-use ownership gaps are resolved or explicitly flagged.
- 4: Purchase and warranty dates are populated and chronologically valid.
- 4: Maintenance and planned-disposal evidence is present where required.
## Automated inventory: 25 points
- 5: Native inventory is enabled.
- 5: An OAuth Client Credentials client has the inventory scope.
- 8: GLPI Agent successfully creates or updates a dynamic Windows Computer.
- 4: Current operating-system data is visible.
- 3: Installed-software data is visible.
Why separate these dimensions?
Lifecycle quality measures whether the static register supports decisions. Automated inventory measures whether current endpoint evidence reaches GLPI.
- Save assessor-only/scoring-rubric.md.
- Confirm lifecycle quality plus automated inventory contribute 50 points.
Does manual entry earn inventory points?
Keep the automated-inventory criteria tied to evidence reported by GLPI Agent. A manually created Computer cannot prove endpoint reporting.
Ask for help distinguishing static records from agent evidence.
- Append the evidence, deduction, and bonus sections below the installed-software criterion:
## Evidence and operational judgment: 10 points
- 5: Required screenshots or exports are clear, complete, and contain no secrets.
- 5: The candidate identifies at least one production hardening action, such as HTTPS, restricted network access, backups, or secret rotation.
## Critical deductions
- Minus 20: The candidate imports fewer than 50 legitimate static records without explaining exceptions.
- Minus 20: The candidate exposes a database password or OAuth client secret.
- Zero for automated inventory: The endpoint is entered manually rather than reported by GLPI Agent.
## Bonus calibration check
Award up to 5 bonus points, capped at 100 total, when a repeated import updates a chosen record and leaves the static Computer count at 50.
How do deductions protect the standard?
The deductions identify failures that undermine the assessment result. The bonus rewards maintainable reconciliation without allowing the score to exceed 100.
- Save assessor-only/scoring-rubric.md.
- Confirm the final paragraph caps the total score at 100.
Does the rubric exceed 100 points?
Keep the five bonus points inside the 100-point cap. The core dimensions already total 100 points before deductions.
Ask for help checking the rubric total.
✔️ Awesome, I've got everything!
Your rubric now separates the five scoring dimensions plus the documented deductions.
ⓧ I'd like to double check the full code
# Scoring Rubric
Total: 100 points
Recommended pass mark: 70
## Docker and GLPI deployment: 15 points
- 5: Both Compose services are running and GLPI is reachable.
- 5: Data persists through a container restart.
- 5: The administrator password is changed and secrets are absent from submitted evidence.
## Register remediation and import: 25 points
- 8: Exactly 50 legitimate static Computers are present.
- 7: Inventory numbers are populated and unique, with Inventory number used as the link field.
- 5: Duplicate or missing names and serial numbers are resolved or explicitly quarantined.
- 5: The Data Injection report is supplied and material errors are addressed.
## Lifecycle quality: 25 points
- 6: Locations use the approved five-value vocabulary.
- 6: Statuses use In use, In stock, Maintenance, or Retired consistently.
- 5: In-use ownership gaps are resolved or explicitly flagged.
- 4: Purchase and warranty dates are populated and chronologically valid.
- 4: Maintenance and planned-disposal evidence is present where required.
## Automated inventory: 25 points
- 5: Native inventory is enabled.
- 5: An OAuth Client Credentials client has the inventory scope.
- 8: GLPI Agent successfully creates or updates a dynamic Windows Computer.
- 4: Current operating-system data is visible.
- 3: Installed-software data is visible.
## Evidence and operational judgment: 10 points
- 5: Required screenshots or exports are clear, complete, and contain no secrets.
- 5: The candidate identifies at least one production hardening action, such as HTTPS, restricted network access, backups, or secret rotation.
## Critical deductions
- Minus 20: The candidate imports fewer than 50 legitimate static records without explaining exceptions.
- Minus 20: The candidate exposes a database password or OAuth client secret.
- Zero for automated inventory: The endpoint is entered manually rather than reported by GLPI Agent.
## Bonus calibration check
Award up to 5 bonus points, capped at 100 total, when a repeated import updates a chosen record and leaves the static Computer count at 50.
Import the clean reference register
The existing Data Injection template applies the same mapping rules to both datasets. This makes the clean import a direct test of whether remediation resolves the designed obstacle.
- Return to your signed-in GLPI session at http://localhost:8080.
- Select Tools from the main menu.
- Select Data injection.
- Choose the existing Computer template.
- Select assessor-only/reference-register.csv as the source file.
- Set the encoding to UTF-8.
- Confirm Inventory number remains the required link field.
Before you start the clean import, do you expect the corrected reconciliation values to produce 50 trustworthy static Computers.
- Start the import by selecting Proceed with import.
The clean source completes without the blocking identity defects from the dirty register. The same template can now reconcile the normalized rows.
- Return to the Computer list used for the dirty-import count.
- Confirm the static Computer count is exactly 50.
- Confirm every Computer has a populated Inventory number.
- Confirm the Location column uses the approved five-value vocabulary from expected-findings.md.
- Confirm the Status column uses the approved four-value vocabulary from expected-findings.md.
- Open the lifecycle rows named in expected-findings.md to verify their corrected dates.
That is the reference outcome locked in. Your reviewers now have exactly 50 static Computers to compare against candidate evidence.
Does the count differ from 50?
Confirm you selected the clean reference file. Check that the existing template still uses Inventory number as its required link field.
Ask for help diagnosing the reference import.
Calibrate the 100-point rubric
A scoring criterion becomes defensible when reviewers can trace it to visible evidence. The rubric keeps platform deployment, data quality, lifecycle control, automated inventory, and operational judgment separate.
Before you compare the rubric with the available evidence, which dimension should remain unearned when a candidate cleans the register without connecting an endpoint.
- Return to assessor-only/scoring-rubric.md.
- Confirm the five core dimensions total 100 points.
- Trace each deployment criterion to observable Docker or GLPI evidence.
- Trace each remediation criterion to the Computer count or import report.
- Trace each lifecycle criterion to a visible field in an imported Computer.
- Confirm automated inventory remains a separate 25-point dimension.
- Confirm the critical deductions address incomplete records, exposed secrets, and manual endpoint entry.
- Confirm the optional bonus remains capped at 100 total.
You now have a scoring standard that two reviewers can apply to the same evidence. A candidate can excel in one dimension without hiding a critical gap in another.
Why keep scoring dimensions separate?
Separate dimensions reveal the shape of a candidate's capability. A working deployment cannot compensate for unsafe lifecycle data.
The same boundary protects automated inventory as a practical skill. Manual entry earns no substitute credit.
Your private answer key now produces a verified 50-computer baseline. Next, you will connect the Windows endpoint to prove authenticated automated inventory.
Prove Authenticated Automated Inventory
Your assessor pack now has a clean 50-computer baseline. It also has scoring rules that reviewers can apply consistently.
The final hiring signal comes from live evidence. GLPI must accept current endpoint data from a real Windows computer.
A CSV remains a static snapshot. In this step, you will use OAuth client credentials to let GLPI Agent report current operating-system data. It will also report installed-software inventory.
In this step, get ready to:
- Enable native inventory with OAuth client credentials.
- Configure GLPI Agent 1.19 to send an immediate inventory.
- Verify the dynamic Windows endpoint evidence.
Enable authenticated inventory
Native inventory lets GLPI receive endpoint facts without another CSV import. Agent authentication ensures that only an approved client can submit those facts.
- Return to your signed-in GLPI instance at http://localhost:8080.
- Select Administration from the main navigation.
- Select Inventory.
- Check Enable inventory.
- Select OAuth – Client credentials under Agent authentication.
- Apply the inventory settings using the page's save control.
An OAuth client gives the Windows agent a dedicated machine identity. The scope controls what that identity can do.
- Select Configuration from the main navigation.
- Select OAuth Clients.
- Choose Client Credentials as the client type.
- Add inventory as the scope.
Protect the one-time secret
This screen is easy to rush because GLPI displays the Client Secret only once. Store it in a private credential manager before leaving the page.
Keep the secret out of screenshots. Keep it out of the candidate package too.
- Create the OAuth client using the page control.
- Record the displayed Client ID here: your OAuth client ID.
- Store the one-time Client Secret in your private credential manager.
Why client credentials?
Client credentials give the agent a dedicated machine identity. The inventory scope limits that identity to inventory work.
This creates evidence that the endpoint reported through an authenticated process. That evidence is stronger than a manually created Computer record.
Configure the Windows agent
GLPI Agent 1.19 is already installed from earlier. Rerunning its graphical installer adds the server target plus the new OAuth credentials.
Windows may request administrator approval when the installer starts. That approval lets the installer update the existing agent configuration.
- Return to the downloaded GLPI-Agent-1.19-x64.msi in Windows File Explorer.
- Double-click GLPI-Agent-1.19-x64.msi to rerun the installer.
- Approve the Windows permission request if it appears.
- Continue to the agent configuration screen.
Keep localhost local
The http://localhost:8080/ endpoint is suitable only for this isolated local lab. A real deployment must protect inventory traffic with HTTPS.
- Enter http://localhost:8080/ as the server target.
- Enter your OAuth client ID as the OAuth client ID.
- Paste the one-time Client Secret from your credential manager into the OAuth client secret field.
- Enable the immediate run option.
- Complete the graphical installation to trigger the inventory run.
The immediate run now submits endpoint inventory to your local GLPI instance. The next check proves whether authentication succeeded.
Agent inventory not arriving?
- Check that the server target matches the local GLPI address from this step.
- Confirm that the OAuth client includes the inventory scope.
- Re-enter the Client ID if it was copied with extra spaces.
- Create a replacement client if the one-time Client Secret was lost.
Help me troubleshoot this agent submission.
Finish the assessment evidence
Before you check GLPI, decide whether you expect the endpoint to appear as a static import or a dynamic Computer.
- Return to your signed-in GLPI instance.
- Open the list of Computers.
- Open the Computer that matches your Windows device name.
- Confirm that GLPI identifies the Computer as dynamic.
- Open its operating-system inventory.
- Confirm that the current Windows details are visible.
- Open its installed-software inventory.
- Confirm that installed application entries are visible.
You should now see one dynamic Windows Computer alongside the 50 static records. Its operating-system details plus installed-software inventory come from the authenticated agent run.
That closes the strongest evidence gap. Your assessment now tests whether a candidate can connect a real endpoint to controlled inventory.
The candidate needs the runnable assessment materials. Private answer keys plus live credentials stay with the assessor.
- Return to the assessment folder from earlier in Windows File Explorer.
- Copy only docker-compose.yml, .env.example, plus the candidate folder into your assessment-delivery handout.
- Keep the assessor-only folder outside the candidate handout.
- Keep .env outside the candidate handout.
- Open the prepared handout to confirm that it contains exactly three entries.
You should see docker-compose.yml, .env.example, plus candidate. You should not see .env or assessor-only.
Strong finish. Your completed assessment now proves authenticated automated inventory from a real Windows endpoint. Its issue package keeps private scoring evidence plus credentials under assessor control.
Secret mission
Test Duplicate-Safe Reimports
A repeatable import should absorb a harmless data change without multiplying assets. Reimport a changed working copy. Prove Inventory number keeps the static count at 50 while one matched Computer updates.
Clean Up Your Resources
Clean Up Your Resources
Your local GLPI lab costs $0 to keep. Choose whether to leave it available for assessment rehearsals, pause its containers, or remove its local resources.
Resources you used:
- A local Docker Compose stack containing the glpi service, the db service, and its project network.
- Named volumes glpi_data and db_data containing persistent GLPI and MySQL data.
- A Windows GLPI Agent installation configured with OAuth credentials.
- The assessment folder containing docker-compose.yml, .env, .env.example, candidate, and assessor-only.
Keep everything running
Keeping the lab intact requires no cleanup. Choose this option when you want to rehearse the assessment or inspect its evidence again.
- Leave the glpi and db services running.
- Keep .env private because it contains the database password used by the lab.
- Retain assessor-only outside the candidate package.
- Retain the Windows GLPI Agent when you want to repeat the authenticated inventory proof.
Protect Your Private Materials
Issue only docker-compose.yml, .env.example, and the candidate folder. Keep OAuth credentials, .env, and assessor-only private.
Pause - I'll come back to this later
Stopping the Compose services frees their active resources while preserving the containers and named volumes. Your imported Computers, plugin configuration, and inventory evidence remain available for the next rehearsal.
- Switch back to Ubuntu.
- Return to the assessment folder from earlier.
- Stop the Compose services by running this command:
sudo docker compose stop
What Does This Command Do?
- The stop command halts the glpi and db services.
- The containers and named volumes remain available for a later restart.
- Check the stopped state by running this command:
sudo docker compose ps
What Should You See?
You should not see glpi or db listed as running. This confirms that the lab is paused while its stored data remains intact.
Still Seeing Running Services?
Check that you returned to the assessment folder containing docker-compose.yml before running the command.
Help me diagnose why my GLPI Compose services are still running.
Your lab is now paused without losing the imported register or automated inventory evidence.
Delete - I don't want to use this again
Removing the lab is permanent. The named volumes contain the GLPI database, so this option deletes the imported Computers, OAuth client, plugin configuration, and inventory history.
- Switch back to Ubuntu.
- Return to the assessment folder from earlier.
- Remove the Compose services, project network, and named volumes by running this command:
sudo docker compose down -v
What Does This Command Remove?
- The down command removes the glpi and db containers with their project network.
- The -v option removes glpi_data and db_data with all persistent lab data.
- Verify that the Compose services are gone by running this command:
sudo docker compose ps
What Should You See?
You should not see the glpi or db service running. This confirms that the Compose lab has been removed.
Compose Project Not Found?
A missing project usually means Ubuntu is in a different folder. Return to the folder containing docker-compose.yml before trying the cleanup command again.
Help me locate and remove my GLPI Compose project safely.
The Windows agent is installed separately from the Compose lab. Remove it through the installed-app settings to complete the endpoint cleanup.
- Press the Windows key to open search.
- Type Installed apps into the search field.
- Select Installed apps from the search results.
- Locate GLPI Agent 1.19 in the installed-app list.
- Use its app menu to uninstall it.
- Follow the Windows confirmation prompt.
- Search the installed-app list for GLPI Agent again.
You should no longer see GLPI Agent in the installed-app list. This confirms that the persistent Windows installation has been removed.
The remaining artifacts are local files inside the assessment folder. Delete that folder only after confirming that you no longer need the candidate package or private scoring evidence.
- In the Windows file browser, return to the parent location containing the assessment folder from earlier.
- Select the assessment folder.
- Delete the selected folder.
- Confirm that the assessment folder no longer appears in its parent location.
You've completed the full reset. The lab data, Windows agent, and assessment files are removed. Ubuntu and Docker Engine remain installed for future local labs.
Nice Work!
Nice Work!
You did it! Your candidate-ready GLPI asset lifecycle assessment now turns practical work into hiring evidence.
You've learned how to:
- Deployed a reproducible GLPI lab with Docker. Stored GLPI application data in persistent volumes backed by MySQL.
- Remediated the flawed 50-record CSV into 50 trustworthy Computers through Data Injection. Used Inventory number as the reconciliation key. Produced a private answer key with an evidence-based 100-point rubric.
- Proved authenticated automated inventory from a real Windows endpoint with GLPI Agent. Used OAuth Client Credentials to protect agent submissions. Confirmed current Windows operating-system data in GLPI. Confirmed installed-software data from the same endpoint.
- Secret Mission: Proved duplicate-safe reimports by updating one harmless Notes value through a repeated import. The static Computer count stayed at 50.
Ready to quiz yourself?