From 62b9081e206aa5e94f6e48c952fc03a87a4e0b82 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Mon, 18 May 2015 11:17:34 -0700 Subject: [PATCH 1/2] Fixing random id for container environment variables --- .../ContainerSettingsGeneral.react.js | 29 +++++++++---------- src/utils/DockerUtil.js | 2 +- src/utils/Util.js | 4 +++ 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/components/ContainerSettingsGeneral.react.js b/src/components/ContainerSettingsGeneral.react.js index f07439bfbb..ca25572e88 100644 --- a/src/components/ContainerSettingsGeneral.react.js +++ b/src/components/ContainerSettingsGeneral.react.js @@ -5,6 +5,7 @@ var metrics = require('../utils/MetricsUtil'); var dialog = remote.require('dialog'); var ContainerUtil = require('../utils/ContainerUtil'); var containerActions = require('../actions/ContainerActions'); +var util = require('../utils/Util'); var ContainerSettingsGeneral = React.createClass({ mixins: [React.addons.LinkedStateMixin], @@ -16,6 +17,11 @@ var ContainerSettingsGeneral = React.createClass({ getInitialState: function () { let env = ContainerUtil.env(this.props.container) || []; env.push(['', '']); + + env = _.map(env, e => { + return [util.randomId(), e[0], e[1]]; + }); + return { slugName: null, nameError: null, @@ -23,14 +29,6 @@ var ContainerSettingsGeneral = React.createClass({ }; }, - shouldComponentUpdate: function (nextProps, nextState) { - if (nextState.slugName !== this.state.slugName || nextState.nameError !== this.state.nameError) { - return true; - } - - return true; - }, - handleNameChange: function (e) { let name = e.target.value; if (name === this.state.slugName) { @@ -87,7 +85,7 @@ var ContainerSettingsGeneral = React.createClass({ metrics.track('Saved Environment Variables'); let list = []; _.each(this.state.env, kvp => { - let [key, value] = kvp; + let [, key, value] = kvp; if ((key && key.length) || (value && value.length)) { list.push(key + '=' + value); } @@ -97,7 +95,7 @@ var ContainerSettingsGeneral = React.createClass({ handleChangeEnvKey: function (index, event) { let env = _.map(this.state.env, _.clone); - env[index][0] = event.target.value; + env[index][1] = event.target.value; this.setState({ env: env }); @@ -105,7 +103,7 @@ var ContainerSettingsGeneral = React.createClass({ handleChangeEnvVal: function (index, event) { let env = _.map(this.state.env, _.clone); - env[index][1] = event.target.value; + env[index][2] = event.target.value; this.setState({ env: env }); @@ -113,7 +111,7 @@ var ContainerSettingsGeneral = React.createClass({ handleAddEnvVar: function () { let env = _.map(this.state.env, _.clone); - env.push(['', '']); + env.push([util.randomId(), '', '']); this.setState({ env: env }); @@ -123,8 +121,9 @@ var ContainerSettingsGeneral = React.createClass({ handleRemoveEnvVar: function (index) { let env = _.map(this.state.env, _.clone); env.splice(index, 1); + if (env.length === 0) { - env.push(['', '']); + env.push([util.randomId(), '', '']); } this.setState({ @@ -183,7 +182,7 @@ var ContainerSettingsGeneral = React.createClass({ ); let vars = _.map(this.state.env, (kvp, index) => { - let [key, val] = kvp; + let [id, key, val] = kvp; let icon; if (index === this.state.env.length - 1) { icon = ; @@ -192,7 +191,7 @@ var ContainerSettingsGeneral = React.createClass({ } return ( -
+
{icon} diff --git a/src/utils/DockerUtil.js b/src/utils/DockerUtil.js index a2f107d619..6a1854c692 100644 --- a/src/utils/DockerUtil.js +++ b/src/utils/DockerUtil.js @@ -146,7 +146,7 @@ export default { let imageName = repository + ':' + tag; let placeholderData = { - Id: require('crypto').randomBytes(32).toString('hex'), + Id: util.randomId(), Name: name, Image: imageName, Config: { diff --git a/src/utils/Util.js b/src/utils/Util.js index 243e9b5c8b..c283059213 100644 --- a/src/utils/Util.js +++ b/src/utils/Util.js @@ -2,6 +2,7 @@ var exec = require('exec'); var Promise = require('bluebird'); var fs = require('fs'); var path = require('path'); +var crypto = require('crypto'); module.exports = { exec: function (args, options) { @@ -131,5 +132,8 @@ module.exports = { return 0; }, + randomId: function () { + return crypto.randomBytes(32).toString('hex'); + }, webPorts: ['80', '8000', '8080', '3000', '5000', '2368', '9200', '8983'] }; From a07117508df087c8acfd9dca5a343d97ae7ff160 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Mon, 18 May 2015 11:23:06 -0700 Subject: [PATCH 2/2] Fixing bug where container would create even if downloading container was deleted --- src/utils/DockerUtil.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/utils/DockerUtil.js b/src/utils/DockerUtil.js index 6a1854c692..ccc6cb8644 100644 --- a/src/utils/DockerUtil.js +++ b/src/utils/DockerUtil.js @@ -54,6 +54,10 @@ export default { stream.setEncoding('utf8'); stream.on('data', function () {}); stream.on('end', () => { + if (!this.placeholders[container.Name]) { + return; + } + delete this.placeholders[container.Name]; localStorage.setItem('placeholders', JSON.stringify(this.placeholders)); this.createContainer(container.Name, {Image: container.Config.Image});