pepr 0.29.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.js CHANGED
@@ -50,7 +50,7 @@ var import_kubernetes_fluent_client7 = require("kubernetes-fluent-client");
50
50
  var R = __toESM(require("ramda"));
51
51
 
52
52
  // src/lib/capability.ts
53
- var import_kubernetes_fluent_client5 = require("kubernetes-fluent-client");
53
+ var import_kubernetes_fluent_client6 = require("kubernetes-fluent-client");
54
54
  var import_ramda6 = require("ramda");
55
55
 
56
56
  // src/lib/logger.ts
@@ -981,11 +981,75 @@ var Controller = class _Controller {
981
981
  };
982
982
 
983
983
  // src/lib/watch-processor.ts
984
- var import_kubernetes_fluent_client4 = require("kubernetes-fluent-client");
984
+ var import_kubernetes_fluent_client5 = require("kubernetes-fluent-client");
985
985
  var import_types2 = require("kubernetes-fluent-client/dist/fluent/types");
986
986
 
987
987
  // src/lib/helpers.ts
988
+ var import_kubernetes_fluent_client4 = require("kubernetes-fluent-client");
989
+
990
+ // src/sdk/sdk.ts
991
+ var sdk_exports = {};
992
+ __export(sdk_exports, {
993
+ containers: () => containers,
994
+ getOwnerRefFrom: () => getOwnerRefFrom,
995
+ sanitizeResourceName: () => sanitizeResourceName,
996
+ writeEvent: () => writeEvent
997
+ });
988
998
  var import_kubernetes_fluent_client3 = require("kubernetes-fluent-client");
