package operator
import (
gragent "github.com/grafana/agent/pkg/operator/apis/monitoring/v1alpha1"
apps_v1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1"
)
func generateLogsDaemonSet(
cfg *Config,
name string,
d gragent.Deployment,
) (*apps_v1.DaemonSet, error) {
d = *(&d).DeepCopy()
opts := logsPodTemplateOptions()
tmpl, selector, err := generatePodTemplate(cfg, name, d, opts)
if err != nil {
return nil, err
}
spec := apps_v1.DaemonSetSpec{
UpdateStrategy: apps_v1.DaemonSetUpdateStrategy{
Type: apps_v1.RollingUpdateDaemonSetStrategyType,
},
Selector: selector,
Template: tmpl,
}
return &apps_v1.DaemonSet{
ObjectMeta: metadataFromPodTemplate(name, d, tmpl),
Spec: spec,
}, nil
}
func logsPodTemplateOptions() podTemplateOptions {
return podTemplateOptions{
Privileged: true,
ExtraSelectorLabels: map[string]string{
agentTypeLabel: "logs",
},
ExtraVolumes: []v1.Volume{
{
Name: "varlog",
VolumeSource: v1.VolumeSource{
HostPath: &v1.HostPathVolumeSource{Path: "/var/log"},
},
},
{
Name: "dockerlogs",
VolumeSource: v1.VolumeSource{
HostPath: &v1.HostPathVolumeSource{Path: "/var/lib/docker/containers"},
},
},
{
Name: "data",
VolumeSource: v1.VolumeSource{
HostPath: &v1.HostPathVolumeSource{Path: "/var/lib/grafana-agent/data"},
},
},
},
ExtraVolumeMounts: []v1.VolumeMount{
{
Name: "varlog",
ReadOnly: true,
MountPath: "/var/log",
}, {
Name: "dockerlogs",
ReadOnly: true,
MountPath: "/var/lib/docker/containers",
}, {
Name: "data",
MountPath: "/var/lib/grafana-agent/data",
},
},
ExtraEnvVars: []v1.EnvVar{
{
Name: "HOSTNAME",
ValueFrom: &v1.EnvVarSource{
FieldRef: &v1.ObjectFieldSelector{FieldPath: "spec.nodeName"},
},
},
{
Name: "SHARD",
Value: "0",
},
},
}
}