Publish railiance01 resource evidence and close RAIL-HO-WP-0008
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Has been cancelled

Non-secret identity, a reproducible capacity observation, and host-ops
labor/exit inputs for resource:hosteurope:railiance01. Booked price and
contract dates stay unknown for their owners.
This commit is contained in:
codex 2026-08-15 19:04:40 +02:00
parent 39070ed292
commit 0a97ce12be
9 changed files with 669 additions and 8 deletions

View file

@ -0,0 +1,63 @@
# Evidence interface — `resource:hosteurope:railiance01`
Stable, non-secret facts that `resource-control` should read for the Host
Europe virtual server `Railiance01`. This directory is the interface.
`resource-control` remains the portfolio record; `fin-hub` remains booked
cost. Do not copy invoices or credentials into either side.
## Files
| Path | Task | What it fills |
| --- | --- | --- |
| `identity-lifecycle.yaml` | T01 | provider, product, IDs, location, lifecycle, classified unknowns |
| `observations/*.json` | T02 | timestamped OS / provider / k3s capacity and utilization |
| `observations/latest.json` | T02 | symlink to the newest observation |
| `labor-and-exit.yaml` | T03 | recurring host-ops activities, estimated hours, exit path |
Producer: `scripts/observe-host-capacity.py Railiance01`
```bash
make observe-railiance01
```
Recommended cadence: monthly, and after any provider resize. Traffic
allowance is still unknown (operator / panel).
## How to fold into resource-control
Map, do not duplicate operating strings into a shadow inventory:
| Inventory field | Source |
| --- | --- |
| `provider.name` | Host Europe GmbH |
| `provider.product_ref` | `oh.hosting.c2.r4.d100` |
| `provider.provider_resource_id` | `c0e697d1-4c71-40f5-9746-0b4c4b9e5c17` |
| `provider.account_ref` | `openstack-project:f6491e4f796146d1a7ce30d569d5f122` |
| `location.country` | `FR` |
| `location.region` | `sxb1` |
| `location.residency` | `EU` |
| `lifecycle.commissioned_on` | `2026-03-08` |
| `lifecycle.ordered_on` / `renews_on` / `cancel_by` | remain `null` (unknown, operator) |
| `cost.*` booked price | remain unknown; owner `fin-hub` / `FIN-WP-0004` |
| `capacity[]` | latest observation, kinds `usable` / `provisioned` / `observed` |
| labor hours in forecasts | `labor-and-exit.yaml#monthly_host_ops_hours` (basis `estimated`) |
Cluster utilization and PVC allocation stay `RAIL-BS-WP-0014`.
## Layers in an observation
1. **provider_declared** — instance type and UUIDs from named cloud-init keys.
2. **operating_system** — what the kernel sees (CPU, memory, root filesystem).
3. **kubernetes** — k3s capacity, allocatable, and `kubectl top` when present.
Do not treat k3s allocatable as the provider grant. On 2026-08-15 they
happened to match for CPU and memory; ephemeral-storage allocatable is
smaller than the root filesystem.
## What is still unknown
- Host Europe order date, renewal date, cancellation deadline, contract term
- Billing customer number (restricted)
- Traffic allowance
- Booked recurring price and tax treatment (`fin-hub`)
- Measured operator hours (no time records; estimates only)

View file

