Skip to content

Commit 3f6cd55

Browse files
authored
[Feature] Refactor Pod and containter creator part2 (#828)
1 parent cc57baf commit 3f6cd55

File tree

7 files changed

+305
-188
lines changed

7 files changed

+305
-188
lines changed

pkg/deployment/images.go

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ type ContainerIdentity struct {
6262
// ArangoDIdentity helps to resolve the ArangoD identity, e.g.: image ID, version of the entrypoint.
6363
type ArangoDIdentity struct {
6464
interfaces.ContainerCreator
65-
License api.LicenseSpec
65+
License api.LicenseSpec
66+
ipAddress string
6667
}
6768

6869
// ArangoSyncIdentity helps to resolve the ArangoSync identity, e.g.: image ID, version of the entrypoint.
@@ -209,13 +210,6 @@ func (ib *imagesBuilder) fetchArangoDBImageIDAndVersion(ctx context.Context, cac
209210
Msg("Found image ID and ArangoDB version")
210211
return false, nil
211212
}
212-
// Pod cannot be fetched, ensure it is created
213-
args := []string{
214-
"--server.authentication=false",
215-
fmt.Sprintf("--server.endpoint=tcp://%s:%d", ib.Spec.GetListenAddr(), k8sutil.ArangoPort),
216-
"--database.directory=" + k8sutil.ArangodVolumeMountDir,
217-
"--log.output=+",
218-
}
219213

220214
imagePod := ImageUpdatePod{
221215
spec: ib.Spec,
@@ -226,11 +220,12 @@ func (ib *imagesBuilder) fetchArangoDBImageIDAndVersion(ctx context.Context, cac
226220
image: image,
227221
imagePullPolicy: ib.Spec.GetImagePullPolicy(),
228222
},
229-
License: ib.Spec.License,
223+
License: ib.Spec.License,
224+
ipAddress: ib.Spec.GetListenAddr(),
230225
},
231226
}
232227

233-
pod, err = resources.RenderArangoPod(cachedStatus, ib.APIObject, role, id, podName, args, &imagePod)
228+
pod, err = resources.RenderArangoPod(cachedStatus, ib.APIObject, role, id, podName, &imagePod)
234229
if err != nil {
235230
log.Debug().Err(err).Msg("Failed to render image ID pod")
236231
return true, errors.WithStack(err)
@@ -282,14 +277,8 @@ func (i *ImageUpdatePod) GetAffinityRole() string {
282277
return ""
283278
}
284279

285-
func (i *ImageUpdatePod) GetVolumes() ([]core.Volume, []core.VolumeMount) {
286-
var volumes []core.Volume
287-
var volumeMounts []core.VolumeMount
288-
289-
volumes = append(volumes, k8sutil.CreateVolumeEmptyDir(k8sutil.ArangodVolumeName))
290-
volumeMounts = append(volumeMounts, k8sutil.ArangodVolumeMount())
291-
292-
return volumes, volumeMounts
280+
func (i *ImageUpdatePod) GetVolumes() []core.Volume {
281+
return getVolumes().Volumes()
293282
}
294283

295284
func (i *ImageUpdatePod) GetSidecars(*core.Pod) error {
@@ -376,6 +365,10 @@ func (i *ImageUpdatePod) ApplyPodSpec(_ *core.PodSpec) error {
376365
return nil
377366
}
378367

368+
func (a *ContainerIdentity) GetArgs() ([]string, error) {
369+
return nil, nil
370+
}
371+
379372
func (a *ContainerIdentity) GetEnvs() []core.EnvVar {
380373
return nil
381374
}
@@ -396,10 +389,14 @@ func (a *ContainerIdentity) GetLifecycle() (*core.Lifecycle, error) {
396389
return nil, nil
397390
}
398391

392+
func (a *ContainerIdentity) GetName() string {
393+
return k8sutil.ServerContainerName
394+
}
395+
399396
func (a *ContainerIdentity) GetPorts() []core.ContainerPort {
400397
return []core.ContainerPort{
401398
{
402-
Name: "server",
399+
Name: k8sutil.ServerContainerName,
403400
ContainerPort: int32(k8sutil.ArangoPort),
404401
Protocol: core.ProtocolTCP,
405402
},
@@ -418,6 +415,21 @@ func (a *ContainerIdentity) GetSecurityContext() *core.SecurityContext {
418415
return a.ID.Get().SecurityContext.NewSecurityContext()
419416
}
420417

418+
// GetVolumeMounts returns nil for the basic container identity.
419+
func (a *ContainerIdentity) GetVolumeMounts() []core.VolumeMount {
420+
return nil
421+
}
422+
423+
// GetArgs returns the list of arguments for the ArangoD container identification.
424+
func (a *ArangoDIdentity) GetArgs() ([]string, error) {
425+
return []string{
426+
"--server.authentication=false",
427+
fmt.Sprintf("--server.endpoint=tcp://%s:%d", a.ipAddress, k8sutil.ArangoPort),
428+
"--database.directory=" + k8sutil.ArangodVolumeMountDir,
429+
"--log.output=+",
430+
}, nil
431+
}
432+
421433
func (a *ArangoDIdentity) GetEnvs() []core.EnvVar {
422434
env := make([]core.EnvVar, 0)
423435

@@ -433,7 +445,20 @@ func (a *ArangoDIdentity) GetEnvs() []core.EnvVar {
433445
return nil
434446
}
435447

448+
// GetVolumeMounts returns volume mount for the ArangoD data.
449+
func (a *ArangoDIdentity) GetVolumeMounts() []core.VolumeMount {
450+
return getVolumes().VolumeMounts()
451+
}
452+
436453
// GetExecutor returns the fixed path to the ArangoSync binary in the container.
437454
func (a *ArangoSyncIdentity) GetExecutor() string {
438455
return resources.ArangoSyncExecutor
439456
}
457+
458+
func getVolumes() pod.Volumes {
459+
volumes := pod.NewVolumes()
460+
volumes.AddVolume(k8sutil.CreateVolumeEmptyDir(k8sutil.ArangodVolumeName))
461+
volumes.AddVolumeMount(k8sutil.ArangodVolumeMount())
462+
463+
return volumes
464+
}

pkg/deployment/pod/volumes.go

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,8 @@ func NewVolumes() Volumes {
3232

3333
type Volumes interface {
3434
Append(b Builder, i Input)
35-
3635
AddVolume(volumes ...core.Volume)
37-
AddVolumes(volumes []core.Volume)
38-
3936
AddVolumeMount(mounts ...core.VolumeMount)
40-
AddVolumeMounts(mounts []core.VolumeMount)
41-
4237
Volumes() []core.Volume
4338
VolumeMounts() []core.VolumeMount
4439
}
@@ -52,15 +47,11 @@ type volumes struct {
5247

5348
func (v *volumes) Append(b Builder, i Input) {
5449
vols, mounts := b.Volumes(i)
55-
v.AddVolumes(vols)
56-
v.AddVolumeMounts(mounts)
50+
v.AddVolume(vols...)
51+
v.AddVolumeMount(mounts...)
5752
}
5853

5954
func (v *volumes) AddVolume(volumes ...core.Volume) {
60-
v.AddVolumes(volumes)
61-
}
62-
63-
func (v *volumes) AddVolumes(volumes []core.Volume) {
6455
if len(volumes) == 0 {
6556
return
6657
}
@@ -69,10 +60,6 @@ func (v *volumes) AddVolumes(volumes []core.Volume) {
6960
}
7061

7162
func (v *volumes) AddVolumeMount(mounts ...core.VolumeMount) {
72-
v.AddVolumeMounts(mounts)
73-
}
74-
75-
func (v *volumes) AddVolumeMounts(mounts []core.VolumeMount) {
7663
if len(mounts) == 0 {
7764
return
7865
}

pkg/deployment/resources/pod_creator.go

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ func createArangodArgs(cachedStatus interfaces.Inspector, input pod.Input, addit
180180
}
181181

182182
// createArangoSyncArgs creates command line arguments for an arangosync server in the given group.
183-
func createArangoSyncArgs(apiObject meta.Object, spec api.DeploymentSpec, group api.ServerGroup, groupSpec api.ServerGroupSpec, member api.MemberStatus) []string {
183+
func createArangoSyncArgs(apiObject meta.Object, spec api.DeploymentSpec, group api.ServerGroup,
184+
groupSpec api.ServerGroupSpec, member api.MemberStatus) []string {
184185
options := k8sutil.CreateOptionPairs(64)
185186
var runCmd string
186187
var port int
@@ -343,7 +344,6 @@ func (r *Resources) RenderPodForMember(ctx context.Context, cachedStatus inspect
343344
newMember.PodName = k8sutil.CreatePodName(apiObject.GetName(), roleAbbr, newMember.ID, CreatePodSuffix(spec))
344345

345346
var podCreator interfaces.PodCreator
346-
var args []string
347347
if group.IsArangod() {
348348
// Prepare arguments
349349
autoUpgrade := newMember.Conditions.IsTrue(api.ConditionTypeAutoUpgrade) || spec.Upgrade.Get().AutoUpgrade
@@ -358,16 +358,8 @@ func (r *Resources) RenderPodForMember(ctx context.Context, cachedStatus inspect
358358
context: r.context,
359359
autoUpgrade: autoUpgrade,
360360
deploymentStatus: status,
361-
id: memberID,
362361
arangoMember: *member,
363-
}
364-
365-
input := memberPod.AsInput()
366-
367-
var err error
368-
args, err = createArangodArgs(cachedStatus, input)
369-
if err != nil {
370-
return nil, errors.WithStack(err)
362+
cachedStatus: cachedStatus,
371363
}
372364

373365
if err := memberPod.Validate(cachedStatus); err != nil {
@@ -428,10 +420,7 @@ func (r *Resources) RenderPodForMember(ctx context.Context, cachedStatus inspect
428420
}
429421
}
430422

431-
// Prepare arguments
432-
args = createArangoSyncArgs(apiObject, spec, group, groupSpec, *newMember)
433-
434-
memberSyncPod := MemberSyncPod{
423+
podCreator = &MemberSyncPod{
435424
tlsKeyfileSecretName: tlsKeyfileSecretName,
436425
clientAuthCASecretName: clientAuthCASecretName,
437426
masterJWTSecretName: masterJWTSecretName,
@@ -442,14 +431,14 @@ func (r *Resources) RenderPodForMember(ctx context.Context, cachedStatus inspect
442431
resources: r,
443432
imageInfo: imageInfo,
444433
arangoMember: *member,
434+
apiObject: apiObject,
435+
memberStatus: *newMember,
445436
}
446-
447-
podCreator = &memberSyncPod
448437
} else {
449438
return nil, errors.Newf("unable to render Pod")
450439
}
451440

452-
pod, err := RenderArangoPod(cachedStatus, apiObject, role, newMember.ID, newMember.PodName, args, podCreator)
441+
pod, err := RenderArangoPod(cachedStatus, apiObject, role, newMember.ID, newMember.PodName, podCreator)
453442
if err != nil {
454443
return nil, err
455444
}
@@ -637,7 +626,7 @@ func (r *Resources) createPodForMember(ctx context.Context, cachedStatus inspect
637626

638627
// RenderArangoPod renders new ArangoD Pod
639628
func RenderArangoPod(cachedStatus inspectorInterface.Inspector, deployment k8sutil.APIObject, role, id, podName string,
640-
args []string, podCreator interfaces.PodCreator) (*core.Pod, error) {
629+
podCreator interfaces.PodCreator) (*core.Pod, error) {
641630

642631
// Prepare basic pod
643632
p := k8sutil.NewPod(deployment.GetName(), role, id, podName, podCreator)
@@ -666,12 +655,12 @@ func RenderArangoPod(cachedStatus inspectorInterface.Inspector, deployment k8sut
666655
p.Spec.InitContainers = append(p.Spec.InitContainers, initContainers...)
667656
}
668657

669-
c, err := k8sutil.NewContainer(args, podCreator.GetContainerCreator())
658+
p.Spec.Volumes = podCreator.GetVolumes()
659+
c, err := k8sutil.NewContainer(podCreator.GetContainerCreator())
670660
if err != nil {
671661
return nil, errors.WithStack(err)
672662
}
673663

674-
p.Spec.Volumes, c.VolumeMounts = podCreator.GetVolumes()
675664
p.Spec.Containers = append(p.Spec.Containers, c)
676665
if err := podCreator.GetSidecars(&p); err != nil {
677666
return nil, err

0 commit comments

Comments
 (0)