Merge "OC Upgrade pipeline: support upgrade OC up to 4.1 version"
diff --git a/docker-mirror-images.groovy b/docker-mirror-images.groovy
index a0866ee..163ec5a 100644
--- a/docker-mirror-images.groovy
+++ b/docker-mirror-images.groovy
@@ -66,10 +66,7 @@
 
 timeout(time: 4, unit: 'HOURS') {
     node(slaveNode) {
-        def user = ''
-        wrap([$class: 'BuildUser']) {
-            user = env.BUILD_USER_ID
-        }
+        def user = jenkinsUtils.currentUsername()
         currentBuild.description = "${user}: [${env.SOURCE_IMAGE_TAG} => ${env.IMAGE_TAG}]\n${env.IMAGE_LIST}"
         try {
             allowedGroups = ['release-engineering']
@@ -78,9 +75,9 @@
             tagInRelease = tags.any { tag -> releaseTags.any { tag.contains(it) } }
             if (tagInRelease) {
                 if (!jenkinsUtils.currentUserInGroups(allowedGroups)) {
-                    error: "You - ${currentUserName} - don't have permissions to run this job with tags ${tags}!"
+                    error: "You - ${user} - don't have permissions to run this job with tags ${tags}!"
                 } else {
-                    echo "User `${currentUserName}` belongs to group `${env.JENKINS_ADMIN_GROUP}`. Proceeding..."
+                    echo "User `${user}` belongs to one of groups `${allowedGroups}`. Proceeding..."
                 }
             }
             stage("Mirror Docker Images") {
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