HD — Chef Deployment Example
This directory contains a reference Chef cookbook for deploying a HD instance and its supporting services.
Note: This cookbook is an example. It is derived from the sandbox Docker Compose configuration and the
docs/k8s_exampleHelm chart. Adapt it to your environment's secrets management, network layout, and certificate infrastructure before production use.
Directory Structure
chef_example/
├── README.md # This file
├── metadata.rb # Cookbook metadata + dependencies
├── Policyfile.rb # Modern Chef workflow (replaces Berkshelf)
├── attributes/
│ └── default.rb # All configurable attributes (image tags, CIDRs, secrets placeholders)
├── recipes/
│ ├── default.rb # Optional services dispatcher
│ ├── dms_ca.rb # DMS-CA
│ ├── dms_core.rb # DMS-Core
│ ├── dms_webux.rb # DMS-WebUX
│ ├── dms_opa_engine.rb # DMS-OPA-Engine
│ ├── dms_traefik.rb # DMS-internal Traefik
│ ├── otel_collector.rb # OTEL Collector
│ ├── sentry_relay.rb # Sentry Relay
│ ├── sc_scc.rb # Storage Cluster Controller
│ ├── sc_sn.rb # Storage Node
│ ├── hd_proxy.rb # HD Proxy
│ ├── hd_ingester.rb # [optional] Message bus ingester
│ ├── fe_traefik.rb # [optional] Front-End Traefik
│ ├── hd_mcp.rb # [optional] HD MCP server
│ ├── hd_graphql.rb # [optional] HD GraphQL server
│ └── hd_data_explore.rb # [optional] Data Explorer UI
└── roles/
├── fermihdi_dms.rb # Role for DMS hosts
├── fermihdi_scc.rb # Role for SCC hosts
├── fermihdi_sn.rb # Role for SN hosts
├── fermihdi_proxy.rb # Role for proxy hosts
└── fermihdi_optional.rb # Role for optional service hosts
Quick Start
1. Install Dependencies
cd docs/chef_example
chef install # Resolves Policyfile.lock.json
2. Configure Global Attributes
Edit attributes/default.rb or set attributes in a role/environment/node policy:
override['fermihdi']['image_tag'] = '2.0.2'
override['fermihdi']['dms_host'] = '192.168.10.10' # IP of DMS host
override['fermihdi']['control_plane_cidr'] = '10.147.0.0/24'
override['fermihdi']['data_plane_cidr'] = '10.150.0.0/24'
override['fermihdi']['observability_cidr'] = '10.146.0.0/24'
3. Configure Storage Clusters
Set the storage_clusters attribute in a role or node policy — not in attributes/default.rb (no real tokens there):
# In a role or Chef Vault data bag:
override['fermihdi']['storage_clusters'] = [
{
'name' => 'sc-1',
'scc_host' => 'sc1-scc-host', # Must match Chef node name
'sn_hosts' => ['sc1-sn-1', 'sc1-sn-2', 'sc1-sn-3'],
'scc_token' => chef_vault_item('fermihdi', 'sc1_scc_token')['value'],
'sn_tokens' => [
chef_vault_item('fermihdi', 'sc1_sn1_token')['value'],
chef_vault_item('fermihdi', 'sc1_sn2_token')['value'],
chef_vault_item('fermihdi', 'sc1_sn3_token')['value'],
]
},
{
'name' => 'sc-2',
'scc_host' => 'sc2-scc-host',
'sn_hosts' => ['sc2-sn-1', 'sc2-sn-2'],
'scc_token' => '...',
'sn_tokens' => ['...', '...']
}
]
The sc_scc recipe finds its SC by matching the node's hostname/fqdn against scc_host.
The sc_sn recipe finds its SC and SN index by matching against sn_hosts.
4. Assign Node Roles
On your Chef server:
# DMS host
knife node run_list add dms-host-01 'role[fermihdi_dms]'
# SCC host
knife node run_list add sc1-scc-host 'role[fermihdi_scc]'
# SN hosts
knife node run_list add sc1-sn-1 'role[fermihdi_sn]'
knife node run_list add sc1-sn-2 'role[fermihdi_sn]'
# Proxy host
knife node run_list add proxy-host-01 'role[fermihdi_proxy]'
5. Enable Optional Services
Set attributes on the optional host's node or in its role:
override['fermihdi']['optional']['enable_ingester'] = true
override['fermihdi']['optional']['enable_fe_traefik'] = true
override['fermihdi']['optional']['enable_hd_graphql'] = true
override['fermihdi']['optional']['enable_hd_mcp'] = true
override['fermihdi']['optional']['enable_hd_data_explore'] = true
Then assign the optional role:
knife node run_list add optional-host-01 'role[fermihdi_optional]'
6. Run Chef Client
# On each target node:
chef-client
# Or push via Chef Infra Server:
knife ssh 'role:fermihdi_dms' 'sudo chef-client'
Service Groups
| Role | Services | Recipe(s) |
|---|---|---|
fermihdi_dms |
DMS-CA, DMS-Core, DMS-WebUX, DMS-OPA-Engine, DMS-Traefik, OTEL, Sentry Relay | Multiple |
fermihdi_scc |
Storage Cluster Controller | sc_scc |
fermihdi_sn |
Storage Node | sc_sn |
fermihdi_proxy |
HD Proxy | hd_proxy |
fermihdi_optional |
Optional services (gated by attributes) | default |
Network Port Reference
| Port | Protocol | Plane |
|---|---|---|
6985 |
TLS/mTLS | DMS Internal |
6986 |
TLS/mTLS | Control Plane |
6987 |
TCP | Data Plane (FHDWP) |
6988 |
UDP | NORM Multicast (Auxiliary) |
6989 |
TLS/mTLS | DMS-CA Plane |
8080 |
HTTP | Observability |
Prerequisites
- Chef Infra Client ≥ 17 on all target nodes
chef/dockercookbook (declared inmetadata.rb, resolved via Policyfile)- Docker installed on all target nodes
- Hugepages configured on SCC and SN hosts (
hugepagesz=2M hugepages=1024in GRUB) - Chef Vault or equivalent for secret injection