...

Source file src/edge-infra.dev/pkg/f8n/gcp/k8s/controllers/projectinit/controller.go

Documentation: edge-infra.dev/pkg/f8n/gcp/k8s/controllers/projectinit

     1  /*
     2  Package projectinit provides a simple K8s controller for automating some common
     3  infrastructure set up in GCP for Project resources.
     4  
     5  This controller does not manage anything that is specific to Edge, such as
     6  Banner setup.  Only actions that would be common to every GCP Project, such
     7  as configuring firewall rules, should be taken by this controller.
     8  
     9  # Firewall Configuration
    10  
    11  - Assumes usage of the default network
    12  
    13  # Compute SSL Policy Configuration
    14  
    15  - Creates the "ncr-default" ComputeSSLPolicy that enforces a minimum TLS version of 1.2
    16  
    17  # Artifact Registry Permissions
    18  
    19  - Wires up the default Compute Engine service account for the reconciled project to be able to pull from the configured artifact registry.
    20  */
    21  package projectinit
    22  
    23  import (
    24  	"os"
    25  
    26  	compute "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/compute/v1beta1"
    27  	iam "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/iam/v1beta1"
    28  	resourcemgr "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/resourcemanager/v1beta1"
    29  	secretmgr "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/secretmanager/v1beta1"
    30  	"k8s.io/apimachinery/pkg/runtime"
    31  	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
    32  	clientgoscheme "k8s.io/client-go/kubernetes/scheme"
    33  	ctrl "sigs.k8s.io/controller-runtime"
    34  
    35  	"edge-infra.dev/pkg/k8s/runtime/controller"
    36  	"edge-infra.dev/pkg/lib/logging"
    37  )
    38  
    39  // Run creates the manager, sets up the controller, and then starts the
    40  // manager.
    41  func Run(o ...controller.Option) error {
    42  	ctrl.SetLogger(logging.NewLogger().Logger)
    43  	log := ctrl.Log.WithName("setup")
    44  
    45  	cfg, err := newConfig(os.Args)
    46  	if err != nil {
    47  		log.Error(err, "failed to parse startup configuration")
    48  		return err
    49  	}
    50  
    51  	mgr, err := create(cfg, o...)
    52  	if err != nil {
    53  		log.Error(err, "failed to create controller")
    54  		return err
    55  	}
    56  
    57  	log.Info("starting manager")
    58  	if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
    59  		log.Error(err, "problem running manager")
    60  		return err
    61  	}
    62  
    63  	return nil
    64  }
    65  
    66  // create wires up the reconciler(s) with a created manager and returns the
    67  // manager + setup logger
    68  func create(cfg Config, o ...controller.Option) (ctrl.Manager, error) {
    69  	mgr, err := CreateMgr(o...)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	if err := RegisterController(mgr, cfg); err != nil {
    75  		return nil, err
    76  	}
    77  
    78  	return mgr, nil
    79  }
    80  
    81  func CreateMgr(o ...controller.Option) (ctrl.Manager, error) {
    82  	restcfg, opts := controller.ProcessOptions(o...)
    83  	opts.LeaderElectionID = "187187.project-manager.edge.ncr.com"
    84  	opts.Scheme = createScheme()
    85  
    86  	return ctrl.NewManager(restcfg, opts)
    87  }
    88  
    89  func RegisterController(mgr ctrl.Manager, cfg Config) error {
    90  	return (&Reconciler{
    91  		Client:             mgr.GetClient(),
    92  		FirewallConfig:     cfg.Firewall,
    93  		ArtifactRegistries: cfg.ArtifactRegistries,
    94  		Name:               ControllerName,
    95  		Namespace:          cfg.Namespace,
    96  		retryInterval:      cfg.RetryInterval,
    97  		GCPRegion:          cfg.gcpRegion,
    98  	}).SetupWithManager(mgr)
    99  }
   100  
   101  func createScheme() *runtime.Scheme {
   102  	scheme := runtime.NewScheme()
   103  
   104  	utilruntime.Must(clientgoscheme.AddToScheme(scheme))
   105  	utilruntime.Must(compute.AddToScheme(scheme))
   106  	utilruntime.Must(resourcemgr.AddToScheme(scheme))
   107  	utilruntime.Must(iam.AddToScheme(scheme))
   108  	utilruntime.Must(secretmgr.AddToScheme(scheme))
   109  
   110  	return scheme
   111  }
   112  

View as plain text