github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/static/app/containers/deploy.controller.js (about) 1 (function(){ 2 'use strict'; 3 4 angular 5 .module('shipyard.containers') 6 .controller('ContainerDeployController', ContainerDeployController); 7 8 ContainerDeployController.$inject = ['containers', '$http', '$state']; 9 function ContainerDeployController(containers, $http, $state) { 10 var vm = this; 11 vm.containers = containers; 12 vm.deployImages = []; 13 vm.containerLinkNames = []; 14 15 if (vm.containers != null) { 16 for (var i=0; i<vm.containers.length; i++) { 17 var c = vm.containers[i]; 18 var name = c.Names[0].split('/')[2]; 19 20 if (vm.containerLinkNames.indexOf(name) == -1) { 21 vm.containerLinkNames.push(name); 22 } 23 24 } 25 26 vm.containerLinkNames.sort(); 27 } 28 29 vm.cmd = ""; 30 vm.cpuShares = ""; 31 vm.memory = ""; 32 33 vm.volumes = []; 34 vm.hostPath = ""; 35 vm.containerPath = ""; 36 37 vm.links = []; 38 vm.containerToLink = ""; 39 vm.containerToLinkAlias = ""; 40 41 vm.ports = []; 42 vm.hostPort = ""; 43 vm.containerPort = ""; 44 vm.protocol = "TCP"; 45 46 vm.constraints =[] 47 vm.constraintName = ""; 48 vm.constraintRule = "=="; 49 vm.constraintValue = ""; 50 51 vm.envVars = []; 52 vm.variableName = ""; 53 vm.variableValue = ""; 54 55 vm.Dns = [];//for dns array 56 vm.containerDns = "";//for first input 57 58 vm.images = []; 59 60 vm.deploying = false; 61 vm.containerName = ""; 62 vm.error = ""; 63 vm.request = { 64 HostConfig: { 65 RestartPolicy: { Name: 'no' }, 66 NetworkMode: 'bridge', 67 Links: [], 68 Binds: [], 69 Privileged: false, 70 PublishAllPorts: false, 71 PortBindings: {}, 72 Dns:[], 73 }, 74 Links: [], 75 ExposedPorts: {}, 76 Volumes: {}, 77 Env: [], 78 AttachStdin: false, 79 Tty: true, 80 }; 81 82 vm.deploy = deploy; 83 vm.pushConstraint = pushConstraint; 84 vm.removeConstraint = removeConstraint; 85 vm.pushVolume = pushVolume; 86 vm.deleteVolume = deleteVolume; 87 vm.pushLink = pushLink; 88 vm.removeLink = removeLink; 89 vm.pushEnvVar = pushEnvVar; 90 vm.removeEnvVar = removeEnvVar; 91 vm.pushPort = pushPort; 92 vm.removePort = removePort; 93 vm.pushDns = pushDns; 94 vm.removeDns = removeDns; 95 vm.getImages = getImages; 96 vm.selectImage = selectImage; 97 98 99 function selectImage(i) { 100 console.log("select image" + i); 101 vm.request.Image = i; 102 vm.imagesShow = 0; 103 } 104 105 function getImages() { 106 console.log("get images"); 107 $http 108 .get('/images/json') 109 .success(function(data, status, headers, config) { 110 console.log(data[0].RepoTags[0]); 111 vm.images = data; 112 vm.imagesShow = 1; 113 }) 114 .error(function(data, status, headers, config) { 115 }); 116 } 117 118 function pushConstraint() { 119 var constraint = {'ConstraintName': vm.constraintName, 'ConstraintValue': vm.constraintValue, 'ConstraintRule': vm.constraintRule}; 120 vm.constraints.push(constraint); 121 vm.constraintName = ""; 122 vm.constraintValue = ""; 123 vm.constraintRule = "=="; 124 } 125 126 function removeConstraint(constraint) { 127 var index = vm.constraints.indexOf(removeConstraint); 128 vm.constraints.splice(index, 1); 129 } 130 131 function pushVolume() { 132 var volume = {'HostPath': vm.hostPath, 'ContainerPath': vm.containerPath}; 133 vm.volumes.push(volume); 134 vm.hostPath = ""; 135 vm.containerPath = ""; 136 } 137 138 function deleteVolume(volume) { 139 var index = vm.volumes.indexOf(volume); 140 vm.volumes.splice(index, 1); 141 } 142 143 function pushLink() { 144 var link = {'ContainerToLink': vm.containerToLink, 'ContainerToLinkAlias': vm.containerToLinkAlias}; 145 vm.links.push(link); 146 vm.containerToLink = ""; 147 vm.containerToLinkAlias = ""; 148 } 149 150 function removeLink(link) { 151 var index = vm.links.indexOf(link); 152 vm.links.splice(index, 1); 153 } 154 155 function pushPort() { 156 var port = {'Protocol': vm.protocol, 'ContainerPort': vm.containerPort, 'HostIp': vm.hostIp, 'HostPort': vm.hostPort}; 157 vm.ports.push(port); 158 vm.hostPort = ""; 159 vm.hostIp = ""; 160 vm.protocol = "TCP"; 161 vm.containerPort = ""; 162 } 163 164 function removePort(port) { 165 var index = vm.ports.indexOf(port); 166 vm.ports.splice(index, 1); 167 } 168 169 function pushEnvVar() { 170 var envVar = { name: vm.variableName, value: vm.variableValue }; 171 vm.envVars.push(envVar); 172 vm.variableName = ""; 173 vm.variableValue = ""; 174 } 175 176 function removeEnvVar(envVar) { 177 var index = vm.envVars.indexOf(envVar); 178 vm.envVars.splice(index, 1); 179 } 180 181 function pushDns() { 182 vm.Dns.push(vm.containerDns); 183 vm.containerDns = ""; 184 } 185 186 function removeDns(dns) { 187 var index = vm.Dns.indexOf(dns); 188 vm.Dns.splice(index, 1); 189 } 190 191 function transformLinks() { 192 var i; 193 if(vm.containerToLink.length > 0) { 194 vm.request.HostConfig.Links.push(vm.containerToLink + ":" + vm.containerToLinkAlias); 195 } 196 for(i = 0; i < vm.links.length; i++) { 197 vm.request.HostConfig.Links.push(vm.links[i].ContainerToLink + ":" + vm.links[i].ContainerToLinkAlias); 198 } 199 } 200 201 function transformEnvVars() { 202 var i; 203 if(vm.variableName.length > 0) { 204 vm.request.Env.push(vm.variableName + "=" + vm.variableValue); 205 } 206 for(i = 0; i < vm.envVars.length; i++) { 207 vm.request.Env.push(vm.envVars[i].name + "=" + vm.envVars[i].value); 208 } 209 } 210 211 function transformConstraints() { 212 var i; 213 if(vm.constraintName.length > 0) { 214 vm.request.Env.push("constraint:" + vm.constraintName + vm.constraintRule + vm.constraintValue); 215 } 216 217 for(i = 0; i < vm.constraints.length; i++) { 218 vm.request.Env.push("constraint:" + vm.constraints[i].ConstraintName + vm.constraints[i].ConstraintRule + vm.constraints[i].ConstraintValue); 219 } 220 } 221 222 function transformCommand() { 223 if(vm.cmd.length > 0) { 224 vm.request.Cmd = vm.cmd.split(" "); 225 } 226 } 227 228 function transformVolumes() { 229 var i; 230 if(vm.hostPath.length > 0) { 231 vm.request.HostConfig.Binds.push(vm.hostPath + ":" + vm.containerPath); 232 } 233 for(i = 0; i < vm.volumes.length; i++) { 234 vm.request.HostConfig.Binds.push(vm.volumes[i].HostPath + ":" + vm.volumes[i].ContainerPath); 235 } 236 } 237 238 function transformRestartPolicy() { 239 vm.request.HostConfig.RestartPolicy.Name = translateRestartPolicy(vm.restartPolicy); 240 } 241 242 function transformPorts() { 243 var i; 244 if(vm.containerPort.length > 0) { 245 // this is used in case there is just a single port and the 246 // "+" has not been clicked to push the port onto the array 247 pushPort(); 248 } 249 for(i = 0; i < vm.ports.length; i++) { 250 var port = vm.ports[i]; 251 var key = port.ContainerPort + '/' + port.Protocol.toLowerCase(); 252 vm.request.ExposedPorts[key] = {}; 253 vm.request.HostConfig.PortBindings[key] = [{ HostIp: port.HostIp, HostPort: port.HostPort }]; 254 } 255 } 256 257 function transformResourceLimits() { 258 vm.request.CpuShares = parseInt(vm.cpuShares); 259 vm.request.Memory = parseInt(vm.memory) * 1024 * 1024; 260 } 261 262 function transformDns() { 263 vm.request.HostConfig.Dns = []; 264 if(vm.containerDns.length > 0) { 265 vm.request.HostConfig.Dns.push(vm.containerDns); 266 } 267 for(i = 0; i < vm.Dns.length; i++) { 268 vm.request.HostConfig.Dns.push(vm.Dns[i]); 269 } 270 } 271 272 function isFormValid() { 273 return $('.ui.form').form('validate form'); 274 } 275 276 function deploy() { 277 if (!isFormValid()) { 278 return; 279 } 280 vm.deploying = true; 281 282 transformVolumes(); 283 transformLinks(); 284 transformEnvVars(); 285 transformConstraints(); 286 transformCommand(); 287 transformPorts(); 288 transformResourceLimits(); 289 transformDns(); 290 291 $http 292 .post('/containers/create?name='+vm.containerName, vm.request) 293 .success(function(data, status, headers, config) { 294 if(status >= 400) { 295 vm.error = data; 296 vm.deploying = false; 297 return; 298 } 299 $http 300 .post('/containers/'+ data.Id +'/start') 301 .success(function(data, status, headers, config) { 302 $state.transitionTo('dashboard.containers'); 303 }) 304 .error(function(data, status, headers, config) { 305 vm.error = data; 306 vm.deploying = false; 307 }); 308 }) 309 .error(function(data, status, headers, config) { 310 vm.error = data; 311 vm.deploying = false; 312 }); 313 } 314 315 316 } 317 })(); 318