999
+ function containers(request, containerType) {
1000
+ const containers2 = request.Raw.spec?.containers || [];
1001
+ const initContainers = request.Raw.spec?.initContainers || [];
1002
+ const ephemeralContainers = request.Raw.spec?.ephemeralContainers || [];
1003
+ if (containerType === "containers") {
1004
+ return containers2;
1005
+ }
1006
+ if (containerType === "initContainers") {
1007
+ return initContainers;
1008
+ }
1009
+ if (containerType === "ephemeralContainers") {
1010
+ return ephemeralContainers;
1011
+ }
1012
+ return [...containers2, ...initContainers, ...ephemeralContainers];
1013
+ }
1014
+ async function writeEvent(cr, event, eventType, eventReason, reportingComponent, reportingInstance) {
1015
+ logger_default.debug(cr.metadata, `Writing event: ${event.message}`);
1016
+ await (0, import_kubernetes_fluent_client3.K8s)(import_kubernetes_fluent_client3.kind.CoreEvent).Create({
1017
+ type: eventType,
1018
+ reason: eventReason,
1019
+ ...event,
1020
+ // Fixed values
1021
+ metadata: {
1022
+ namespace: cr.metadata.namespace,
1023
+ generateName: cr.metadata.name
1024
+ },
1025
+ involvedObject: {
1026
+ apiVersion: cr.apiVersion,
1027
+ kind: cr.kind,
1028
+ name: cr.metadata.name,
1029
+ namespace: cr.metadata.namespace,
1030
+ uid: cr.metadata.uid
1031
+ },
1032
+ firstTimestamp: /* @__PURE__ */ new Date(),
1033
+ reportingComponent,
1034
+ reportingInstance
1035
+ });
1036
+ }
1037
+ function getOwnerRefFrom(cr) {
1038
+ const { name, uid } = cr.metadata;
1039
+ return [
1040
+ {
1041
+ apiVersion: cr.apiVersion,
1042
+ kind: cr.kind,
1043
+ uid,
1044
+ name
1045
+ }
1046
+ ];
1047
+ }
1048
+ function sanitizeResourceName(name) {
1049
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 250).replace(/^[^a-z]+|[^a-z]+$/g, "");
1050
+ }
1051
+
1052
+ // src/lib/helpers.ts
989
1053
  function checkOverlap(bindingFilters, objectFilters) {
990
1054
  if (Object.keys(bindingFilters).length === 0) {
991
1055
  return true;
@@ -1098,8 +1162,10 @@ var Queue = class {
1098
1162
 
1099
1163
  // src/lib/watch-processor.ts
1100
1164
  var watchCfg = {
1101
- retryMax: 5,
1102
- retryDelaySec: 5
1165
+ retryMax: process.env.PEPR_RETRYMAX ? parseInt(process.env.PEPR_RETRYMAX, 10) : 5,
1166
+ retryDelaySec: process.env.PEPR_RETRYDELAYSECONDS ? parseInt(process.env.PEPR_RETRYDELAYSECONDS, 10) : 5,
1167
+ resyncIntervalSec: process.env.PEPR_RESYNCINTERVALSECONDS ? parseInt(process.env.PEPR_RESYNCINTERVALSECONDS, 10) : 300,
1168
+ allowWatchBookmarks: process.env.PEPR_ALLOWWATCHBOOKMARKS ? process.env.PEPR_ALLOWWATCHBOOKMARKS === "true" : false
1103
1169
  };
1104
1170
  var eventToPhaseMap = {
1105
1171
  ["CREATE" /* Create */]: [import_types2.WatchPhase.Added],
@@ -1115,6 +1181,7 @@ function setupWatch(capabilities) {
1115
1181
  }
1116
1182
  async function runBinding(binding, capabilityNamespaces) {
1117
1183
  const phaseMatch = eventToPhaseMap[binding.event] || eventToPhaseMap["*" /* Any */];
1184
+ logger_default.debug({ watchCfg }, "Effective WatchConfig");
1118
1185
  const watchCallback = async (obj, type) => {
1119
1186
  if (phaseMatch.includes(type)) {
1120
1187
  try {
@@ -1131,7 +1198,7 @@ async function runBinding(binding, capabilityNamespaces) {
1131
1198
  };
1132
1199
  const queue = new Queue();
1133
1200
  queue.setReconcile(watchCallback);
1134
- const watcher = (0, import_kubernetes_fluent_client4.K8s)(binding.model, binding.filters).Watch(async (obj, type) => {
1201
+ const watcher = (0, import_kubernetes_fluent_client5.K8s)(binding.model, binding.filters).Watch(async (obj, type) => {
1135
1202
  logger_default.debug(obj, `Watch event ${type} received`);
1136
1203
  if (binding.isQueue) {
1137
1204
  await queue.enqueue(obj, type);
@@ -1139,10 +1206,30 @@ async function runBinding(binding, capabilityNamespaces) {
1139
1206
  await watchCallback(obj, type);
1140
1207
  }
1141
1208
  }, watchCfg);
1142
- watcher.events.on(import_kubernetes_fluent_client4.WatchEvent.GIVE_UP, (err) => {
1209
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.GIVE_UP, (err) => {
1143
1210
  logger_default.error(err, "Watch failed after 5 attempts, giving up");
1144
1211
  process.exit(1);
1145
1212
  });
1213
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.CONNECT, () => logEvent(import_kubernetes_fluent_client5.WatchEvent.CONNECT));
1214
+ watcher.events.on(
1215
+ import_kubernetes_fluent_client5.WatchEvent.BOOKMARK,
1216
+ (obj) => logEvent(import_kubernetes_fluent_client5.WatchEvent.BOOKMARK, "Changes up to the given resourceVersion have been sent.", obj)
1217
+ );
1218
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.DATA_ERROR, (err) => logEvent(import_kubernetes_fluent_client5.WatchEvent.DATA_ERROR, err.message));
1219
+ watcher.events.on(
1220
+ import_kubernetes_fluent_client5.WatchEvent.RESOURCE_VERSION,
1221
+ (resourceVersion) => logEvent(import_kubernetes_fluent_client5.WatchEvent.RESOURCE_VERSION, `Resource version: ${resourceVersion}`)
1222
+ );
1223
+ watcher.events.on(
1224
+ import_kubernetes_fluent_client5.WatchEvent.RECONNECT,
1225
+ (err, retryCount) => logEvent(import_kubernetes_fluent_client5.WatchEvent.RECONNECT, `Reconnecting after ${retryCount} attempts`, err)
1226
+ );
1227
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.RECONNECT_PENDING, () => logEvent(import_kubernetes_fluent_client5.WatchEvent.RECONNECT_PENDING));
1228
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.GIVE_UP, (err) => logEvent(import_kubernetes_fluent_client5.WatchEvent.GIVE_UP, err.message));
1229
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.ABORT, (err) => logEvent(import_kubernetes_fluent_client5.WatchEvent.ABORT, err.message));
1230
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.OLD_RESOURCE_VERSION, (err) => logEvent(import_kubernetes_fluent_client5.WatchEvent.OLD_RESOURCE_VERSION, err));
1231
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.RESYNC, (err) => logEvent(import_kubernetes_fluent_client5.WatchEvent.RESYNC, err.message));
1232
+ watcher.events.on(import_kubernetes_fluent_client5.WatchEvent.NETWORK_ERROR, (err) => logEvent(import_kubernetes_fluent_client5.WatchEvent.NETWORK_ERROR, err.message));
1146
1233
  try {
1147
1234
  await watcher.start();
1148
1235
  } catch (err) {
@@ -1150,6 +1237,13 @@ async function runBinding(binding, capabilityNamespaces) {
1150
1237
  process.exit(1);
1151
1238
  }
1152
1239
  }
1240
+ function logEvent(type, message = "", obj) {
1241
+ if (obj) {
1242
+ logger_default.debug(obj, `Watch event ${type} received`, message);
1243
+ } else {
1244
+ logger_default.debug(`Watch event ${type} received`, message);
1245
+ }
1246
+ }
1153
1247
 
1154
1248
  // src/lib/module.ts
1155
1249
  var isWatchMode = () => process.env.PEPR_WATCH_MODE === "true";
@@ -1580,7 +1674,7 @@ var Capability = class {
1580
1674
  * @returns
1581
1675
  */
1582
1676
  When = (model, kind4) => {
1583
- const matchedKind = (0, import_kubernetes_fluent_client5.modelToGroupVersionKind)(model.name);
1677
+ const matchedKind = (0, import_kubernetes_fluent_client6.modelToGroupVersionKind)(model.name);
1584
1678
  if (!matchedKind && !kind4) {
1585
1679
  throw new Error(`Kind not specified for ${model.name}`);
1586
1680
  }
@@ -1685,68 +1779,6 @@ var Capability = class {
1685
1779
  };
1686
1780
  };
1687
1781
  };
1688
-
1689
- // src/sdk/sdk.ts
1690
- var sdk_exports = {};
1691
- __export(sdk_exports, {
1692
- containers: () => containers,
1693
- getOwnerRefFrom: () => getOwnerRefFrom,
1694
- sanitizeResourceName: () => sanitizeResourceName,
1695
- writeEvent: () => writeEvent
1696
- });
1697
- var import_kubernetes_fluent_client6 = require("kubernetes-fluent-client");
1698
- function containers(request, containerType) {
1699
- const containers2 = request.Raw.spec?.containers || [];
1700
- const initContainers = request.Raw.spec?.initContainers || [];
1701
- const ephemeralContainers = request.Raw.spec?.ephemeralContainers || [];
1702
- if (containerType === "containers") {
1703
- return containers2;
1704
- }
1705
- if (containerType === "initContainers") {
1706
- return initContainers;
1707
- }
1708
- if (containerType === "ephemeralContainers") {
1709
- return ephemeralContainers;
1710
- }
1711
- return [...containers2, ...initContainers, ...ephemeralContainers];
1712
- }
1713
- async function writeEvent(cr, event, eventType, eventReason, reportingComponent, reportingInstance) {
1714
- logger_default.debug(cr.metadata, `Writing event: ${event.message}`);
1715
- await (0, import_kubernetes_fluent_client6.K8s)(import_kubernetes_fluent_client6.kind.CoreEvent).Create({
1716
- type: eventType,
1717
- reason: eventReason,
1718
- ...event,
1719
- // Fixed values
1720
- metadata: {
1721
- namespace: cr.metadata.namespace,
1722
- generateName: cr.metadata.name
1723
- },
1724
- involvedObject: {
1725
- apiVersion: cr.apiVersion,
1726
- kind: cr.kind,
1727
- name: cr.metadata.name,
1728
- namespace: cr.metadata.namespace,
1729
- uid: cr.metadata.uid
1730
- },
1731
- firstTimestamp: /* @__PURE__ */ new Date(),
1732
- reportingComponent,
1733
- reportingInstance
1734
- });
1735
- }
1736
- function getOwnerRefFrom(cr) {
1737
- const { name, uid } = cr.metadata;
1738
- return [
1739
- {
1740
- apiVersion: cr.apiVersion,
1741
- kind: cr.kind,
1742
- uid,
1743
- name
1744
- }
1745
- ];
1746
- }
1747
- function sanitizeResourceName(name) {
1748
- return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 250).replace(/^[^a-z]+|[^a-z]+$/g, "");
1749
- }
1750
1782
  // Annotate the CommonJS export names for ESM import in node:
1751
1783
  0 && (module.exports = {
1752
1784
  Capability,