Skip to content

Commit 3ed763b

Browse files
jvc5546rberrellezaoktetobot
authored
Rb/bye bitnami (#141)
* use self defined charts instead of bitnami's since they are going away * Fixing yarn errors * Added infrastructure chart as excetion to .oktetoignore * Fix deployment issues on rb/bye-bitnami branch - Fix catalog Dockerfile: Disable Yarn 4 PnP and use node_modules to resolve MongoDB package issues - Fix MongoDB deployment: Increase readiness probe timeout from 1s to 5s to prevent timeout failures - Fix catalog load.js: Convert from deprecated callback-style to modern async/await MongoDB driver syntax - Fix catalog server.js: Convert from deprecated callback-style to modern async/await MongoDB driver syntax - Increase MongoDB connection timeouts from 300ms to 30s for better reliability - All services now deploy successfully and are running properly * Fix e2e tests: Update Playwright Docker image from v1.52.0 to v1.55.0 - Resolves Playwright executable compatibility issue - All e2e tests now pass successfully * Add mongodb auth * Update .oktetoignore * Remove unnecessary line from .oktetoignore * Remove unnecessary file --------- Co-authored-by: rberrelleza <ramiro@okteto.com> Co-authored-by: oktetobot <oktetobot@users.noreply.github.com>
1 parent feca0da commit 3ed763b

28 files changed

+2615
-1397
lines changed

.oktetoignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
!api/chart
66
!catalog/chart
77
!frontend/chart
8-
!kafka
9-
!mongodb
10-
!postgresql
118
!rent/chart
129
!worker/chart
10+
!infrastructure/chart
1311

1412

1513
[test]

catalog/Dockerfile

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
FROM node:20
22

3-
WORKDIR /src
3+
# Enable Corepack and prepare Yarn 4.9.4
4+
RUN corepack enable && corepack prepare yarn@4.9.4 --activate
45

6+
# Copy dependencies
7+
WORKDIR /src
58
COPY package.json yarn.lock ./
6-
RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn install
9+
10+
# Install using Yarn 4 with node_modules (disable PnP)
11+
RUN --mount=type=cache,target=/root/.yarn \
12+
YARN_CACHE_FOLDER=/root/.yarn \
13+
yarn config set nodeLinker node-modules && \
14+
yarn install --immutable
715

816
COPY . .
917
CMD ["yarn", "start"]

catalog/chart/templates/deployment.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ spec:
2626
- load
2727
env:
2828
- name: MONGODB_USERNAME
29-
value: okteto
29+
value: "okteto"
3030
- name: MONGODB_PASSWORD
31-
value: okteto
31+
value: "okteto"
3232
- name: MONGODB_DATABASE
3333
value: okteto
3434
- name: MONGODB_HOST
@@ -38,9 +38,9 @@ spec:
3838
image: {{ .Values.image }}
3939
env:
4040
- name: MONGODB_USERNAME
41-
value: okteto
41+
value: "okteto"
4242
- name: MONGODB_PASSWORD
43-
value: okteto
43+
value: "okteto"
4444
- name: MONGODB_DATABASE
4545
value: okteto
4646
- name: MONGODB_HOST

catalog/load.js

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,51 @@
1-
const mongo = require("mongodb").MongoClient;
1+
const { MongoClient } = require("mongodb");
22

3-
const url = `mongodb://${process.env.MONGODB_USERNAME}:${encodeURIComponent(process.env.MONGODB_PASSWORD)}@${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}`;
3+
const url = process.env.MONGODB_USERNAME && process.env.MONGODB_PASSWORD
4+
? `mongodb://${process.env.MONGODB_USERNAME}:${encodeURIComponent(process.env.MONGODB_PASSWORD)}@${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}?authSource=admin`
5+
: `mongodb://${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}`;
46

5-
var insert = function(collection, data, resolve, reject) {
6-
const d = require(data);
7-
d.results.forEach((doc) => {
7+
async function insertData(collection, dataPath) {
8+
const data = require(dataPath);
9+
data.results.forEach((doc) => {
810
doc._id = doc.id;
911
});
10-
collection.insertMany(d.results, (err, r) => {
11-
if (err) {
12-
if (err.code != 11000) {
13-
return reject(err);
14-
}
12+
13+
try {
14+
await collection.insertMany(data.results);
15+
console.log(`Inserted ${data.results.length} documents`);
16+
} catch (err) {
17+
if (err.code !== 11000) {
18+
throw err;
1519
}
16-
17-
resolve();
18-
});
20+
console.log('Documents already exist, skipping insertion');
21+
}
1922
}
2023

21-
function loadWithRetry() {
22-
mongo.connect(url, {
23-
useUnifiedTopology: true,
24-
useNewUrlParser: true,
25-
connectTimeoutMS: 300,
26-
socketTimeoutMS: 300,
27-
}, (err, client) => {
28-
if (err) {
29-
console.error(`Error connecting, retrying in 300 msec: ${err}`);
30-
setTimeout(loadWithRetry, 300);
31-
return;
32-
}
24+
async function loadWithRetry() {
25+
const client = new MongoClient(url, {
26+
connectTimeoutMS: 30000,
27+
socketTimeoutMS: 30000,
28+
serverSelectionTimeoutMS: 30000,
29+
});
3330

34-
var promises = [];
35-
db = client.db(process.env.MONGODB_DATABASE);
36-
promises.push(new Promise((resolve, reject)=>{
37-
insert(db.collection('catalog'), "./data/catalog.json", resolve, reject);
38-
}));
31+
try {
32+
console.log('Connecting to MongoDB...');
33+
await client.connect();
34+
console.log('Connected successfully');
3935

40-
Promise.all(promises)
41-
.then(function() {
42-
console.log('all loaded');
43-
process.exit(0);
44-
})
45-
.catch((err) => {
46-
console.error(`fail to load: ${err}`);
47-
process.exit(1);
48-
});
49-
});
50-
};
36+
const db = client.db(process.env.MONGODB_DATABASE);
37+
await insertData(db.collection('catalog'), "./data/catalog.json");
38+
39+
console.log('All data loaded successfully');
40+
await client.close();
41+
process.exit(0);
42+
} catch (err) {
43+
console.error(`Error: ${err}`);
44+
await client.close();
45+
46+
console.log('Retrying in 3 seconds...');
47+
setTimeout(loadWithRetry, 3000);
48+
}
49+
}
5150

5251
loadWithRetry();

catalog/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
"dependencies": {
66
"async": "^3.1.0",
77
"express": "^4.16.4",
8-
"mongodb": "^3.2.3",
8+
"mongodb": "^6.18.0",
99
"nodemon": "^2.0.2",
1010
"saslprep": "^1.0.3"
1111
},
1212
"scripts": {
1313
"debug": "node --inspect-brk=0.0.0.0:9229 server.js",
1414
"start": "nodemon server.js",
1515
"load": "node load.js"
16-
}
16+
},
17+
"packageManager": "yarn@4.9.4"
1718
}

catalog/server.js

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,40 @@ const mongo = require("mongodb").MongoClient;
33

44
const app = express();
55

6-
const url = `mongodb://${process.env.MONGODB_USERNAME}:${encodeURIComponent(process.env.MONGODB_PASSWORD)}@${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}`;
7-
8-
function startWithRetry() {
9-
mongo.connect(url, {
10-
useUnifiedTopology: true,
11-
useNewUrlParser: true,
12-
connectTimeoutMS: 1000,
13-
socketTimeoutMS: 1000,
14-
}, (err, client) => {
15-
if (err) {
16-
console.error(`Error connecting, retrying in 1 sec: ${err}`);
17-
setTimeout(startWithRetry, 1000);
18-
return;
19-
}
6+
const url = `mongodb://${process.env.MONGODB_USERNAME}:${encodeURIComponent(process.env.MONGODB_PASSWORD)}@${process.env.MONGODB_HOST}:27017/${process.env.MONGODB_DATABASE}?authSource=admin`;
7+
8+
async function startWithRetry() {
9+
try {
10+
const client = await mongo.connect(url, {
11+
connectTimeoutMS: 30000,
12+
socketTimeoutMS: 30000,
13+
});
2014

2115
const db = client.db(process.env.MONGODB_DATABASE);
2216

23-
app.listen(8080, () => {
24-
app.get("/catalog/healthz", (req, res, next) => {
25-
res.sendStatus(200)
26-
return;
27-
});
28-
29-
app.get("/catalog", (req, res, next) => {
30-
console.log(`GET /catalog`)
31-
db.collection('catalog').find().toArray( (err, results) =>{
32-
if (err){
33-
console.log(`failed to query movies: ${err}`)
34-
res.json([]);
35-
return;
36-
}
37-
res.json(results);
38-
});
39-
});
17+
app.get("/catalog/healthz", (req, res, next) => {
18+
res.sendStatus(200)
19+
return;
20+
});
21+
22+
app.get("/catalog", async (req, res, next) => {
23+
console.log(`GET /catalog`)
24+
try {
25+
const results = await db.collection('catalog').find().toArray();
26+
res.json(results);
27+
} catch (err) {
28+
console.log(`failed to query movies: ${err}`)
29+
res.json([]);
30+
}
31+
});
4032

33+
app.listen(8080, () => {
4134
console.log("Server running on port 8080.");
4235
});
43-
});
36+
} catch (err) {
37+
console.error(`Error connecting, retrying in 1 sec: ${err}`);
38+
setTimeout(startWithRetry, 1000);
39+
}
4440
};
4541

4642
startWithRetry();

0 commit comments

Comments
 (0)