Add functionaly for configuring and deploying nginx proxy

Change-Id: I107e33c8fa5f4d51abb28931db1cf927cb8fe4da
diff --git a/src/com/mirantis/mcp/CCP.groovy b/src/com/mirantis/mcp/CCP.groovy
new file mode 100644
index 0000000..4f59edc
--- /dev/null
+++ b/src/com/mirantis/mcp/CCP.groovy
@@ -0,0 +1,71 @@
+package com.mirantis.mcp
+
+def checkPortIsFree(String localPort) {
+    withEnv(["port=${localPort}"]) {
+        sh '''
+            if netstat -pnat | grep -qw "${port}"; then
+                echo "Port ${port} is already opened."
+                exit 1
+            fi
+        '''
+    }
+}
+
+def deployProxy(String confDir, String proxyPassURL, String localPort) {
+    withEnv(["localPort=${localPort}",
+             "proxyPassURL=${proxyPassURL}",
+             "confDir=${confDir}"]) {
+        sh '''\
+            cat <<EOF > "${confDir}/nginx-${localPort}"
+            worker_processes auto;
+            user jenkins;
+            pid ${confDir}/nginx-${localPort}.pid;
+            error_log /dev/null;
+            #
+            events {
+               worker_connections 768;
+            }
+            #
+            http {
+                sendfile on;
+                tcp_nopush on;
+                tcp_nodelay on;
+                keepalive_timeout 65;
+                types_hash_max_size 2048;
+                #
+                include /etc/nginx/mime.types;
+                default_type application/octet-stream;
+                #
+                access_log off;
+                #
+                server {
+                    listen ${localPort} default_server;
+                    #
+                    server_name _;
+                    client_max_body_size 0;
+                    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
+                    chunked_transfer_encoding on;
+                    #
+                    location / {
+                        proxy_set_header  Host              \\$http_host;   # required for docker client's sake
+                        proxy_set_header  X-Real-IP         \\$remote_addr; # pass on real client's IP
+                        proxy_set_header  X-Forwarded-For   \\$proxy_add_x_forwarded_for;
+                        proxy_set_header  X-Forwarded-Proto \\$scheme;
+                        proxy_read_timeout                  900;
+                        proxy_pass                          ${proxyPassURL} ;
+                    }
+                }
+            }'''.stripIndent()
+        }
+    sh "nginx -t -c ${confDir}/nginx-${localPort}"
+    sh "nginx -c ${confDir}/nginx-${localPort}"
+    return "127.0.0.1:${localPort}"
+}
+
+def destroyProxy(String confDir, String localPort) {
+    def proxyPid = sh(script: "cat ${confDir}/nginx-${localPort}.pid",
+                      returnStdout: true).trim()
+    if ( proxyPid ) {
+        sh "kill ${proxyPid}"
+    }
+}