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