Publish railiance01 resource evidence and close RAIL-HO-WP-0008
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:
parent
39070ed292
commit
0a97ce12be
9 changed files with 669 additions and 8 deletions
63
docs/evidence/resource-hosteurope-railiance01/README.md
Normal file
63
docs/evidence/resource-hosteurope-railiance01/README.md
Normal 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)
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
2026-08-15T170250Z.json
|
||||
Loading…
Add table
Add a link
Reference in a new issue