* fix: make podDisruptive actually trigger pod restart for outputs-based traits
When a TraitDefinition sets podDisruptive: true but renders its output
via outputs: (e.g. a ConfigMap) instead of patch:, the workload's pod
was never restarted when the trait's content changed - podDisruptive
was effectively a no-op.
This adds propagatePodDisruptiveHash, called from SetOAMContract for
every rendered trait. When the trait's TraitDefinition has
podDisruptive: true and the target workload has a spec.template, a
content hash of the trait's rendered output is stamped onto
spec.template.metadata.annotations as
app.oam.dev/trait-restart-hash-<traitType>. Since this lives inside
spec.template, any change to the trait's content changes the pod
template, causing the owning controller (Deployment/StatefulSet/...)
to roll the pods automatically.
Fixes#7204
Signed-off-by: Ankit Kumar <ankitkumarrain12@gmail.com>
* fix: address cubic review for podDisruptive restart hash
Harden annotation key length checks against the Kubernetes name-segment
limit (63 chars after the slash) and document selective metadata hashing
so user name/labels/annotations change the restart hash while
controller/OAM revision churn does not. Expand unit coverage and drop a
duplicate test case.
Signed-off-by: Ankit Kumar <ankitkumarrain12@gmail.com>
* Revert "fix: address cubic review for podDisruptive restart hash"
This reverts commit d666da0024099b8935347137cac81609b7c1d84a.
Signed-off-by: Ankit Kumar <ankitkumarrain12@gmail.com>
---------
Signed-off-by: Ankit Kumar <ankitkumarrain12@gmail.com>
Introduces application-scoped policies and global auto-applied policies
for KubeVela.
Key changes:
- PolicyDefinition gains `scope`, `global`, and `priority` fields
- Global policies (global=true, scope=Application) are auto-applied to
every Application in their namespace (and vela-system globals apply
cluster-wide) without being listed in spec.policies
- PolicyScopeIndex: in-memory singleton index of PolicyDefinition
metadata, bootstrapped at startup and kept live via watch events.
Follows KubeVela's 2-step lookup (local namespace → vela-system)
- ApplicationPolicyCache: per-app cache of rendered policy results,
invalidated by spec hash, revision hash, or TTL; cleared on deletion
- Policy rendering pipeline extended to inject global policies before
user-specified ones, respecting priority ordering
- Appfile.Context carries context.Context from controller into rendering
- Feature gates: EnableApplicationScopedPolicies and EnableGlobalPolicies
(both Alpha, default false); admission webhook warns when a
PolicyDefinition targets a disabled gate
Signed-off-by: Brian Kane <briankane1@gmail.com>
* feat(appfile): Add comprehensive unit tests for appfile package
This commit significantly enhances the test coverage for the `pkg/appfile` package by adding a comprehensive suite of new unit tests. These tests improve the reliability of core application parsing, generation, and validation logic.
Key additions include:
- **Parsing:** New tests for policy parsing, legacy application revision handling, and dynamic component loading.
- **Manifest Generation:** Added coverage for `GenerateComponentManifests` and `GeneratePolicyManifests` to ensure correctness of generated resources.
- **OAM Contracts:** New tests for `SetOAMContract` and `setWorkloadRefToTrait` to verify OAM label and reference injection.
- **Template & Context:** Added tests for loading templates from revisions (`LoadTemplateFromRevision`) and preparing the process context (`PrepareProcessContext`).
- **Validation:** Enhanced validation tests for component parameters and uniqueness of output names.
As part of this effort, the existing tests were also migrated from Ginkgo to the standard `testing` package with `testify/assert` to maintain consistency across the codebase.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* refactor(pkg/component): Migrate ref-objects tests to standard Go testing and add new test cases
This commit refactors the unit tests for `pkg/component/ref-objects` from a Ginkgo-based suite to the standard Go `testing` package. Additionally, new unit test cases have been added to further enhance test coverage and ensure the robustness of the `ref-objects` functionality.
Key changes include:
- Deletion of `pkg/component/ref_objects_suite_test.go`.
- Introduction of `pkg/component/main_test.go` to manage test environment setup and teardown using `TestMain`.
- Creation of `pkg/component/ref_objects_test.go` containing all the ref-objects related unit tests, now using standard Go testing functions, along with newly added test cases for improved coverage.
This migration improves consistency with other unit tests in the codebase and leverages the native Go testing framework.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* chore(pkg/component): Reorder imports in ref_objects_test.go
This commit reorders the import statements in `pkg/component/ref_objects_test.go` to adhere to standard Go formatting and import grouping conventions. This change improves code readability and consistency.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
---------
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* Feat: support force delete Terraform typed application
If a Terraform typed application hangs on deletion, it could be forced to
delete by command line `vela delete xxx --force`
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* fix copyright
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* Upgrade terraform controller api version
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* add one more tests
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* fix two unit-tests
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* Fix(context): add support for context.appLables and context.appAnnotations (#3463)
Signed-off-by: zxbyoyoyo <596908030@qq.com>
Signed-off-by: 朱晓兵 <596908030@qq.com>
* Fix: unit test
Signed-off-by: 朱晓兵 <596908030@qq.com>
* Fix: recover deleted field
Signed-off-by: 朱晓兵 <596908030@qq.com>
* Fix: when a provider is set in ComponentDefinition, it should look for the provider
Fixed the issue "The error message is not correct when AWS provider is not available"
Fix#3046
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* Fix: pass on properties of Terraform typed application to Configuration
Pass on properties like `writeConnectionSecretRef`, `Region` and `providerRef`
to Configuration.
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* revert definitions
Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
* Feat: remove envbinding policy into workflow
Feat: add support for env change (env gc)
Fix: fix rollout timeout setting bug
* Feat: support disable trait and env without workflow
* Fix: add hint for replaced value
* upgrade K8s dependency to v0.21
* update CRD for new version of controller-runtime
* fix ci component revision create must fill Raw in runtime.RawExtension
* try fix test
* start control plane timeout set to 1min and fix tests
* add timeout for env test start and stop
* longer timeout time for BeforeSuit function
* upgrade kubebuilder and k8s cluster version to match with v1.21.2 in github action
* fix test
* fix resource tracker ownerRef override
* update developer guides
rfc appfile pkg: remove appConfig&component
fix unit test
rfc vela cli dryrun & livediff
fix unit test & e2e test
rfc app controller: remove appConfig&component
fix unit test & e2e test
fix rollout and webhook
fix use AppRevision as others' owner
move ComponentManifest to oam.types
add a util to make conversion between AppConfig and ComponentManifest
complete Component revision mechanism in app controller
add test for component revision
rename
fix unit tests
add clean up for component revision
fix unit test
Signed-off-by: roywang <seiwy2010@gmail.com>
* Support server-side Terraform as cloud resource provider
Provide another schematic `Terraform` to provision cloud
resource.
Fix#698
* make namespace optional
add unit-tests
* support vela show to generate componentdefinition usage
* add unit-tests
* tidy go mod
* clean go mod and updated go sum
* Remove `variable` from `properties` of Terraform compoent
* don't literally set component catagory
* refine error message when a capability could not be found
* fix ut
* Code refactor and add unittests
* fix ci issues
* Update references/plugins/references.go
Co-authored-by: Jianbo Sun <wonderflow.sun@gmail.com>
* add test cases
* fix ci issue
* revert lowercase of "Properties"
* fix ci issue
* add ut for appfile
* fix e2e issue
* add docs
* fix official site build
Co-authored-by: Jianbo Sun <wonderflow.sun@gmail.com>