@ -0,0 +1,139 @@
# Non-secret identity and lifecycle for resource:hosteurope:railiance01
# Consumer: resource-control inventory fields on that resource.
# Booked price, invoices, customer numbers, and payment instruments are
# out of scope (fin-hub / operator). Unknowns stay unknown.
schema_version: "1.0"
resource_id: resource:hosteurope:railiance01
inventory_name: Railiance01
public_ipv4: 92.205.62.239
status: active
management_model: provider_managed
resource_class: compute_instance
published_at: "2026-08-15"
authority: railiance-infra
workplan: RAIL-HO-WP-0008-T01
provider:
name: Host Europe GmbH
as_number: AS21499
parent: GoDaddy
product_class: virtual server
product_family: vps4
product_ref:
value: oh.hosting.c2.r4.d100
basis: measured
source: cloud-init ds.ec2_metadata.instance-type
note: Provider instance-type string. Not a booked catalogue confirmation.
provider_resource_id:
value: c0e697d1-4c71-40f5-9746-0b4c4b9e5c17
basis: measured
source: cloud-init ds.meta_data.uuid (OpenStack Nova)
provider_instance_id_ec2:
value: i-000197c7
basis: measured
source: cloud-init ds.ec2_metadata.instance-id
instance_name:
value: 1fxw7h4zug
basis: measured
source: cloud-init ds.meta_data.name
account_ref:
value: openstack-project:f6491e4f796146d1a7ce30d569d5f122
basis: measured
source: cloud-init ds.meta_data.project_id
classification: non-secret-join-key
note: Cloud tenant UUID for joins. Not the billing customer number.
billing_customer_number:
value: null
classification: restricted
owner: operator
source: Host Europe control panel
provisioning:
value: manual
basis: quoted
source: resource-control/docs/evidence/RESOURCE-WP-0002-host-europe-resolution-2026-08-15.md
note: Host Europe has no API to provision this class of resource.
location:
country:
value: FR
basis: derived
sources:
- cloud-init local-hostname contains sxb1 (Strasbourg site code)
- ipinfo.io 2026-08-15 city=Strasbourg country=FR org=AS21499 Host Europe GmbH
- Host Europe Group operates a Strasbourg data centre
region:
value: sxb1
basis: measured
source: cloud-init ds.ec2_metadata.local-hostname = 1fxw7h4zug.cloud.prd.sxb1.gdg
locality:
value: Strasbourg
basis: derived
source: sxb1 + ipinfo.io
residency:
value: EU
basis: derived
source: country FR
failure_domains:
- provider:host-europe
- site:sxb1
- host:railiance01
ptr: 239.62.205.92.host.secureserver.net
lifecycle:
proposed_on:
value: null
classification: unknown
owner: operator
ordered_on:
value: null
classification: unknown
owner: operator
source: Host Europe control panel or invoice
commissioned_on:
value: "2026-03-08"
basis: measured
source: workplans/archived/260702-RAIL-HO-WP-0001-hosteurope-bootstrap.md and state-hub-inbox/2026-03-08-railiance01-bootstrap.yaml
note: Date this repo took the host into S1 management. Not the provider order date.
renews_on:
value: null
classification: unknown
owner: operator
source: Host Europe control panel or invoice
cancel_by:
value: null
classification: unknown
owner: operator
source: Host Europe contract / cancellation notice period
contract_term:
value: null
classification: unknown
owner: operator
retired_on:
value: null
classification: not_applicable
note: Resource is active.
cost_boundary:
currency: EUR
booked_price:
value: null
classification: unknown
owner: fin-hub
workplan: FIN-WP-0004
tax_treatment:
value: null
classification: unknown
owner: fin-hub
this_repo_publishes: identity, location, lifecycle dates we can prove, host observations, host-ops labor
this_repo_does_not_publish:
- invoices
- customer numbers
- payment instruments
- booked recurring price
residual_credential:
finding: cloud-init metadata on the host still exposes an admin_pass field
action: rotate or disable that password via the Host Europe panel if it is still valid
recorded: false
note: The value was not copied into this repository.

View file

@ -0,0 +1,101 @@
# Host-level operations labor and exit inputs for resource:hosteurope:railiance01
# Consumer: resource-control forecasts that need to separate host infrastructure,
# recurring host-ops labor, and replacement/exit effort.
# Does not estimate workload, cluster, or platform labor.
schema_version: "1.0"
resource_id: resource:hosteurope:railiance01
published_at: "2026-08-15"
authority: railiance-infra
workplan: RAIL-HO-WP-0008-T03
scope:
includes:
- OS baseline convergence
- host firewall declared state
- host verification (Goss)
- SSH access and host identity
- host incident response
- replacement and cancellation of this virtual server
excludes:
- k3s / cluster operations (railiance-cluster)
- platform services (railiance-platform)
- application and tenant labor (those repos)
- booked Host Europe spend (fin-hub)
recurring_activities:
- id: os-baseline-converge
description: Apply ansible/playbooks/bootstrap.yaml or a tagged subset
cadence: event-driven
typical_hours: 1.0
basis: estimated
note: One tagged run. Full untagged converge is deliberately not routine.
- id: firewall-declared-state
description: Review and apply UFW from inventory (make converge-firewall)
cadence: event-driven
typical_hours: 0.5
basis: estimated
note: Hourly Goss timer is unattended; this is operator time when it fails.
- id: host-verify
description: make verify-host HOST=Railiance01 and read TAP
cadence: monthly
typical_hours: 0.25
basis: estimated
- id: ssh-and-identity
description: SSH CA, authorized_keys, ops-bridge key, inventory IP
cadence: event-driven
typical_hours: 0.5
basis: estimated
- id: host-incident
description: Host-level outage, disk, SSH lockout, provider ticket
cadence: unscheduled
typical_hours: 2.0
basis: estimated
note: Not every month. Use as a rare-event allowance, not a measured mean.
monthly_host_ops_hours:
value: 2.0
unit: hours
basis: estimated
method: Sum of typical_hours for monthly verify plus a share of event-driven work
uncertainty: No time records exist. This is a forecast placeholder, not a measurement.
owner: railiance-infra
one_off_not_recurring:
- id: RAIL-HO-WP-0009
description: Firewall declared-state integrity and k3s API tunnel-only cutover
completed: "2026-08-15"
hours: null
basis: unknown
note: Do not amortise into the monthly host-ops figure until a time record exists.
exit:
path:
- Provision replacement compute (manual Host Europe panel or another provider)
- Restore or redeploy k3s and stateful services from their owning repos
- Switch DNS and ingress
- Verify workloads
- Cancel the Host Europe virtual server in the panel
- Confirm disk wipe / instance destroy
replacement_cutover_hours:
value: 8.0
unit: hours
basis: estimated
uncertainty: Host-ops only. Cluster and workload cutover hours belong to those repos.
cancellation:
notice_period:
value: null
classification: unknown
owner: operator
source: Host Europe contract
panel: Host Europe / GoDaddy VPS control panel
provider_api: none
data_at_rest:
items:
- Ubuntu root filesystem (193 GiB provisioned class)
- local-path PVs for cluster workloads (failure domain host:railiance01)
note: PV contents are not S1-owned; list them only as correlated-exit risk.
cadence_for_consumers:
republish_labor: when the activity catalog changes, or after a quarter of time records
republish_exit: when replacement procedure or cancel terms become known

