From ff19fb4478feb47fdda3ecf197611e718edff7e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20Ga=C3=9F?= <mxey@mxey.net>
Date: Mon, 27 Aug 2018 16:24:58 +0200
Subject: [PATCH] fix(kubernetes): Fix updating of image in YAML array (#2435)

Follow up to #2434, this lets Renovate actually update those image lines
---
 lib/manager/kubernetes/update.js              |  2 +-
 .../__snapshots__/update.spec.js.snap         | 21 +++++++++++++++++++
 test/manager/kubernetes/update.spec.js        | 16 ++++++++++++++
 3 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 test/manager/kubernetes/__snapshots__/update.spec.js.snap

diff --git a/lib/manager/kubernetes/update.js b/lib/manager/kubernetes/update.js
index e6ce219ab1..dc763631a7 100644
--- a/lib/manager/kubernetes/update.js
+++ b/lib/manager/kubernetes/update.js
@@ -10,7 +10,7 @@ function updateDependency(fileContent, upgrade) {
     logger.debug(`kubernetes.updateDependency(): ${newFrom}`);
     const lines = fileContent.split('\n');
     const lineToChange = lines[upgrade.lineNumber];
-    const imageLine = new RegExp(/^(\s*image:\s*'?"?)[^\s'"]+('?"?\s*)$/);
+    const imageLine = new RegExp(/^(\s*-?\s*image:\s*'?"?)[^\s'"]+('?"?\s*)$/);
     if (!lineToChange.match(imageLine)) {
       logger.debug('No image line found');
       return null;
diff --git a/test/manager/kubernetes/__snapshots__/update.spec.js.snap b/test/manager/kubernetes/__snapshots__/update.spec.js.snap
new file mode 100644
index 0000000000..47e76ca35e
--- /dev/null
+++ b/test/manager/kubernetes/__snapshots__/update.spec.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`manager/kubernetes/update updateDependency replaces image inside YAML array 1`] = `
+"apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  name: local-volume-provisioner
+  namespace: kube-system
+  labels:
+    app: local-volume-provisioner
+spec:
+  selector:
+    matchLabels:
+      app: local-volume-provisioner
+  template:
+    spec:
+      containers:
+      - image: \\"quay.io/external_storage/local-volume-provisioner:v2.2.0\\"
+        name: provisioner
+"
+`;
diff --git a/test/manager/kubernetes/update.spec.js b/test/manager/kubernetes/update.spec.js
index 36952a90be..2114d9095d 100644
--- a/test/manager/kubernetes/update.spec.js
+++ b/test/manager/kubernetes/update.spec.js
@@ -6,6 +6,11 @@ const yamlFile = fs.readFileSync(
   'utf8'
 );
 
+const arraySyntaxFile = fs.readFileSync(
+  'test/_fixtures/kubernetes/array-syntax.yaml',
+  'utf8'
+);
+
 describe('manager/kubernetes/update', () => {
   describe('updateDependency', () => {
     it('replaces existing value', () => {
@@ -41,5 +46,16 @@ describe('manager/kubernetes/update', () => {
       const res = dcUpdate.updateDependency(null, null);
       expect(res).toBe(null);
     });
+    it('replaces image inside YAML array', () => {
+      const upgrade = {
+        lineNumber: 14,
+        dockerRegistry: 'quay.io',
+        depName: 'external_storage/local-volume-provisioner',
+        newValue: 'v2.2.0',
+      };
+      const res = dcUpdate.updateDependency(arraySyntaxFile, upgrade);
+      expect(res).not.toEqual(arraySyntaxFile);
+      expect(res).toMatchSnapshot();
+    });
   });
 });
-- 
GitLab