Skip to content

Commit 21b63e2

Browse files
Merge pull request #5 from tegridy-io/feat/add-cockroach-lib
Add library to be used by other components
2 parents 69cd011 + 77462d2 commit 21b63e2

File tree

3 files changed

+133
-102
lines changed

3 files changed

+133
-102
lines changed

component/main.jsonnet

Lines changed: 3 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// main template for cockroach-operator
2+
local crdb = import 'lib/cockroach-operator.libsonnet';
23
local kap = import 'lib/kapitan.libjsonnet';
34
local kube = import 'lib/kube.libjsonnet';
45
local inv = kap.inventory();
@@ -9,106 +10,9 @@ local database(name) = [
910
// namespace
1011
kube.Namespace(params.databases[name].namespace),
1112
// database
12-
kube._Object('crdb.cockroachlabs.com/v1alpha1', 'CrdbCluster', name + '-database') {
13-
assert params.databases[name].nodes >= 3 : 'Parameter nodes should be >= 3.',
14-
metadata+: {
15-
labels+: {
16-
'app.kubernetes.io/component': 'database',
17-
'app.kubernetes.io/managed-by': 'commodore',
18-
'app.kubernetes.io/name': name + '-database',
19-
},
20-
namespace: params.databases[name].namespace,
21-
},
22-
spec+: {
23-
nodes: params.databases[name].nodes,
24-
image: {
25-
name: '%(registry)s/%(repository)s:%(tag)s' % params.images.cockroach,
26-
pullPolicy: 'IfNotPresent',
27-
},
28-
tlsEnabled: true,
29-
dataStore: {
30-
pvc: {
31-
spec: {
32-
accessModes: [ params.databases[name].storage.accessMode ],
33-
storageClassName: params.databases[name].storage.storageClass,
34-
resources: {
35-
requests: { storage: params.databases[name].storage.size },
36-
},
37-
volumeMode: 'Filesystem',
38-
},
39-
},
40-
},
41-
affinity: {
42-
podAntiAffinity: {
43-
requiredDuringSchedulingIgnoredDuringExecution: [
44-
{
45-
labelSelector: {
46-
matchExpressions: [
47-
{
48-
key: 'app.kubernetes.io/name',
49-
operator: 'In',
50-
values: [ name + '-database' ],
51-
},
52-
],
53-
},
54-
topologyKey: 'kubernetes.io/hostname',
55-
},
56-
],
57-
},
58-
},
59-
},
60-
},
13+
crdb.database(name + '-database', params.databases[name].namespace, params.databases[name]),
6114
// client
62-
kube.Deployment(name + '-database-client') {
63-
metadata+: {
64-
labels+: {
65-
'app.kubernetes.io/component': 'client',
66-
'app.kubernetes.io/managed-by': 'commodore',
67-
'app.kubernetes.io/name': name + '-database-client',
68-
},
69-
namespace: params.databases[name].namespace,
70-
},
71-
spec+: {
72-
replicas: 1,
73-
template+: {
74-
spec+: {
75-
serviceAccountName: 'default',
76-
securityContext: {
77-
seccompProfile: { type: 'RuntimeDefault' },
78-
},
79-
containers_:: {
80-
default: kube.Container('client') {
81-
image: '%(registry)s/%(repository)s:%(tag)s' % params.images.cockroach,
82-
env_:: {
83-
COCKROACH_CERTS_DIR: '/cockroach/certs-dir',
84-
COCKROACH_HOST: name + '-database-public',
85-
},
86-
command: [ 'sleep', 'infinity' ],
87-
securityContext: {
88-
allowPrivilegeEscalation: false,
89-
capabilities: { drop: [ 'ALL' ] },
90-
},
91-
volumeMounts_:: {
92-
certs: { mountPath: '/cockroach/certs-dir' },
93-
},
94-
},
95-
},
96-
volumes_:: {
97-
certs: {
98-
secret: {
99-
secretName: name + '-database-root',
100-
items: [
101-
{ key: 'ca.crt', path: 'ca.crt' },
102-
{ key: 'tls.crt', path: 'client.root.crt' },
103-
{ key: 'tls.key', path: 'client.root.key' },
104-
],
105-
},
106-
},
107-
},
108-
},
109-
},
110-
},
111-
},
15+
crdb.client(name + '-database', params.databases[name].namespace),
11216
];
11317

11418
// Define outputs below