View file

@ -0,0 +1,92 @@
{
"schema_version": "1.0",
"record_type": "host_capacity_observation",
"resource_id": "resource:hosteurope:railiance01",
"inventory_name": "Railiance01",
"observed_at": "2026-08-15T17:02:50Z",
"observer": "railiance-infra/scripts/observe-host-capacity.py",
"source_commands": [
"nproc / lscpu /proc/meminfo /proc/loadavg statvfs(/)",
"cloud-init query <named keys only>",
"sudo k3s kubectl get node -o json",
"sudo k3s kubectl top node"
],
"layers": {
"provider_declared": {
"instance_type": "oh.hosting.c2.r4.d100",
"instance_uuid": "c0e697d1-4c71-40f5-9746-0b4c4b9e5c17",
"instance_id_ec2": "i-000197c7",
"instance_name": "1fxw7h4zug",
"product_family": "vps4",
"product_role": "vps4_default",
"local_hostname": "1fxw7h4zug.cloud.prd.sxb1.gdg",
"project_id": "f6491e4f796146d1a7ce30d569d5f122",
"note": "Declared by the provider metadata service. Not a booked SKU confirmation."
},
"operating_system": {
"hostname": "239.62.205.92.host.secureserver.net",
"os": "Ubuntu 24.04.4 LTS",
"cpu": {
"value": 4,
"unit": "vCPU",
"kind": "usable",
"model": "AMD EPYC Processor (with IBPB)",
"hypervisor": "KVM"
},
"memory": {
"total_kib": 16377056,
"available_kib": 10577368,
"unit": "KiB",
"kind": "usable"
},
"swap": {
"total_kib": 4194300,
"unit": "KiB",
"kind": "observed",
"note": "OS swapfile, not a provider disk grant"
},
"root_filesystem": {
"total_bytes": 206900281344,
"used_bytes": 77003415552,
"avail_bytes": 129880088576,
"kind": "provisioned"
},
"block_devices": "sda 200G disk QEMU HARDDISK\nsr0 838K rom QEMU DVD-ROM",
"loadavg": [
"1.85",
"1.38",
"1.31"
],
"uptime_seconds": 1738009.47
},
"kubernetes": {
"node_name": "239.62.205.92.host.secureserver.net",
"capacity": {
"cpu": "4",
"memory": "16377056Ki",
"ephemeral_storage": "202051056Ki",
"pods": "110"
},
"allocatable": {
"cpu": "4",
"memory": "16377056Ki",
"ephemeral_storage": "196555267123",
"pods": "110"
},
"observed": {
"cpu": "1715m",
"cpu_pct": "42%",
"memory": "6308Mi",
"memory_pct": "39%"
}
}
},
"unknown": [
{
"field": "traffic_allowance",
"classification": "unknown",
"owner": "operator",
"source": "Host Europe control panel or contract"
}
]
}

View file

@ -0,0 +1 @@
2026-08-15T170250Z.json