Skip to content

Commit

Permalink
Update deployment file structure
Browse files Browse the repository at this point in the history
Signed-off-by: Jian Qiu <jqiu@redhat.com>
  • Loading branch information
qiujian16 committed Jun 18, 2024
1 parent 99350c4 commit 0d7590c
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 126 deletions.
57 changes: 19 additions & 38 deletions pkg/cmd/install/hubaddon/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,6 @@ import (
"open-cluster-management.io/clusteradm/pkg/version"
)

const (
appMgrAddonName = "application-manager"
policyFrameworkAddonName = "governance-policy-framework"
)

func (o *Options) complete(cmd *cobra.Command, args []string) (err error) {
klog.V(1).InfoS("addon options:", "dry-run", o.ClusteradmFlags.DryRun, "names", o.names, "output-file", o.outputFile)
return nil
Expand All @@ -37,12 +32,7 @@ func (o *Options) validate() (err error) {

names := strings.Split(o.names, ",")
for _, n := range names {
switch n {
case appMgrAddonName:
continue
case policyFrameworkAddonName:
continue
default:
if _, ok := scenario.AddonDeploymentFiles[n]; !ok {
return fmt.Errorf("invalid add-on name %s", n)
}
}
Expand Down Expand Up @@ -79,34 +69,25 @@ func (o *Options) runWithClient() error {
r := reader.NewResourceReader(o.ClusteradmFlags.KubectlFactory, o.ClusteradmFlags.DryRun, o.Streams)

for _, addon := range o.values.hubAddons {
switch addon {
// Install the Application Management Addon
case appMgrAddonName:
err := r.Apply(scenario.Files, o.values, scenario.AppManagerConfigFiles...)
if err != nil {
return err
}
err = r.Apply(scenario.Files, o.values, scenario.AppManagerDeploymentFiles...)
if err != nil {
return err
}

fmt.Fprintf(o.Streams.Out, "Installing built-in %s add-on to the Hub cluster...\n", appMgrAddonName)

// Install the Policy Framework Addon
case policyFrameworkAddonName:
err := r.Apply(scenario.Files, o.values, scenario.PolicyFrameworkConfigFiles...)
if err != nil {
return fmt.Errorf("Error deploying framework deployment dependencies: %w", err)
}

err = r.Apply(scenario.Files, o.values, scenario.PolicyFrameworkDeploymentFiles...)
if err != nil {
return fmt.Errorf("Error deploying framework deployments: %w", err)
}

fmt.Fprintf(o.Streams.Out, "Installing built-in %s add-on to the Hub cluster...\n", policyFrameworkAddonName)
files, ok := scenario.AddonDeploymentFiles[addon]
if !ok {
continue
}
err := r.Apply(scenario.Files, o.values, files.CRDFiles...)
if err != nil {
return fmt.Errorf("Error deploying %s CRDs: %w", addon, err)
}
err = r.Apply(scenario.Files, o.values, files.ConfigFiles...)
if err != nil {
return fmt.Errorf("Error deploying %s dependencies: %w", addon, err)
}
err = r.Apply(scenario.Files, o.values, files.DeploymentFiles...)
if err != nil {
return fmt.Errorf("Error deploying %s deployments: %w", addon, err)
}

fmt.Fprintf(o.Streams.Out, "Installing built-in %s add-on to the Hub cluster...\n", addon)

}

if len(o.outputFile) > 0 {
Expand Down
3 changes: 2 additions & 1 deletion pkg/cmd/install/hubaddon/exec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/cli-runtime/pkg/genericclioptions"
"open-cluster-management.io/clusteradm/pkg/cmd/install/hubaddon/scenario"
"open-cluster-management.io/clusteradm/pkg/version"
)

Expand Down Expand Up @@ -100,7 +101,7 @@ var _ = ginkgo.Describe("install hub-addon", func() {
bundleVersion: ocmVersion,
values: Values{
Namespace: invalidNamespace,
hubAddons: []string{appMgrAddonName},
hubAddons: []string{scenario.AppMgrAddonName},
},
Streams: genericclioptions.IOStreams{Out: os.Stdout, ErrOut: os.Stderr},
}
Expand Down
114 changes: 66 additions & 48 deletions pkg/cmd/install/hubaddon/scenario/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,55 +8,73 @@ import (
//go:embed addon
var Files embed.FS

var (
PolicyFrameworkConfigFiles = []string{
"addon/policy/addon-controller_clusterrole.yaml",
"addon/policy/addon-controller_clusterrolebinding.yaml",
"addon/policy/addon-controller_role.yaml",
"addon/policy/addon-controller_rolebinding.yaml",
"addon/policy/addon-controller_serviceaccount.yaml",
"addon/policy/policy.open-cluster-management.io_placementbindings.yaml",
"addon/policy/policy.open-cluster-management.io_policies.yaml",
"addon/policy/policy.open-cluster-management.io_policyautomations.yaml",
"addon/policy/policy.open-cluster-management.io_policysets.yaml",
"addon/policy/propagator_clusterrole.yaml",
"addon/policy/propagator_clusterrolebinding.yaml",
"addon/policy/propagator_role.yaml",
"addon/policy/propagator_rolebinding.yaml",
"addon/policy/propagator_service.yaml",
"addon/policy/propagator_serviceaccount.yaml",
"addon/policy/clustermanagementaddon_configpolicy.yaml",
"addon/policy/clustermanagementaddon_policyframework.yaml",
"addon/appmgr/crd_placementrule.yaml",
}

PolicyFrameworkDeploymentFiles = []string{
"addon/policy/addon-controller_deployment.yaml",
"addon/policy/propagator_deployment.yaml",
}
const (
AppMgrAddonName = "application-manager"
PolicyFrameworkAddonName = "governance-policy-framework"
)

AppManagerConfigFiles = []string{
"addon/appmgr/clustermanagementaddon_appmgr.yaml",
"addon/appmgr/clusterrole_agent.yaml",
"addon/appmgr/clusterrole_binding.yaml",
"addon/appmgr/clusterrole.yaml",
"addon/appmgr/crd_channel.yaml",
"addon/appmgr/crd_helmrelease.yaml",
"addon/appmgr/crd_placementrule.yaml",
"addon/appmgr/crd_subscription.yaml",
"addon/appmgr/crd_subscriptionstatuses.yaml",
"addon/appmgr/crd_report.yaml",
"addon/appmgr/crd_clusterreport.yaml",
"addon/appmgr/service_account.yaml",
"addon/appmgr/service_metrics.yaml",
"addon/appmgr/service_operator.yaml",
"addon/appmgr/mutatingwebhookconfiguration.yaml",
}
type AddonDeploymentFile struct {
ConfigFiles []string
DeploymentFiles []string
CRDFiles []string
}

AppManagerDeploymentFiles = []string{
"addon/appmgr/deployment_channel.yaml",
"addon/appmgr/deployment_subscription.yaml",
"addon/appmgr/deployment_placementrule.yaml",
"addon/appmgr/deployment_appsubsummary.yaml",
var (
AddonDeploymentFiles = map[string]AddonDeploymentFile{
PolicyFrameworkAddonName: {
ConfigFiles: []string{
"addon/policy/addon-controller_clusterrole.yaml",
"addon/policy/addon-controller_clusterrolebinding.yaml",
"addon/policy/addon-controller_role.yaml",
"addon/policy/addon-controller_rolebinding.yaml",
"addon/policy/addon-controller_serviceaccount.yaml",
"addon/policy/propagator_clusterrole.yaml",
"addon/policy/propagator_clusterrolebinding.yaml",
"addon/policy/propagator_role.yaml",
"addon/policy/propagator_rolebinding.yaml",
"addon/policy/propagator_service.yaml",
"addon/policy/propagator_serviceaccount.yaml",
"addon/policy/clustermanagementaddon_configpolicy.yaml",
"addon/policy/clustermanagementaddon_policyframework.yaml",
},
CRDFiles: []string{
"addon/policy/policy.open-cluster-management.io_placementbindings.yaml",
"addon/policy/policy.open-cluster-management.io_policies.yaml",
"addon/policy/policy.open-cluster-management.io_policyautomations.yaml",
"addon/policy/policy.open-cluster-management.io_policysets.yaml",
"addon/appmgr/crd_placementrule.yaml",
},
DeploymentFiles: []string{
"addon/policy/addon-controller_deployment.yaml",
"addon/policy/propagator_deployment.yaml",
},
},
AppMgrAddonName: {
ConfigFiles: []string{
"addon/appmgr/clustermanagementaddon_appmgr.yaml",
"addon/appmgr/clusterrole_agent.yaml",
"addon/appmgr/clusterrole_binding.yaml",
"addon/appmgr/clusterrole.yaml",
"addon/appmgr/service_account.yaml",
"addon/appmgr/service_metrics.yaml",
"addon/appmgr/service_operator.yaml",
"addon/appmgr/mutatingwebhookconfiguration.yaml",
},
CRDFiles: []string{
"addon/appmgr/crd_channel.yaml",
"addon/appmgr/crd_helmrelease.yaml",
"addon/appmgr/crd_placementrule.yaml",
"addon/appmgr/crd_subscription.yaml",
"addon/appmgr/crd_subscriptionstatuses.yaml",
"addon/appmgr/crd_report.yaml",
"addon/appmgr/crd_clusterreport.yaml",
},
DeploymentFiles: []string{
"addon/appmgr/deployment_channel.yaml",
"addon/appmgr/deployment_subscription.yaml",
"addon/appmgr/deployment_placementrule.yaml",
"addon/appmgr/deployment_appsubsummary.yaml",
},
},
}
)
60 changes: 21 additions & 39 deletions pkg/cmd/uninstall/hubaddon/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@ import (
"open-cluster-management.io/clusteradm/pkg/cmd/install/hubaddon/scenario"
)

const (
appMgrAddonName = "application-manager"
policyFrameworkAddonName = "governance-policy-framework"
)

func (o *Options) complete(cmd *cobra.Command, args []string) (err error) {
klog.V(1).InfoS("addon options:", "dry-run", o.ClusteradmFlags.DryRun, "names", o.names)
return nil
Expand All @@ -38,12 +33,7 @@ func (o *Options) validate() (err error) {

names := strings.Split(o.names, ",")
for _, n := range names {
switch n {
case appMgrAddonName:
continue
case policyFrameworkAddonName:
continue
default:
if _, ok := scenario.AddonDeploymentFiles[n]; !ok {
return fmt.Errorf("invalid add-on name %s", n)
}
}
Expand Down Expand Up @@ -76,35 +66,27 @@ func (o *Options) runWithClient() error {
if err := o.checkExistingAddon(addon); err != nil {
return err
}
switch addon {
// Install the Application Management Addon
case appMgrAddonName:
err := r.Delete(scenario.Files, o.values, scenario.AppManagerConfigFiles...)
if err != nil {
return err
}

err = r.Delete(scenario.Files, o.values, scenario.AppManagerDeploymentFiles...)
if err != nil {
return err
}

fmt.Fprintf(o.Streams.Out, "Uninstalling built-in %s add-on from the Hub cluster...\n", appMgrAddonName)

// Install the Policy Framework Addon
case policyFrameworkAddonName:
err := r.Delete(scenario.Files, o.values, scenario.PolicyFrameworkConfigFiles...)
if err != nil {
return fmt.Errorf("Error deploying framework deployment dependencies: %w", err)
}

err = r.Delete(scenario.Files, o.values, scenario.PolicyFrameworkDeploymentFiles...)
if err != nil {
return fmt.Errorf("Error deploying framework deployments: %w", err)
}

fmt.Fprintf(o.Streams.Out, "Uninstalling built-in %s add-on from the Hub cluster...\n", policyFrameworkAddonName)
files, ok := scenario.AddonDeploymentFiles[addon]
if !ok {
continue
}

err := r.Delete(scenario.Files, o.values, files.CRDFiles...)
if err != nil {
return err
}

err = r.Delete(scenario.Files, o.values, files.ConfigFiles...)
if err != nil {
return err
}

err = r.Delete(scenario.Files, o.values, files.DeploymentFiles...)
if err != nil {
return err
}

fmt.Fprintf(o.Streams.Out, "Uninstalling built-in %s add-on from the Hub cluster...\n", addon)
}

return nil
Expand Down

0 comments on commit 0d7590c

Please sign in to comment.