lib/cockroach-operator.libsonnet

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
local kap = import 'lib/kapitan.libjsonnet';
2+
local kube = import 'lib/kube.libjsonnet';
3+
local inv = kap.inventory();
4+
// The hiera parameters for the component
5+
local params = inv.parameters.cockroach_operator;
6+
7+
8+
/**
9+
* \brief Helper to create CockroachDB objects.
10+
*
11+
* \arg The name of the database.
12+
* \return A CockroachDB object.
13+
*/
14+
local database(name, namespace, spec) = kube._Object('crdb.cockroachlabs.com/v1alpha1', 'CrdbCluster', name) {
15+
assert spec.nodes >= 3 : 'Parameter nodes should be >= 3.',
16+
assert spec.nodes % 2 != 0 : 'Parameter nodes should be a odd number.',
17+
metadata+: {
18+
labels+: {
19+
'app.kubernetes.io/component': 'database',
20+
'app.kubernetes.io/managed-by': 'commodore',
21+
'app.kubernetes.io/name': name,
22+
},
23+
namespace: namespace,
24+
},
25+
spec+: {
26+
nodes: spec.nodes,
27+
image: {
28+
name: '%(registry)s/%(repository)s:%(tag)s' % params.images.cockroach,
29+
pullPolicy: 'IfNotPresent',
30+
},
31+
tlsEnabled: std.get(spec, 'tlsEnabled', true),
32+
dataStore: {
33+
pvc: {
34+
spec: {
35+
accessModes: [ spec.storage.accessMode ],
36+
storageClassName: spec.storage.storageClass,
37+
resources: {
38+
requests: { storage: spec.storage.size },
39+
},
40+
volumeMode: 'Filesystem',
41+
},
42+
},
43+
},
44+
affinity: {
45+
podAntiAffinity: {
46+
requiredDuringSchedulingIgnoredDuringExecution: [
47+
{
48+
labelSelector: {
49+
matchExpressions: [
50+
{
51+
key: 'app.kubernetes.io/name',
52+
operator: 'In',
53+
values: [ name ],
54+
},
55+
],
56+
},
57+
topologyKey: 'kubernetes.io/hostname',
58+
},
59+
],
60+
},
61+
},
62+
},
63+
};
64+
65+
66+
/**
67+
* \brief Helper to create CockroachDB client.
68+
*
69+
* \arg The name of the database client.
70+
* \return A Deployment object.
71+
*/
72+
local client(name, namespace) = kube.Deployment(name + '-client') {
73+
metadata+: {
74+
labels+: {
75+
'app.kubernetes.io/component': 'database-client',
76+
'app.kubernetes.io/managed-by': 'commodore',
77+
'app.kubernetes.io/name': name + '-client',
78+
},
79+
namespace: namespace,
80+
},
81+
spec+: {
82+
replicas: 1,
83+
template+: {
84+
spec+: {
85+
serviceAccountName: 'default',
86+
securityContext: {
87+
seccompProfile: { type: 'RuntimeDefault' },
88+
},
89+
containers_:: {
90+
default: kube.Container('client') {
91+
image: '%(registry)s/%(repository)s:%(tag)s' % params.images.cockroach,
92+
env_:: {
93+
COCKROACH_CERTS_DIR: '/cockroach/certs-dir',
94+
COCKROACH_HOST: name + '-public',
95+
},
96+
command: [ 'sleep', 'infinity' ],
97+
securityContext: {
98+
allowPrivilegeEscalation: false,
99+
capabilities: { drop: [ 'ALL' ] },
100+
},
101+
volumeMounts_:: {
102+
certs: { mountPath: '/cockroach/certs-dir' },
103+
},
104+
},
105+
},
106+
volumes_:: {
107+
certs: {
108+
secret: {
109+
secretName: name + '-root',
110+
items: [
111+
{ key: 'ca.crt', path: 'ca.crt' },
112+
{ key: 'tls.crt', path: 'client.root.crt' },
113+
{ key: 'tls.key', path: 'client.root.key' },
114+
],
115+
},
116+
},
117+
},
118+
},
119+
},
120+
},
121+
};
122+
123+
124+
{
125+
database: database,
126+
client: client,
127+
}

tests/golden/create-db/cockroach-operator/cockroach-operator/20_db_apps.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ kind: Deployment
4949
metadata:
5050
annotations: {}
5151
labels:
52-
app.kubernetes.io/component: client
52+
app.kubernetes.io/component: database-client
5353
app.kubernetes.io/managed-by: commodore
5454
app.kubernetes.io/name: apps-database-client
5555
name: apps-database-client
@@ -61,7 +61,7 @@ spec:
6161
revisionHistoryLimit: 10
6262
selector:
6363
matchLabels:
64-
app.kubernetes.io/component: client
64+
app.kubernetes.io/component: database-client
6565
app.kubernetes.io/managed-by: commodore
6666
app.kubernetes.io/name: apps-database-client
6767
name: apps-database-client
@@ -74,7 +74,7 @@ spec:
7474
metadata:
7575
annotations: {}
7676
labels:
77-
app.kubernetes.io/component: client
77+
app.kubernetes.io/component: database-client
7878
app.kubernetes.io/managed-by: commodore
7979
app.kubernetes.io/name: apps-database-client
8080
name: apps-database-client

0 commit comments

Comments
 (0)