Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
8945b54
CI: validate only the first commit message from the PR (#1342)
sridhargaddam Nov 13, 2025
8a949d0
Add Claude Code command for updating EOL Istio versions (#1326)
FilipB Nov 14, 2025
6c916ef
Fix make gen errors when vendor folder is present (#1348)
sridhargaddam Nov 17, 2025
fddcf9e
Adding Istio 1.28.0 (#1344)
FilipB Nov 17, 2025
b22468f
Test External Control Plane on latest versions (#1352)
mkolesnik Nov 17, 2025
fd7e684
Unpining OLM version as 0.38.0 is reverting the breaking change (#1347)
FilipB Nov 17, 2025
2402ed5
fix: update codecov ignore pattern for tests directory (#1357)
rafaelvzago Nov 17, 2025
3ff9627
Make getProxyVersion robust to changes in istioctl proxy-status forma…
unsortedhashsets Nov 20, 2025
46b00f5
Changes on crd-ref-docs templates to add API version to the CRD (#1368)
fjglira Nov 20, 2025
6cf4cdd
Make sure to skip cleanup of operator in e2e (#1351)
mkolesnik Nov 20, 2025
4908014
fix: pin helm to v3 (#1375)
dgn Nov 21, 2025
aebc5eb
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Nov 22, 2025
a2fb274
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Nov 23, 2025
4c62f0d
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Nov 24, 2025
d2cbd96
Automatic update for Istio versions in Docs (#1374)
fjglira Nov 24, 2025
2f1ea60
api: add ZTunnel v1 CRD version (#1365)
dgn Nov 25, 2025
68f3436
Remove Profile printcolumn from ztunnel status (#1386)
sridhargaddam Nov 25, 2025
98ed1a9
Adding debug information for sample applications (#1390)
fjglira Nov 26, 2025
ec1f62e
Update AGENTS.md and domain knowledge files (#1395)
sridhargaddam Nov 26, 2025
2cd754a
Add CLAUDE.md to the sail operator repo (#1402)
sridhargaddam Nov 27, 2025
afdde80
Fix SIGPIPE error in update-istio-in-docs.sh script (#1404)
fjglira Nov 27, 2025
cf775db
Adding make target to run update-dependencies script (#1405)
fjglira Nov 28, 2025
0a3af7b
Fix issues in the e2e samples readme file (#1415)
sridhargaddam Dec 1, 2025
69cd12f
E2E code consolidations (#1397)
mkolesnik Dec 2, 2025
09eddf1
Fix update Istio version in docs for main readme (#1419)
fjglira Dec 2, 2025
7154627
fix(docs): Restore lost content from migration (#1418)
mkolesnik Dec 2, 2025
385ce6d
Add docs for enabling Istio native nftables feature (#1122)
yxun Dec 3, 2025
f873ca4
Add Claude slash command for creating a dev env (#1420)
sridhargaddam Dec 3, 2025
e3c9527
Add Ambient multi cluster E2E tests for Multi Primary deployments (#1…
mkolesnik Dec 4, 2025
5b737b2
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 4, 2025
3af7884
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 5, 2025
e6391d7
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 6, 2025
b804412
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 7, 2025
9f20b4c
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 9, 2025
3519b23
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 10, 2025
43234a9
Add support for pinning tool versions to minor releases (#1421)
FilipB Dec 10, 2025
c96aa9a
docs-test: improve logging (#1433)
dgn Dec 10, 2025
1899dfa
Running automator to update deps also for release branches (#1424)
FilipB Dec 10, 2025
3f84d41
Update release process doc to reference up to date checklists (#1437)
FilipB Dec 10, 2025
ea163e6
Fix ztunnel version enumeration in update-version-list script (#1416)
sridhargaddam Dec 10, 2025
ebc9dec
tests: add junit reports for unit/integration/docs tests (#1439)
dgn Dec 10, 2025
01b3d22
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 11, 2025
4b9a302
Fix sail operator api-reference links (#1448)
sridhargaddam Dec 11, 2025
3229a4f
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 12, 2025
b1b4e17
Bump operator version to 1.29.0 (#1451)
FilipB Dec 12, 2025
be8c5ad
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 13, 2025
bb14b58
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 15, 2025
3a48877
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 16, 2025
a3fc886
Add Operator image build trigger on "versions.yaml" change (#1461)
MaxBab Dec 16, 2025
8154daf
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 17, 2025
fbbf004
set preserve-unknown-fields on gatewayClasses (#1465)
skriss Dec 17, 2025
1f15d72
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 18, 2025
d8e669c
fix: allow automator commits without message (#1470)
dgn Dec 18, 2025
64dab4c
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Dec 19, 2025
885bbcd
fix: dual-stack doc list (#1479)
chinaran Dec 26, 2025
bfd8725
fix dual-stack kind cluster sample and add beta version (#1488)
chinaran Dec 29, 2025
4ee3994
Adding docs for integrating Istio with ZTWIM (SPIFFE/SPIRE) (#1319)
Dimss Jan 2, 2026
8d944ff
claude: generate-release-notes slash command (#1471)
skriss Jan 2, 2026
f60c176
[claude] Add "/submit-pr" slash command (#1487)
MaxBab Jan 2, 2026
e8a168c
fix unbound shell variable (#1491)
rikatz Jan 6, 2026
80ad5a6
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 6, 2026
4868852
fix: Minimize wildcard use in operator ClusterRoles (#1477)
chinaran Jan 7, 2026
e5b85f4
E2E: Fixes to stabilize the multicluster tests further (#1472)
mkolesnik Jan 8, 2026
bf8159e
Use the setup buildx action in nightly image build (#1501)
nrfox Jan 9, 2026
5eeccdc
Use the setup buildx action in release workflow (#1503)
FilipB Jan 12, 2026
d51e46d
E2E: Improve Cleaner waiting logic (#1494)
mkolesnik Jan 12, 2026
9441ec4
Transform structpb types back into their k8s types (#1493)
nrfox Jan 13, 2026
bf518b2
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 14, 2026
8eba765
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 15, 2026
b567056
Use the setup buildx action in versions-triggered-build flow (#1511)
MaxBab Jan 15, 2026
453ab1a
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 16, 2026
90eac46
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 17, 2026
407308a
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 18, 2026
c1aaf0e
docs: Add Multi-Primary Multi-Network Ambient mode instructions (#1505)
unsortedhashsets Jan 19, 2026
6582b2f
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 20, 2026
60cc479
Fix yq expression syntax in configuration-converter (#1519)
MaxBab Jan 20, 2026
f3e2114
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 21, 2026
bd2d9dc
Enable external registry support for OCP e2e tests in CI (#1514)
fjglira Jan 21, 2026
cd99c52
update eol istio versions (#1529)
pbajjuri20 Jan 21, 2026
555c5ac
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 22, 2026
f9d93a6
Automator: Update dependencies in istio-ecosystem/sail-operator@main …
openshift-service-mesh-bot Jan 23, 2026
d2d11db
[release-1.28] Add Istio 1.28.3 + bump operator version
rafaelvzago Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Create Domain Knowledge File

This guide outlines best practices for creating domain knowledge files in the `.github/ai_agents/knowledge/` folder. These files serve as a source of truth for understanding the Sail Operator architecture, patterns, and implementation details.
This guide outlines best practices for creating domain knowledge files in the `.agents/knowledge/` folder. These files serve as a source of truth for understanding the Sail Operator architecture, patterns, and implementation details.

## Naming Convention

Expand Down Expand Up @@ -232,10 +232,10 @@ Common issues and solutions:
## Related Components

Links to related Sail Operator domain knowledge files:
- [API Types](domain-knowledge-api-types.md)
- [Controllers](domain-knowledge-controllers.md)
- [Testing Framework](domain-knowledge-testing-framework.md)
- [Version Management](domain-knowledge-version-management.md)
- [API Types](knowledge/domain-knowledge-api-types.md)
- [Controllers](knowledge/domain-knowledge-controllers.md)
- [Testing Framework](knowledge/domain-knowledge-testing-framework.md)
- [Version Management](knowledge/domain-knowledge-version-management.md)
```

## Maintenance
Expand Down
228 changes: 228 additions & 0 deletions .agents/knowledge/domain-knowledge-api-types.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
# Sail Operator API Types Domain Knowledge

This document provides AI agents with detailed knowledge about the Sail Operator's Custom Resource Definitions (CRDs) and API types.

## Core Custom Resources

### Istio Resource
The primary resource for managing Istio control plane deployments.

**Key Fields:**
- `spec.version` - Istio version to install (defaults to operator's default version)
- `spec.namespace` - Target namespace for control plane (default: `istio-system`, immutable)
- `spec.profile` - Built-in installation profile (e.g., `default`, `ambient`, `openshift`)
- `spec.values` - Helm values for customizing Istio installation
- `spec.updateStrategy.type` - Update strategy: `InPlace` (default) or `RevisionBased`
- `spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds` - Seconds before removing inactive revision (default: 30)
- `spec.updateStrategy.updateWorkloads` - Automatically move workloads to new revision (default: false)

**Status Fields:**
- `status.state` - Current state: `Healthy`, `Installing`, `Updating`, `Error`, etc.
- `status.activeRevisionName` - Name of the active IstioRevision
- `status.revisions` - Summary of all managed revisions

### IstioRevision Resource
Represents a specific deployment of Istio control plane components.

**Key Fields:**
- `spec.version` - Exact Istio version for this revision
- `spec.namespace` - Installation namespace
- `spec.values` - Helm configuration values

**Status Fields:**
- `status.state` - Revision state: `Installing`, `Healthy`, `Failed`, etc.
- `status.conditions` - Detailed condition information

### IstioCNI Resource
Manages the Istio CNI plugin (required for OpenShift and Ambient mesh).

**Key Fields:**
- `spec.version` - CNI plugin version (must match Istio version)
- `spec.namespace` - CNI installation namespace (default: `istio-cni`, immutable)
- `spec.profile` - Built-in installation profile
- `spec.values` - CNI-specific Helm values

**Note:** The resource name must be `default` (validated by CRD).

### ZTunnel Resource
Manages ZTunnel workloads for Istio Ambient mesh mode.

**Key Fields:**
- `spec.version` - ZTunnel version (must match Istio version)
- `spec.namespace` - ZTunnel namespace (default: `ztunnel`)
- `spec.values` - ZTunnel configuration values

**Note:** The resource name must be `default` (validated by CRD). ZTunnel was promoted to v1 API; a v1alpha1 version still exists for backwards compatibility.

### IstioRevisionTag Resource
Creates revision tags for canary deployments and traffic shifting. References an Istio or IstioRevision object and serves as an alias for sidecar injection.

**Key Fields:**
- `spec.targetRef.kind` - Kind of target resource (`Istio` or `IstioRevision`)
- `spec.targetRef.name` - Name of the target resource

**Status Fields:**
- `status.istioRevision` - Name of the referenced IstioRevision
- `status.istiodNamespace` - Namespace of the corresponding Istiod instance

## Common Patterns

### Profile Configuration
Istio and IstioCNI resources support profiles for predefined configuration sets:
- `ambient` - Ambient mesh configuration
- `default` - Default Istio configuration (always applied)
- `demo` - Demo configuration with additional features
- `empty` - Empty profile
- `openshift` - OpenShift-specific configuration (auto-applied on OpenShift)
- `openshift-ambient` - OpenShift with Ambient mesh
- `preview` - Preview features
- `remote` - Remote cluster configuration
- `stable` - Stable production configuration

### Values Configuration
All resources support Helm values via the `values` field:

```yaml
spec:
values:
global:
variant: distroless
logging:
level: "all:info"
meshConfig:
trustDomain: cluster.local
defaultConfig:
proxyStatsMatcher:
inclusionRegexps:
- ".*outlier_detection.*"
```

### Version Management
- Versions are specified as semantic versions (e.g., `1.25.0`)
- If no version specified, uses operator's default supported version
- Version compatibility is enforced by the operator

### Resource Relationships
1. `Istio` → creates/manages → `IstioRevision`
2. `IstioRevisionTag` → references → `Istio`
3. Ambient mode requires: `Istio` + `IstioCNI` + `ZTunnel`
4. Sidecar mode requires: `Istio` (+ `IstioCNI` on OpenShift)

## Status Conditions

All resources use standard Kubernetes condition patterns:

**Common Condition Types:**
- `Ready` - Resource is ready and operational
- `Reconciled` - Last reconciliation was successful
- `ReconcileError` - Reconciliation encountered errors

**Condition Status Values:**
- `True` - Condition is active/successful
- `False` - Condition is inactive/failed
- `Unknown` - Condition state is uncertain

## Update Strategies

### InPlace Strategy
- Updates existing revision in-place
- Faster but with brief control plane downtime
- Default strategy

### RevisionBased Strategy
- Creates new revision alongside existing one
- Enables canary deployments and zero-downtime updates
- Requires manual traffic shifting via IstioRevisionTag

## Validation Rules

### Version Constraints
- Must use supported Istio versions (defined in `versions.yaml`)
- CNI and ZTunnel versions must be compatible with Istio version
- Revision names must be unique within namespace

### Namespace Requirements
- Control plane namespace must exist before creating Istio resource
- CNI deployed to `istio-cni` namespace
- ZTunnel deployed to `ztunnel` namespace

### Resource Dependencies
- IstioCNI must be deployed before Istio in Ambient mode
- ZTunnel requires both Istio and IstioCNI to be ready
- Removing Istio resource removes all associated IstioRevisions

## Generated Types

The `api/v1/values_types.gen.go` file contains auto-generated types from Istio's Helm values schema:

- **Values** - Root Helm values structure
- **GlobalConfig** - Global Istio configuration
- **PilotConfig** - Istiod (Pilot) specific configuration
- **ProxyConfig** - Sidecar proxy configuration
- **MeshConfig** - Service mesh configuration

These types ensure type-safe access to all Istio configuration options.

## Common Configuration Examples

### Basic Istio Installation
```yaml
apiVersion: sailoperator.io/v1
kind: Istio
metadata:
name: default
spec:
namespace: istio-system
```

### Ambient Mesh Setup
```yaml
# 1. CNI (required for Ambient)
apiVersion: sailoperator.io/v1
kind: IstioCNI
metadata:
name: default
spec:
namespace: istio-cni
profile: ambient

# 2. Control Plane
apiVersion: sailoperator.io/v1
kind: Istio
metadata:
name: default
spec:
namespace: istio-system
profile: ambient

# 3. ZTunnel
apiVersion: sailoperator.io/v1
kind: ZTunnel
metadata:
name: default
spec:
namespace: ztunnel
```

### Revision-Based Canary Deployment
```yaml
# Main Istio resource with RevisionBased strategy
apiVersion: sailoperator.io/v1
kind: Istio
metadata:
name: default
spec:
namespace: istio-system
updateStrategy:
type: RevisionBased

# Revision tag pointing to the Istio resource
apiVersion: sailoperator.io/v1
kind: IstioRevisionTag
metadata:
name: stable
spec:
targetRef:
kind: Istio
name: default
```
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ This document provides AI agents with detailed knowledge about the Sail Operator

## Controller Architecture

The Sail Operator uses the controller-runtime framework with separate controllers for each Custom Resource:

- **IstioController** - Manages `Istio` resources and their lifecycle
- **IstioRevisionController** - Manages `IstioRevision` resources and Helm deployments
- **IstioCNIController** - Manages `IstioCNI` resources for CNI plugin
- **ZTunnelController** - Manages `ZTunnel` resources for Ambient mesh
- **IstioRevisionTagController** - Manages `IstioRevisionTag` resources for canary deployments
- **WebhookController** - Manages ValidatingAdmissionWebhook for Istio resources
The Sail Operator uses the controller-runtime framework with separate controllers for each Custom Resource. Controllers are located in `controllers/<resource>/` directories:

- **IstioController** (`controllers/istio/`) - Manages `Istio` resources and their lifecycle
- **IstioRevisionController** (`controllers/istiorevision/`) - Manages `IstioRevision` resources and Helm deployments
- **IstioCNIController** (`controllers/istiocni/`) - Manages `IstioCNI` resources for CNI plugin
- **ZTunnelController** (`controllers/ztunnel/`) - Manages `ZTunnel` resources for Ambient mesh
- **IstioRevisionTagController** (`controllers/istiorevisiontag/`) - Manages `IstioRevisionTag` resources for canary deployments
- **WebhookController** (`controllers/webhook/`) - Manages MutatingWebhookConfiguration for Istio resources

## Controller Reconciliation Patterns

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,15 @@ E2E tests are organized by functionality:

```
tests/e2e/
├── operator/ # Operator deployment tests
├── ambient/ # Ambient mesh functionality
├── sidecar/ # Sidecar injection tests
├── multicluster/ # Multi-cluster scenarios
├── upgrade/ # Version upgrade tests
└── util/ # Shared utilities
├── ambient/ # Ambient mesh functionality tests
├── controlplane/ # Control plane installation and update tests
├── dualstack/ # Dual-stack networking tests
├── multicluster/ # Multi-cluster scenarios (primary-remote, multi-primary, external control plane)
├── multicontrolplane/ # Multiple control plane tests
├── operator/ # Operator deployment and installation tests
├── samples/ # Sample application tests
├── setup/ # Test setup utilities
└── util/ # Shared utilities (cleaner, kubectl, helm, etc.)
```

### Cluster Management
Expand Down Expand Up @@ -131,8 +134,8 @@ BUILD_WITH_CONTAINER=0 make test.e2e.kind
- `SKIP_BUILD=false` - Skip operator image build
- `SKIP_DEPLOY=false` - Skip operator deployment
- `IMAGE=quay.io/sail-dev/sail-operator:latest` - Operator image
- `OCP=false` - Use OpenShift cluster
- `OLM=false` - Deploy via OLM instead of Helm
- `OCP=true` - Use OpenShift cluster
- `OLM=true` - Deploy via OLM instead of Helm

#### Test Behavior
- `GINKGO_FLAGS` - Pass flags to Ginkgo runner
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,41 @@ This file defines all supported Istio versions:

```yaml
versions:
- name: v1.26-latest
ref: v1.26.0
- name: v1.26.0
version: 1.26.0
# Alias pointing to a specific version (the first entry is the default)
- name: v1.X-latest
ref: v1.X.Y

# Full version definition
- name: v1.X.Y
version: 1.X.Y
repo: https://github.com/istio/istio
commit: 1.26.0
commit: 1.X.Y
charts:
- https://istio-release.storage.googleapis.com/charts/base-1.26.0.tgz
- https://istio-release.storage.googleapis.com/charts/istiod-1.26.0.tgz
- https://istio-release.storage.googleapis.com/charts/gateway-1.26.0.tgz
- https://istio-release.storage.googleapis.com/charts/cni-1.26.0.tgz
- https://istio-release.storage.googleapis.com/charts/ztunnel-1.26.0.tgz
- https://istio-release.storage.googleapis.com/charts/base-1.X.Y.tgz
- https://istio-release.storage.googleapis.com/charts/istiod-1.X.Y.tgz
- https://istio-release.storage.googleapis.com/charts/gateway-1.X.Y.tgz
- https://istio-release.storage.googleapis.com/charts/cni-1.X.Y.tgz
- https://istio-release.storage.googleapis.com/charts/ztunnel-1.X.Y.tgz

# End-of-life version (still valid input, but not installable)
- name: v1.W-latest
ref: v1.W.Z
eol: true
- name: v1.W.Z
eol: true
```

**Note:** Check `pkg/istioversion/versions.yaml` in the repository for the current list of supported versions.

### Version Entry Structure
- **name** - Human-readable version identifier
- **name** - Human-readable version identifier (e.g., `v1.X.Y`, `v1.X-latest`)
- **ref** - Reference to another version (for alias entries like `v1.X-latest`)
- **version** - Semantic version (x.y.z)
- **repo** - Source repository URL
- **commit** - Git commit/tag reference
- **branch** - Git branch (for development versions like `master`)
- **charts** - List of Helm chart URLs for this version
- **eol** - Boolean indicating end-of-life (version remains valid but not installable)

### Vendor Customization
The version file can be customized using the `VERSIONS_YAML_FILE` environment variable:
Expand All @@ -51,9 +66,10 @@ This allows downstream vendors to:
## Versioning Policy

### Supported Version Range
- **Current policy**: n-2 versions (e.g., Operator 1.26 supports Istio 1.24-1.26)
- **Current policy**: n-2 versions (the operator supports the current and two previous minor Istio versions)
- **Version alignment**: Operator version matches latest supported Istio version
- **Patch version handling**: Not all Istio patch versions are included
- **EOL versions**: Versions can be marked with `eol: true` to keep them as valid input but not installable

### Version Lifecycle
1. **New Istio release** - Add to versions.yaml with charts
Expand Down
Loading