Implement repo-resolver job

Change-Id: Ie5554edfa6bbc721a5ed0a76cb9f238782fa4f23
Related-Prod: PROD-26100 (PROD:26100)
diff --git a/generate-repo-snapshot-context.groovy b/generate-repo-snapshot-context.groovy
new file mode 100644
index 0000000..e51dbc4
--- /dev/null
+++ b/generate-repo-snapshot-context.groovy
@@ -0,0 +1,75 @@
+/**
+ Repo-resolver job which will generate current repo snapshots
+ in Reclass format for testing/nightly,proposed versions.
+
+ Output example:
+
+ parameters:
+   _param:
+      nightly:
+        linux_system_repo_mcp_salt_url: http://mirror.mirantis.com/.snapshots/nightly-salt-formulas-xenial-2018-12-21-181741
+      testing:
+        linux_system_repo_mcp_salt_url: http://mirror.mirantis.com/.snapshots/nightly-salt-formulas-xenial-2018-12-21-181741
+      proposed:
+        linux_system_repo_mcp_salt_url: http://mirror.mirantis.com/.snapshots/nightly-salt-formulas-xenial-2018-12-21-181741
+
+ * Expected parameters:
+   MIRROR_HOST - Mirror host to use to generate snapshots context
+*/
+common = new com.mirantis.mk.Common()
+mirror = new com.mirantis.mk.Mirror()
+
+mirrorHost = env.MIRROR_HOST ?: 'mirror.mirantis.com'
+slaveNode = env.SLAVE_NODE ?: 'virtual'
+
+node(slaveNode) {
+
+    def fileName = 'repo-context.yml'
+    // TODO: replace with dynamical subsetting from reclass
+    def ceph_codename = 'luminous'
+    def elasticsearch_version = '5'
+    def glusterfs_version_number = '3.8'
+    def saltstack_version_number = '2017.7'
+    def versions = ['testing', 'proposed', 'nightly']
+    def components = [
+        'repo_mcp_aptly':'aptly',
+        'repo_mcp_cassandra':'cassandra',
+        'repo_mcp_ceph': "ceph-${ceph_codename}",
+        'repo_mcp_docker_legacy': 'docker-1.x',
+        'repo_mcp_docker':'docker',
+        'repo_mcp_elasticsearch_curator': 'elasticsearch-curator-5',
+        'repo_mcp_elasticsearch': "elasticsearch-${elasticsearch_version}.x",
+        'repo_mcp_extra': 'extra',
+        'repo_mcp_glusterfs': "glusterfs-${glusterfs_version_number}",
+        'repo_mcp_influxdb': 'influxdb',
+        'repo_mcp_jenkins': 'jenkins',
+        'repo_mcp_maas': 'maas',
+        'repo_mcp_percona': 'percona',
+        'repo_mcp_saltstack': "saltstack-${saltstack_version_number}",
+        'repo_mcp_fluentd_url': 'td-agent',
+        'repo_mcp_salt_url': 'salt-formulas',
+    ]
+
+    stage('Generate context') {
+        def meta = ['_param': [:]]
+        versions.each {
+            // ubuntu has target.txt in version root
+            meta['_param'][it] = ['linux_system_repo_ubuntu_url': mirror.getLatestSnapshotMeta(mirrorHost, it, '', 'ubuntu')['repoUrl'] ]
+        }
+        components.each { componentKey, componentRepo ->
+            for(version in versions) {
+                def versionMeta = [:]
+                try {
+                    versionMeta["linux_system_repo_${componentKey}_url"] = mirror.getLatestSnapshotMeta(mirrorHost, version, componentRepo)['repoUrl']
+                } catch(Exception e) {
+                    common.errorMsg(e)
+                    continue
+                }
+                meta['_param'][version] << versionMeta
+            }
+        }
+
+        writeYaml file: fileName, data: ['parameters': meta ]
+        archiveArtifacts artifacts: fileName
+    }
+}
\ No newline at end of file