specweave 0.3.13 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CLAUDE.md +506 -17
  2. package/README.md +100 -58
  3. package/bin/install-all.sh +9 -2
  4. package/bin/install-hooks.sh +57 -0
  5. package/bin/specweave.js +16 -0
  6. package/dist/adapters/adapter-base.d.ts +21 -0
  7. package/dist/adapters/adapter-base.d.ts.map +1 -1
  8. package/dist/adapters/adapter-base.js +28 -0
  9. package/dist/adapters/adapter-base.js.map +1 -1
  10. package/dist/adapters/adapter-interface.d.ts +41 -0
  11. package/dist/adapters/adapter-interface.d.ts.map +1 -1
  12. package/dist/adapters/claude/adapter.d.ts +36 -0
  13. package/dist/adapters/claude/adapter.d.ts.map +1 -1
  14. package/dist/adapters/claude/adapter.js +135 -0
  15. package/dist/adapters/claude/adapter.js.map +1 -1
  16. package/dist/adapters/copilot/adapter.d.ts +25 -0
  17. package/dist/adapters/copilot/adapter.d.ts.map +1 -1
  18. package/dist/adapters/copilot/adapter.js +112 -0
  19. package/dist/adapters/copilot/adapter.js.map +1 -1
  20. package/dist/adapters/cursor/adapter.d.ts +36 -0
  21. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  22. package/dist/adapters/cursor/adapter.js +140 -0
  23. package/dist/adapters/cursor/adapter.js.map +1 -1
  24. package/dist/adapters/generic/adapter.d.ts +25 -0
  25. package/dist/adapters/generic/adapter.d.ts.map +1 -1
  26. package/dist/adapters/generic/adapter.js +111 -0
  27. package/dist/adapters/generic/adapter.js.map +1 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +103 -1
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/plugin.d.ts +37 -0
  32. package/dist/cli/commands/plugin.d.ts.map +1 -0
  33. package/dist/cli/commands/plugin.js +296 -0
  34. package/dist/cli/commands/plugin.js.map +1 -0
  35. package/dist/core/agent-model-manager.d.ts +52 -0
  36. package/dist/core/agent-model-manager.d.ts.map +1 -0
  37. package/dist/core/agent-model-manager.js +120 -0
  38. package/dist/core/agent-model-manager.js.map +1 -0
  39. package/dist/core/cost-tracker.d.ts +108 -0
  40. package/dist/core/cost-tracker.d.ts.map +1 -0
  41. package/dist/core/cost-tracker.js +281 -0
  42. package/dist/core/cost-tracker.js.map +1 -0
  43. package/dist/core/model-selector.d.ts +57 -0
  44. package/dist/core/model-selector.d.ts.map +1 -0
  45. package/dist/core/model-selector.js +115 -0
  46. package/dist/core/model-selector.js.map +1 -0
  47. package/dist/core/phase-detector.d.ts +62 -0
  48. package/dist/core/phase-detector.d.ts.map +1 -0
  49. package/dist/core/phase-detector.js +229 -0
  50. package/dist/core/phase-detector.js.map +1 -0
  51. package/dist/core/plugin-detector.d.ts +96 -0
  52. package/dist/core/plugin-detector.d.ts.map +1 -0
  53. package/dist/core/plugin-detector.js +349 -0
  54. package/dist/core/plugin-detector.js.map +1 -0
  55. package/dist/core/plugin-loader.d.ts +111 -0
  56. package/dist/core/plugin-loader.d.ts.map +1 -0
  57. package/dist/core/plugin-loader.js +319 -0
  58. package/dist/core/plugin-loader.js.map +1 -0
  59. package/dist/core/plugin-manager.d.ts +144 -0
  60. package/dist/core/plugin-manager.d.ts.map +1 -0
  61. package/dist/core/plugin-manager.js +393 -0
  62. package/dist/core/plugin-manager.js.map +1 -0
  63. package/dist/core/schemas/plugin-manifest.schema.json +253 -0
  64. package/dist/core/types/plugin.d.ts +252 -0
  65. package/dist/core/types/plugin.d.ts.map +1 -0
  66. package/dist/core/types/plugin.js +48 -0
  67. package/dist/core/types/plugin.js.map +1 -0
  68. package/dist/integrations/jira/jira-mapper.d.ts +2 -2
  69. package/dist/integrations/jira/jira-mapper.js +2 -2
  70. package/dist/types/cost-tracking.d.ts +43 -0
  71. package/dist/types/cost-tracking.d.ts.map +1 -0
  72. package/dist/types/cost-tracking.js +8 -0
  73. package/dist/types/cost-tracking.js.map +1 -0
  74. package/dist/types/model-selection.d.ts +53 -0
  75. package/dist/types/model-selection.d.ts.map +1 -0
  76. package/dist/types/model-selection.js +12 -0
  77. package/dist/types/model-selection.js.map +1 -0
  78. package/dist/utils/cost-reporter.d.ts +58 -0
  79. package/dist/utils/cost-reporter.d.ts.map +1 -0
  80. package/dist/utils/cost-reporter.js +224 -0
  81. package/dist/utils/cost-reporter.js.map +1 -0
  82. package/dist/utils/pricing-constants.d.ts +70 -0
  83. package/dist/utils/pricing-constants.d.ts.map +1 -0
  84. package/dist/utils/pricing-constants.js +71 -0
  85. package/dist/utils/pricing-constants.js.map +1 -0
  86. package/package.json +13 -9
  87. package/src/adapters/adapter-base.ts +33 -0
  88. package/src/adapters/adapter-interface.ts +46 -0
  89. package/src/adapters/claude/adapter.ts +164 -0
  90. package/src/adapters/copilot/adapter.ts +138 -0
  91. package/src/adapters/cursor/adapter.ts +170 -0
  92. package/src/adapters/generic/adapter.ts +137 -0
  93. package/src/agents/architect/AGENT.md +3 -0
  94. package/src/agents/code-reviewer.md +156 -0
  95. package/src/agents/data-scientist/AGENT.md +181 -0
  96. package/src/agents/database-optimizer/AGENT.md +147 -0
  97. package/src/agents/devops/AGENT.md +3 -0
  98. package/src/agents/diagrams-architect/AGENT.md +3 -0
  99. package/src/agents/docs-writer/AGENT.md +3 -0
  100. package/src/agents/kubernetes-architect/AGENT.md +142 -0
  101. package/src/agents/ml-engineer/AGENT.md +150 -0
  102. package/src/agents/mlops-engineer/AGENT.md +201 -0
  103. package/src/agents/network-engineer/AGENT.md +149 -0
  104. package/src/agents/observability-engineer/AGENT.md +213 -0
  105. package/src/agents/payment-integration/AGENT.md +35 -0
  106. package/src/agents/performance/AGENT.md +3 -0
  107. package/src/agents/performance-engineer/AGENT.md +153 -0
  108. package/src/agents/pm/AGENT.md +3 -0
  109. package/src/agents/qa-lead/AGENT.md +3 -0
  110. package/src/agents/security/AGENT.md +3 -0
  111. package/src/agents/sre/AGENT.md +3 -0
  112. package/src/agents/tdd-orchestrator/AGENT.md +169 -0
  113. package/src/agents/tech-lead/AGENT.md +3 -0
  114. package/src/commands/specweave.costs.md +261 -0
  115. package/src/commands/specweave.increment.md +48 -4
  116. package/src/commands/specweave.ml-pipeline.md +292 -0
  117. package/src/commands/specweave.monitor-setup.md +501 -0
  118. package/src/commands/specweave.slo-implement.md +1055 -0
  119. package/src/commands/specweave.sync-github.md +1 -1
  120. package/src/commands/specweave.tdd-cycle.md +199 -0
  121. package/src/commands/specweave.tdd-green.md +842 -0
  122. package/src/commands/specweave.tdd-red.md +135 -0
  123. package/src/commands/specweave.tdd-refactor.md +165 -0
  124. package/src/hooks/post-increment-plugin-detect.sh +142 -0
  125. package/src/hooks/post-task-completion.sh +53 -11
  126. package/src/hooks/pre-task-plugin-detect.sh +96 -0
  127. package/src/skills/SKILLS-INDEX.md +18 -10
  128. package/src/skills/billing-automation/SKILL.md +559 -0
  129. package/src/skills/distributed-tracing/SKILL.md +438 -0
  130. package/src/skills/e2e-playwright/README.md +1 -1
  131. package/src/skills/e2e-playwright/package.json +1 -1
  132. package/src/skills/gitops-workflow/SKILL.md +285 -0
  133. package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
  134. package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
  135. package/src/skills/grafana-dashboards/SKILL.md +369 -0
  136. package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
  137. package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  138. package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  139. package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  140. package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  141. package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
  142. package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  143. package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  144. package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  145. package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  146. package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  147. package/src/skills/k8s-security-policies/SKILL.md +334 -0
  148. package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  149. package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  150. package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
  151. package/src/skills/paypal-integration/SKILL.md +467 -0
  152. package/src/skills/pci-compliance/SKILL.md +466 -0
  153. package/src/skills/prometheus-configuration/SKILL.md +392 -0
  154. package/src/skills/slo-implementation/SKILL.md +329 -0
  155. package/src/skills/stripe-integration/SKILL.md +442 -0
  156. package/src/skills/tdd-workflow/SKILL.md +378 -0
  157. package/src/templates/README.md.template +1 -1
  158. package/src/skills/bmad-method-expert/SKILL.md +0 -626
  159. package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  160. package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  161. package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  162. package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  163. package/src/skills/context-optimizer/SKILL.md +0 -588
  164. package/src/skills/figma-designer/SKILL.md +0 -149
  165. package/src/skills/figma-implementer/SKILL.md +0 -148
  166. package/src/skills/figma-mcp-connector/SKILL.md +0 -136
  167. package/src/skills/figma-to-code/SKILL.md +0 -128
  168. package/src/skills/spec-kit-expert/SKILL.md +0 -1010
