From 639389cc0eedf48cafb74d1190a60ff7ae6a348c Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 22 Jul 2019 09:43:25 +0200
Subject: [PATCH] refactor: terraform managerData

---
 lib/manager/terraform/extract.js              |  7 +--
 lib/manager/terraform/update.js               |  4 +-
 .../__snapshots__/extract.spec.js.snap        | 50 ++++++++++++++-----
 test/manager/terraform/update.spec.js         | 12 ++---
 4 files changed, 50 insertions(+), 23 deletions(-)

diff --git a/lib/manager/terraform/extract.js b/lib/manager/terraform/extract.js
index b7969ed0a2..79c531664b 100644
--- a/lib/manager/terraform/extract.js
+++ b/lib/manager/terraform/extract.js
@@ -20,6 +20,7 @@ function extractPackageFile(content) {
         logger.trace(`Matched module on line ${lineNumber}`);
         const dep = {
           moduleName: module[1],
+          managerData: {},
         };
         do {
           lineNumber += 1;
@@ -54,7 +55,7 @@ function extractPackageFile(content) {
       dep.currentValue = githubRefMatch[3];
       dep.datasource = 'github';
       dep.lookupName = githubRefMatch[2];
-      dep.lineNumber = dep.sourceLine;
+      dep.managerData.lineNumber = dep.sourceLine;
       if (!isVersion(dep.currentValue)) {
         dep.skipReason = 'unsupported-version';
       }
@@ -66,10 +67,10 @@ function extractPackageFile(content) {
         dep.depType = 'terraform';
         dep.depName = moduleParts.join('/');
         dep.depNameShort = dep.depName;
-        dep.lineNumber = dep.versionLine;
+        dep.managerData.lineNumber = dep.versionLine;
         dep.datasource = 'terraform';
       }
-      if (dep.lineNumber) {
+      if (dep.managerData.lineNumber) {
         if (!isValid(dep.currentValue)) {
           dep.skipReason = 'unsupported-version';
         }
diff --git a/lib/manager/terraform/update.js b/lib/manager/terraform/update.js
index c96cd04c46..07f132aec6 100644
--- a/lib/manager/terraform/update.js
+++ b/lib/manager/terraform/update.js
@@ -8,7 +8,7 @@ function updateDependency(currentFileContent, upgrade) {
   try {
     logger.debug(`terraform.updateDependency: ${upgrade.newValue}`);
     const lines = currentFileContent.split('\n');
-    const lineToChange = lines[upgrade.lineNumber];
+    const lineToChange = lines[upgrade.managerData.lineNumber];
     let newLine = lineToChange;
     if (upgrade.depType === 'github') {
       if (!lineToChange.includes(upgrade.depNameShort)) {
@@ -28,7 +28,7 @@ function updateDependency(currentFileContent, upgrade) {
       logger.debug('No changes necessary');
       return currentFileContent;
     }
-    lines[upgrade.lineNumber] = newLine;
+    lines[upgrade.managerData.lineNumber] = newLine;
     return lines.join('\n');
   } catch (err) /* istanbul ignore next */ {
     logger.info({ err }, 'Error setting new terraform module version');
diff --git a/test/manager/terraform/__snapshots__/extract.spec.js.snap b/test/manager/terraform/__snapshots__/extract.spec.js.snap
index 70d701dd62..6da4a2bd89 100644
--- a/test/manager/terraform/__snapshots__/extract.spec.js.snap
+++ b/test/manager/terraform/__snapshots__/extract.spec.js.snap
@@ -9,8 +9,10 @@ Object {
       "depName": "github.com/hashicorp/example",
       "depNameShort": "hashicorp/example",
       "depType": "github",
-      "lineNumber": 1,
       "lookupName": "hashicorp/example",
+      "managerData": Object {
+        "lineNumber": 1,
+      },
       "moduleName": "foo",
       "source": "github.com/hashicorp/example?ref=v1.0.0",
     },
@@ -20,8 +22,10 @@ Object {
       "depName": "github.com/hashicorp/example",
       "depNameShort": "hashicorp/example",
       "depType": "github",
-      "lineNumber": 5,
       "lookupName": "hashicorp/example",
+      "managerData": Object {
+        "lineNumber": 5,
+      },
       "moduleName": "bar",
       "skipReason": "unsupported-version",
       "source": "github.com/hashicorp/example?ref=next",
@@ -32,7 +36,9 @@ Object {
       "depName": "hashicorp/consul/aws",
       "depNameShort": "hashicorp/consul/aws",
       "depType": "terraform",
-      "lineNumber": 10,
+      "managerData": Object {
+        "lineNumber": 10,
+      },
       "moduleName": "consul",
       "source": "hashicorp/consul/aws",
     },
@@ -42,8 +48,10 @@ Object {
       "depName": "github.com/tieto-cem/terraform-aws-ecs-task-definition",
       "depNameShort": "tieto-cem/terraform-aws-ecs-task-definition",
       "depType": "github",
-      "lineNumber": 14,
       "lookupName": "tieto-cem/terraform-aws-ecs-task-definition",
+      "managerData": Object {
+        "lineNumber": 14,
+      },
       "moduleName": "container_definition",
       "source": "github.com/tieto-cem/terraform-aws-ecs-task-definition//modules/container-definition?ref=v0.1.0",
     },
@@ -53,8 +61,10 @@ Object {
       "depName": "github.com/tieto-cem/terraform-aws-ecs-task-definition",
       "depNameShort": "tieto-cem/terraform-aws-ecs-task-definition",
       "depType": "github",
-      "lineNumber": 25,
       "lookupName": "tieto-cem/terraform-aws-ecs-task-definition",
+      "managerData": Object {
+        "lineNumber": 25,
+      },
       "moduleName": "task_definition",
       "source": "github.com/tieto-cem/terraform-aws-ecs-task-definition?ref=v0.1.0",
     },
@@ -64,8 +74,10 @@ Object {
       "depName": "github.com/hashicorp/example",
       "depNameShort": "hashicorp/example",
       "depType": "github",
-      "lineNumber": 31,
       "lookupName": "hashicorp/example",
+      "managerData": Object {
+        "lineNumber": 31,
+      },
       "moduleName": "consul",
       "source": "git@github.com:hashicorp/example.git?ref=v2.0.0",
     },
@@ -74,7 +86,9 @@ Object {
       "depName": "terraform-aws-modules/security-group/aws",
       "depNameShort": "terraform-aws-modules/security-group/aws",
       "depType": "terraform",
-      "lineNumber": undefined,
+      "managerData": Object {
+        "lineNumber": undefined,
+      },
       "moduleName": "web_server_sg",
       "skipReason": "no-version",
       "source": "terraform-aws-modules/security-group/aws//modules/http-80",
@@ -85,7 +99,9 @@ Object {
       "depName": "terraform-aws-modules/security-group/aws",
       "depNameShort": "terraform-aws-modules/security-group/aws",
       "depType": "terraform",
-      "lineNumber": 46,
+      "managerData": Object {
+        "lineNumber": 46,
+      },
       "moduleName": "vote_service_sg",
       "source": "terraform-aws-modules/security-group/aws",
     },
@@ -95,7 +111,9 @@ Object {
       "depName": "app.terraform.io/example-corp/k8s-cluster/azurerm",
       "depNameShort": "app.terraform.io/example-corp/k8s-cluster/azurerm",
       "depType": "terraform",
-      "lineNumber": 71,
+      "managerData": Object {
+        "lineNumber": 71,
+      },
       "moduleName": "consul",
       "source": "app.terraform.io/example-corp/k8s-cluster/azurerm",
     },
@@ -105,7 +123,9 @@ Object {
       "depName": "app.terraform.io/example-corp/k8s-cluster/azurerm",
       "depNameShort": "app.terraform.io/example-corp/k8s-cluster/azurerm",
       "depType": "terraform",
-      "lineNumber": 76,
+      "managerData": Object {
+        "lineNumber": 76,
+      },
       "moduleName": "consul2",
       "source": "app.terraform.io/example-corp/k8s-cluster/azurerm",
     },
@@ -115,7 +135,9 @@ Object {
       "depName": "app.terraform.io/example-corp/k8s-cluster/azurerm",
       "depNameShort": "app.terraform.io/example-corp/k8s-cluster/azurerm",
       "depType": "terraform",
-      "lineNumber": 81,
+      "managerData": Object {
+        "lineNumber": 81,
+      },
       "moduleName": "consul3",
       "skipReason": "unsupported-version",
       "source": "app.terraform.io/example-corp/k8s-cluster/azurerm",
@@ -126,16 +148,20 @@ Object {
       "depName": "hashicorp/consul/aws",
       "depNameShort": "hashicorp/consul/aws",
       "depType": "terraform",
-      "lineNumber": 86,
+      "managerData": Object {
+        "lineNumber": 86,
+      },
       "moduleName": "consul3",
       "source": "hashicorp/consul/aws",
     },
     Object {
+      "managerData": Object {},
       "moduleName": "relative",
       "skipReason": "local",
       "source": "../../modules/fe",
     },
     Object {
+      "managerData": Object {},
       "moduleName": "nosauce",
       "skipReason": "no-source",
     },
diff --git a/test/manager/terraform/update.spec.js b/test/manager/terraform/update.spec.js
index 5be5bfdc94..6fdab55761 100644
--- a/test/manager/terraform/update.spec.js
+++ b/test/manager/terraform/update.spec.js
@@ -9,7 +9,7 @@ describe('manager/terraform/update', () => {
       const upgrade = {
         depType: 'github',
         depName: 'foo',
-        lineNumber: 1,
+        managerData: { lineNumber: 1 },
         depNameShort: 'hashicorp/example',
         newValue: 'v1.0.1',
       };
@@ -21,7 +21,7 @@ describe('manager/terraform/update', () => {
       const upgrade = {
         depType: 'github',
         depName: 'foo',
-        lineNumber: 1,
+        managerData: { lineNumber: 1 },
         depNameShort: 'hashicorp/example',
         newValue: 'v1.0.0',
       };
@@ -32,7 +32,7 @@ describe('manager/terraform/update', () => {
       const upgrade = {
         depType: 'github',
         depName: 'foo',
-        lineNumber: 2,
+        managerData: { lineNumber: 2 },
         depNameShort: 'hashicorp/example',
         newValue: 'v1.0.0',
       };
@@ -46,7 +46,7 @@ describe('manager/terraform/update', () => {
         newValue: 'v0.1.3',
         depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition',
         depNameShort: 'tieto-cem/terraform-aws-ecs-task-definition',
-        lineNumber: 14,
+        managerData: { lineNumber: 14 },
         moduleName: 'container_definition',
         source:
           'github.com/tieto-cem/terraform-aws-ecs-task-definition//modules/container-definition?ref=v0.1.0',
@@ -61,7 +61,7 @@ describe('manager/terraform/update', () => {
         depName: 'hashicorp/consul/aws',
         depNameShort: 'hashicorp/consul/aws',
         depType: 'terraform',
-        lineNumber: 11,
+        managerData: { lineNumber: 11 },
         moduleName: 'consul',
         source: 'hashicorp/consul/aws',
         newValue: '0.4.0',
@@ -75,7 +75,7 @@ describe('manager/terraform/update', () => {
         depName: 'hashicorp/consul/aws',
         depNameShort: 'hashicorp/consul/aws',
         depType: 'terraform',
-        lineNumber: 10,
+        managerData: { lineNumber: 10 },
         moduleName: 'consul',
         source: 'hashicorp/consul/aws',
         newValue: '0.4.0',
-- 
GitLab