github.com/kotalco/kotal@v0.3.0/apis/ethereum/v1alpha1/node_defaulting_webhook.go (about) 1 package v1alpha1 2 3 import ( 4 "sigs.k8s.io/controller-runtime/pkg/webhook" 5 ) 6 7 // +kubebuilder:webhook:path=/mutate-ethereum-kotal-io-v1alpha1-node,mutating=true,failurePolicy=fail,groups=ethereum.kotal.io,resources=nodes,verbs=create;update,versions=v1alpha1,name=mutate-ethereum-v1alpha1-node.kb.io,sideEffects=None,admissionReviewVersions=v1 8 9 var _ webhook.Defaulter = &Node{} 10 11 // Default implements webhook.Defaulter so a webhook will be registered for the type 12 func (n *Node) Default() { 13 defaultAPIs := []API{Web3API, ETHAPI, NetworkAPI} 14 client := n.Spec.Client 15 nethermindNode := client == NethermindClient 16 17 if n.Spec.Image == "" { 18 var image string 19 20 switch client { 21 case BesuClient: 22 image = DefaultBesuImage 23 case GethClient: 24 image = DefaultGethImage 25 case NethermindClient: 26 image = DefaultNethermindImage 27 } 28 29 n.Spec.Image = image 30 } 31 32 if n.Spec.Replicas == nil { 33 // constants are not addressable 34 replicas := DefaltReplicas 35 n.Spec.Replicas = &replicas 36 } 37 38 // default genesis block 39 if n.Spec.Genesis != nil { 40 n.Spec.Genesis.Default() 41 } 42 43 if n.Spec.P2PPort == 0 { 44 n.Spec.P2PPort = DefaultP2PPort 45 } 46 47 if n.Spec.SyncMode == "" { 48 // public network 49 if n.Spec.Genesis == nil { 50 if n.Spec.Client == GethClient { 51 n.Spec.SyncMode = SnapSynchronization 52 } else { 53 n.Spec.SyncMode = FastSynchronization 54 } 55 } else { 56 n.Spec.SyncMode = FullSynchronization 57 } 58 } 59 60 // must be called after defaulting sync mode because it's depending on its value 61 n.DefaultNodeResources() 62 63 // nethermind doesn't support host whitelisting 64 if len(n.Spec.Hosts) == 0 && !nethermindNode { 65 n.Spec.Hosts = DefaultOrigins 66 } 67 68 // nethermind doesn't support cors domains 69 if len(n.Spec.CORSDomains) == 0 && !nethermindNode { 70 n.Spec.CORSDomains = DefaultOrigins 71 } 72 73 if n.Spec.EnginePort == 0 { 74 n.Spec.EnginePort = DefaultEngineRPCPort 75 } 76 77 if n.Spec.RPCPort == 0 { 78 n.Spec.RPCPort = DefaultRPCPort 79 } 80 81 if len(n.Spec.RPCAPI) == 0 { 82 n.Spec.RPCAPI = defaultAPIs 83 } 84 85 if n.Spec.WSPort == 0 { 86 n.Spec.WSPort = DefaultWSPort 87 } 88 89 if len(n.Spec.WSAPI) == 0 { 90 n.Spec.WSAPI = defaultAPIs 91 } 92 93 if n.Spec.GraphQLPort == 0 { 94 n.Spec.GraphQLPort = DefaultGraphQLPort 95 } 96 97 if n.Spec.Logging == "" { 98 n.Spec.Logging = DefaultLogging 99 } 100 101 } 102 103 // DefaultNodeResources defaults node cpu, memory and storage resources 104 func (n *Node) DefaultNodeResources() { 105 var cpu, cpuLimit, memory, memoryLimit, storage string 106 privateNetwork := n.Spec.Genesis != nil 107 network := n.Spec.Network 108 109 if n.Spec.Resources.CPU == "" { 110 if privateNetwork { 111 cpu = DefaultPrivateNetworkNodeCPURequest 112 } else { 113 cpu = DefaultPublicNetworkNodeCPURequest 114 } 115 116 n.Spec.Resources.CPU = cpu 117 } 118 119 if n.Spec.Resources.CPULimit == "" { 120 if privateNetwork { 121 cpuLimit = DefaultPrivateNetworkNodeCPULimit 122 } else { 123 cpuLimit = DefaultPublicNetworkNodeCPULimit 124 } 125 126 n.Spec.Resources.CPULimit = cpuLimit 127 } 128 129 if n.Spec.Resources.Memory == "" { 130 if privateNetwork { 131 memory = DefaultPrivateNetworkNodeMemoryRequest 132 } else { 133 memory = DefaultPublicNetworkNodeMemoryRequest 134 } 135 136 n.Spec.Resources.Memory = memory 137 } 138 139 if n.Spec.Resources.MemoryLimit == "" { 140 if privateNetwork { 141 memoryLimit = DefaultPrivateNetworkNodeMemoryLimit 142 } else { 143 memoryLimit = DefaultPublicNetworkNodeMemoryLimit 144 } 145 146 n.Spec.Resources.MemoryLimit = memoryLimit 147 } 148 149 if n.Spec.Resources.Storage == "" { 150 if privateNetwork { 151 storage = DefaultPrivateNetworkNodeStorageRequest 152 } else if network == MainNetwork && n.Spec.SyncMode == FastSynchronization { 153 storage = DefaultMainNetworkFastNodeStorageRequest 154 } else if network == MainNetwork && n.Spec.SyncMode == FullSynchronization { 155 storage = DefaultMainNetworkFullNodeStorageRequest 156 } else { 157 storage = DefaultTestNetworkStorageRequest 158 } 159 160 n.Spec.Resources.Storage = storage 161 } 162 163 }