@@ -0,0 +1,296 @@
1
+ # Kubernetes ConfigMap Templates
2
+
3
+ ---
4
+ # Template 1: Simple Key-Value Configuration
5
+ apiVersion: v1
6
+ kind: ConfigMap
7
+ metadata:
8
+ name: <app-name>-config
9
+ namespace: <namespace>
10
+ labels:
11
+ app.kubernetes.io/name: <app-name>
12
+ app.kubernetes.io/instance: <instance-name>
13
+ data:
14
+ # Simple key-value pairs
15
+ APP_ENV: "production"
16
+ LOG_LEVEL: "info"
17
+ DATABASE_HOST: "db.example.com"
18
+ DATABASE_PORT: "5432"
19
+ CACHE_TTL: "3600"
20
+ MAX_CONNECTIONS: "100"
21
+
22
+ ---
23
+ # Template 2: Configuration File
24
+ apiVersion: v1
25
+ kind: ConfigMap
26
+ metadata:
27
+ name: <app-name>-config-file
28
+ namespace: <namespace>
29
+ labels:
30
+ app.kubernetes.io/name: <app-name>
31
+ data:
32
+ # Application configuration file
33
+ application.yaml: |
34
+ server:
35
+ port: 8080
36
+ host: 0.0.0.0
37
+
38
+ logging:
39
+ level: INFO
40
+ format: json
41
+
42
+ database:
43
+ host: db.example.com
44
+ port: 5432
45
+ pool_size: 20
46
+ timeout: 30
47
+
48
+ cache:
49
+ enabled: true
50
+ ttl: 3600
51
+ max_entries: 10000
52
+
53
+ features:
54
+ new_ui: true
55
+ beta_features: false
56
+
57
+ ---
58
+ # Template 3: Multiple Configuration Files
59
+ apiVersion: v1
60
+ kind: ConfigMap
61
+ metadata:
62
+ name: <app-name>-multi-config
63
+ namespace: <namespace>
64
+ labels:
65
+ app.kubernetes.io/name: <app-name>
66
+ data:
67
+ # Nginx configuration
68
+ nginx.conf: |
69
+ user nginx;
70
+ worker_processes auto;
71
+ error_log /var/log/nginx/error.log warn;
72
+ pid /var/run/nginx.pid;
73
+
74
+ events {
75
+ worker_connections 1024;
76
+ }
77
+
78
+ http {
79
+ include /etc/nginx/mime.types;
80
+ default_type application/octet-stream;
81
+
82
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
83
+ '$status $body_bytes_sent "$http_referer" '
84
+ '"$http_user_agent" "$http_x_forwarded_for"';
85
+
86
+ access_log /var/log/nginx/access.log main;
87
+ sendfile on;
88
+ keepalive_timeout 65;
89
+
90
+ include /etc/nginx/conf.d/*.conf;
91
+ }
92
+
93
+ # Default site configuration
94
+ default.conf: |
95
+ server {
96
+ listen 80;
97
+ server_name _;
98
+
99
+ location / {
100
+ proxy_pass http://backend:8080;
101
+ proxy_set_header Host $host;
102
+ proxy_set_header X-Real-IP $remote_addr;
103
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
104
+ proxy_set_header X-Forwarded-Proto $scheme;
105
+ }
106
+
107
+ location /health {
108
+ access_log off;
109
+ return 200 "healthy\n";
110
+ }
111
+ }
112
+
113
+ ---
114
+ # Template 4: JSON Configuration
115
+ apiVersion: v1
116
+ kind: ConfigMap
117
+ metadata:
118
+ name: <app-name>-json-config
119
+ namespace: <namespace>
120
+ labels:
121
+ app.kubernetes.io/name: <app-name>
122
+ data:
123
+ config.json: |
124
+ {
125
+ "server": {
126
+ "port": 8080,
127
+ "host": "0.0.0.0",
128
+ "timeout": 30
129
+ },
130
+ "database": {
131
+ "host": "postgres.example.com",
132
+ "port": 5432,
133
+ "database": "myapp",
134
+ "pool": {
135
+ "min": 2,
136
+ "max": 20
137
+ }
138
+ },
139
+ "redis": {
140
+ "host": "redis.example.com",
141
+ "port": 6379,
142
+ "db": 0
143
+ },
144
+ "features": {
145
+ "auth": true,
146
+ "metrics": true,
147
+ "tracing": true
148
+ }
149
+ }
150
+
151
+ ---
152
+ # Template 5: Environment-Specific Configuration
153
+ apiVersion: v1
154
+ kind: ConfigMap
155
+ metadata:
156
+ name: <app-name>-prod-config
157
+ namespace: production
158
+ labels:
159
+ app.kubernetes.io/name: <app-name>
160
+ environment: production
161
+ data:
162
+ APP_ENV: "production"
163
+ LOG_LEVEL: "warn"
164
+ DEBUG: "false"
165
+ RATE_LIMIT: "1000"
166
+ CACHE_TTL: "3600"
167
+ DATABASE_POOL_SIZE: "50"
168
+ FEATURE_FLAG_NEW_UI: "true"
169
+ FEATURE_FLAG_BETA: "false"
170
+
171
+ ---
172
+ # Template 6: Script Configuration
173
+ apiVersion: v1
174
+ kind: ConfigMap
175
+ metadata:
176
+ name: <app-name>-scripts
177
+ namespace: <namespace>
178
+ labels:
179
+ app.kubernetes.io/name: <app-name>
180
+ data:
181
+ # Initialization script
182
+ init.sh: |
183
+ #!/bin/bash
184
+ set -e
185
+
186
+ echo "Running initialization..."
187
+
188
+ # Wait for database
189
+ until nc -z $DATABASE_HOST $DATABASE_PORT; do
190
+ echo "Waiting for database..."
191
+ sleep 2
192
+ done
193
+
194
+ echo "Database is ready!"
195
+
196
+ # Run migrations
197
+ if [ "$RUN_MIGRATIONS" = "true" ]; then
198
+ echo "Running database migrations..."
199
+ ./migrate up
200
+ fi
201
+
202
+ echo "Initialization complete!"
203
+
204
+ # Health check script
205
+ healthcheck.sh: |
206
+ #!/bin/bash
207
+
208
+ # Check application health endpoint
209
+ response=$(curl -sf http://localhost:8080/health)
210
+
211
+ if [ $? -eq 0 ]; then
212
+ echo "Health check passed"
213
+ exit 0
214
+ else
215
+ echo "Health check failed"
216
+ exit 1
217
+ fi
218
+
219
+ ---
220
+ # Template 7: Prometheus Configuration
221
+ apiVersion: v1
222
+ kind: ConfigMap
223
+ metadata:
224
+ name: prometheus-config
225
+ namespace: monitoring
226
+ labels:
227
+ app.kubernetes.io/name: prometheus
228
+ data:
229
+ prometheus.yml: |
230
+ global:
231
+ scrape_interval: 15s
232
+ evaluation_interval: 15s
233
+ external_labels:
234
+ cluster: 'production'
235
+ region: 'us-west-2'
236
+
237
+ alerting:
238
+ alertmanagers:
239
+ - static_configs:
240
+ - targets:
241
+ - alertmanager:9093
242
+
243
+ rule_files:
244
+ - /etc/prometheus/rules/*.yml
245
+
246
+ scrape_configs:
247
+ - job_name: 'kubernetes-pods'
248
+ kubernetes_sd_configs:
249
+ - role: pod
250
+ relabel_configs:
251
+ - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
252
+ action: keep
253
+ regex: true
254
+ - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
255
+ action: replace
256
+ target_label: __metrics_path__
257
+ regex: (.+)
258
+ - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
259
+ action: replace
260
+ target_label: __address__
261
+ regex: ([^:]+)(?::\d+)?;(\d+)
262
+ replacement: $1:$2
263
+
264
+ ---
265
+ # Usage Examples:
266
+ #
267
+ # 1. Mount as environment variables:
268
+ # envFrom:
269
+ # - configMapRef:
270
+ # name: <app-name>-config
271
+ #
272
+ # 2. Mount as files:
273
+ # volumeMounts:
274
+ # - name: config
275
+ # mountPath: /etc/app
276
+ # volumes:
277
+ # - name: config
278
+ # configMap:
279
+ # name: <app-name>-config-file
280
+ #
281
+ # 3. Mount specific keys as files:
282
+ # volumes:
283
+ # - name: nginx-config
284
+ # configMap:
285
+ # name: <app-name>-multi-config
286
+ # items:
287
+ # - key: nginx.conf
288
+ # path: nginx.conf
289
+ #
290
+ # 4. Use individual environment variables:
291
+ # env:
292
+ # - name: LOG_LEVEL
293
+ # valueFrom:
294
+ # configMapKeyRef:
295
+ # name: <app-name>-config
296
+ # key: LOG_LEVEL
@@ -0,0 +1,203 @@
1
+ # Production-Ready Kubernetes Deployment Template
2
+ # Replace all <placeholders> with actual values
3
+
4
+ apiVersion: apps/v1
5
+ kind: Deployment
6
+ metadata:
7
+ name: <app-name>
8
+ namespace: <namespace>
9
+ labels:
10
+ app.kubernetes.io/name: <app-name>
11
+ app.kubernetes.io/instance: <instance-name>
12
+ app.kubernetes.io/version: "<version>"
13
+ app.kubernetes.io/component: <component> # backend, frontend, database, cache
14
+ app.kubernetes.io/part-of: <system-name>
15
+ app.kubernetes.io/managed-by: kubectl
16
+ annotations:
17
+ description: "<application description>"
18
+ contact: "<team-email>"
19
+ spec:
20
+ replicas: 3 # Minimum 3 for production HA
21
+ revisionHistoryLimit: 10
22
+
23
+ selector:
24
+ matchLabels:
25
+ app.kubernetes.io/name: <app-name>
26
+ app.kubernetes.io/instance: <instance-name>
27
+
28
+ strategy:
29
+ type: RollingUpdate
30
+ rollingUpdate:
31
+ maxSurge: 1
32
+ maxUnavailable: 0 # Zero-downtime deployment
33
+
34
+ minReadySeconds: 10
35
+ progressDeadlineSeconds: 600
36
+
37
+ template:
38
+ metadata:
39
+ labels:
40
+ app.kubernetes.io/name: <app-name>
41
+ app.kubernetes.io/instance: <instance-name>
42
+ app.kubernetes.io/version: "<version>"
43
+ annotations:
44
+ prometheus.io/scrape: "true"
45
+ prometheus.io/port: "9090"
46
+ prometheus.io/path: "/metrics"
47
+
48
+ spec:
49
+ serviceAccountName: <app-name>
50
+
51
+ # Pod-level security context
52
+ securityContext:
53
+ runAsNonRoot: true
54
+ runAsUser: 1000
55
+ runAsGroup: 1000
56
+ fsGroup: 1000
57
+ seccompProfile:
58
+ type: RuntimeDefault
59
+
60
+ # Init containers (optional)
61
+ initContainers:
62
+ - name: init-wait
63
+ image: busybox:1.36
64
+ command: ['sh', '-c', 'echo "Initializing..."']
65
+ securityContext:
66
+ allowPrivilegeEscalation: false
67
+ runAsNonRoot: true
68
+ runAsUser: 1000
69
+
70
+ containers:
71
+ - name: <container-name>
72
+ image: <registry>/<image>:<tag> # Never use :latest
73
+ imagePullPolicy: IfNotPresent
74
+
75
+ ports:
76
+ - name: http
77
+ containerPort: 8080
78
+ protocol: TCP
79
+ - name: metrics
80
+ containerPort: 9090
81
+ protocol: TCP
82
+
83
+ # Environment variables
84
+ env:
85
+ - name: POD_NAME
86
+ valueFrom:
87
+ fieldRef:
88
+ fieldPath: metadata.name
89
+ - name: POD_NAMESPACE
90
+ valueFrom:
91
+ fieldRef:
92
+ fieldPath: metadata.namespace
93
+ - name: POD_IP
94
+ valueFrom:
95
+ fieldRef:
96
+ fieldPath: status.podIP
97
+
98
+ # Load from ConfigMap and Secret
99
+ envFrom:
100
+ - configMapRef:
101
+ name: <app-name>-config
102
+ - secretRef:
103
+ name: <app-name>-secret
104
+
105
+ # Resource limits
106
+ resources:
107
+ requests:
108
+ memory: "256Mi"
109
+ cpu: "250m"
110
+ limits:
111
+ memory: "512Mi"
112
+ cpu: "500m"
113
+
114
+ # Startup probe (for slow-starting apps)
115
+ startupProbe:
116
+ httpGet:
117
+ path: /health/startup
118
+ port: http
119
+ initialDelaySeconds: 0
120
+ periodSeconds: 10
121
+ timeoutSeconds: 3
122
+ failureThreshold: 30 # 5 minutes to start
123
+
124
+ # Liveness probe
125
+ livenessProbe:
126
+ httpGet:
127
+ path: /health/live
128
+ port: http
129
+ initialDelaySeconds: 30
130
+ periodSeconds: 10
131
+ timeoutSeconds: 5
132
+ failureThreshold: 3
133
+
134
+ # Readiness probe
135
+ readinessProbe:
136
+ httpGet:
137
+ path: /health/ready
138
+ port: http
139
+ initialDelaySeconds: 5
140
+ periodSeconds: 5
141
+ timeoutSeconds: 3
142
+ failureThreshold: 3
143
+
144
+ # Volume mounts
145
+ volumeMounts:
146
+ - name: tmp
147
+ mountPath: /tmp
148
+ - name: cache
149
+ mountPath: /app/cache
150
+ # - name: data
151
+ # mountPath: /var/lib/app
152
+
153
+ # Container security context
154
+ securityContext:
155
+ allowPrivilegeEscalation: false
156
+ readOnlyRootFilesystem: true
157
+ runAsNonRoot: true
158
+ runAsUser: 1000
159
+ capabilities:
160
+ drop:
161
+ - ALL
162
+
163
+ # Lifecycle hooks
164
+ lifecycle:
165
+ preStop:
166
+ exec:
167
+ command: ["/bin/sh", "-c", "sleep 15"] # Graceful shutdown
168
+
169
+ # Volumes
170
+ volumes:
171
+ - name: tmp
172
+ emptyDir: {}
173
+ - name: cache
174
+ emptyDir:
175
+ sizeLimit: 1Gi
176
+ # - name: data
177
+ # persistentVolumeClaim:
178
+ # claimName: <app-name>-data
179
+
180
+ # Scheduling
181
+ affinity:
182
+ podAntiAffinity:
183
+ preferredDuringSchedulingIgnoredDuringExecution:
184
+ - weight: 100
185
+ podAffinityTerm:
186
+ labelSelector:
187
+ matchLabels:
188
+ app.kubernetes.io/name: <app-name>
189
+ topologyKey: kubernetes.io/hostname
190
+
191
+ topologySpreadConstraints:
192
+ - maxSkew: 1
193
+ topologyKey: topology.kubernetes.io/zone
194
+ whenUnsatisfiable: ScheduleAnyway
195
+ labelSelector:
196
+ matchLabels:
197
+ app.kubernetes.io/name: <app-name>
198
+
199
+ terminationGracePeriodSeconds: 30
200
+
201
+ # Image pull secrets (if using private registry)
202
+ # imagePullSecrets:
203
+ # - name: regcred
@@ -0,0 +1,171 @@
1
+ # Kubernetes Service Templates
2
+
3
+ ---
4
+ # Template 1: ClusterIP Service (Internal Only)
5
+ apiVersion: v1
6
+ kind: Service
7
+ metadata:
8
+ name: <app-name>
9
+ namespace: <namespace>
10
+ labels:
11
+ app.kubernetes.io/name: <app-name>
12
+ app.kubernetes.io/instance: <instance-name>
13
+ annotations:
14
+ description: "Internal service for <app-name>"
15
+ spec:
16
+ type: ClusterIP
17
+ selector:
18
+ app.kubernetes.io/name: <app-name>
19
+ app.kubernetes.io/instance: <instance-name>
20
+ ports:
21
+ - name: http
22
+ port: 80
23
+ targetPort: http # Named port from container
24
+ protocol: TCP
25
+ sessionAffinity: None
26
+
27
+ ---
28
+ # Template 2: LoadBalancer Service (External Access)
29
+ apiVersion: v1
30
+ kind: Service
31
+ metadata:
32
+ name: <app-name>-lb
33
+ namespace: <namespace>
34
+ labels:
35
+ app.kubernetes.io/name: <app-name>
36
+ annotations:
37
+ # AWS NLB annotations
38
+ service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
39
+ service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
40
+ service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
41
+ # SSL certificate (optional)
42
+ # service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:..."
43
+ spec:
44
+ type: LoadBalancer
45
+ externalTrafficPolicy: Local # Preserves client IP
46
+ selector:
47
+ app.kubernetes.io/name: <app-name>
48
+ ports:
49
+ - name: http
50
+ port: 80
51
+ targetPort: http
52
+ protocol: TCP
53
+ - name: https
54
+ port: 443
55
+ targetPort: https
56
+ protocol: TCP
57
+ # Restrict access to specific IPs (optional)
58
+ # loadBalancerSourceRanges:
59
+ # - 203.0.113.0/24
60
+
61
+ ---
62
+ # Template 3: NodePort Service (Direct Node Access)
63
+ apiVersion: v1
64
+ kind: Service
65
+ metadata:
66
+ name: <app-name>-np
67
+ namespace: <namespace>
68
+ labels:
69
+ app.kubernetes.io/name: <app-name>
70
+ spec:
71
+ type: NodePort
72
+ selector:
73
+ app.kubernetes.io/name: <app-name>
74
+ ports:
75
+ - name: http
76
+ port: 80
77
+ targetPort: 8080
78
+ nodePort: 30080 # Optional, 30000-32767 range
79
+ protocol: TCP
80
+
81
+ ---
82
+ # Template 4: Headless Service (StatefulSet)
83
+ apiVersion: v1
84
+ kind: Service
85
+ metadata:
86
+ name: <app-name>-headless
87
+ namespace: <namespace>
88
+ labels:
89
+ app.kubernetes.io/name: <app-name>
90
+ spec:
91
+ clusterIP: None # Headless
92
+ selector:
93
+ app.kubernetes.io/name: <app-name>
94
+ ports:
95
+ - name: client
96
+ port: 9042
97
+ targetPort: 9042
98
+ publishNotReadyAddresses: true # Include not-ready pods in DNS
99
+
100
+ ---
101
+ # Template 5: Multi-Port Service with Metrics
102
+ apiVersion: v1
103
+ kind: Service
104
+ metadata:
105
+ name: <app-name>-multi
106
+ namespace: <namespace>
107
+ labels:
108
+ app.kubernetes.io/name: <app-name>
109
+ annotations:
110
+ prometheus.io/scrape: "true"
111
+ prometheus.io/port: "9090"
112
+ prometheus.io/path: "/metrics"
113
+ spec:
114
+ type: ClusterIP
115
+ selector:
116
+ app.kubernetes.io/name: <app-name>
117
+ ports:
118
+ - name: http
119
+ port: 80
120
+ targetPort: 8080
121
+ protocol: TCP
122
+ - name: https
123
+ port: 443
124
+ targetPort: 8443
125
+ protocol: TCP
126
+ - name: grpc
127
+ port: 9090
128
+ targetPort: 9090
129
+ protocol: TCP
130
+ - name: metrics
131
+ port: 9091
132
+ targetPort: 9091
133
+ protocol: TCP
134
+
135
+ ---
136
+ # Template 6: Service with Session Affinity
137
+ apiVersion: v1
138
+ kind: Service
139
+ metadata:
140
+ name: <app-name>-sticky
141
+ namespace: <namespace>
142
+ labels:
143
+ app.kubernetes.io/name: <app-name>
144
+ spec:
145
+ type: ClusterIP
146
+ selector:
147
+ app.kubernetes.io/name: <app-name>
148
+ ports:
149
+ - name: http
150
+ port: 80
151
+ targetPort: 8080
152
+ protocol: TCP
153
+ sessionAffinity: ClientIP
154
+ sessionAffinityConfig:
155
+ clientIP:
156
+ timeoutSeconds: 10800 # 3 hours
157
+
158
+ ---
159
+ # Template 7: ExternalName Service (External Service Mapping)
160
+ apiVersion: v1
161
+ kind: Service
162
+ metadata:
163
+ name: external-db
164
+ namespace: <namespace>
165
+ spec:
166
+ type: ExternalName
167
+ externalName: db.example.com
168
+ ports:
169
+ - port: 5432
170
+ targetPort: 5432
171
+ protocol: TCP