diff --git a/src/agent/docker/cluster.py b/src/agent/docker/cluster.py index 60cc8056b..d76005c05 100644 --- a/src/agent/docker/cluster.py +++ b/src/agent/docker/cluster.py @@ -54,7 +54,7 @@ def create(self, cid, mapped_ports, host, user_id="", # start compose project, failed then clean and return logger.debug("Start compose project with name={}".format(cid)) containers = compose_up(name=cid, mapped_ports=mapped_ports, host=host, - network_type=network_type, config=None) + network_type=network_type, config=config) if not containers or len(containers) != config.size: logger.warning("failed to create cluster, with container={}" .format(containers)) diff --git a/src/agent/docker/docker_swarm.py b/src/agent/docker/docker_swarm.py index 6e8eb1405..39d29fb75 100644 --- a/src/agent/docker/docker_swarm.py +++ b/src/agent/docker/docker_swarm.py @@ -21,7 +21,7 @@ CONSENSUS_PLUGINS, CONSENSUS_MODES, \ CLUSTER_LOG_TYPES, CLUSTER_LOG_LEVEL, \ NETWORK_SIZE_FABRIC_PRE_V1, \ - SERVICE_PORTS + SERVICE_PORTS, NETWORK_TYPE_FABRIC_PRE_V1 COMPOSE_FILE_PATH = os.getenv("COMPOSE_FILE_PATH", "./agent/docker/_compose_files") @@ -318,11 +318,11 @@ def _compose_set_env(name, worker_api, mapped_ports=SERVICE_PORTS, log_type=CLUSTER_LOG_TYPES[0], log_server="", config=None): - if network_type == NETWORK_SIZE_FABRIC_PRE_V1: + if network_type == NETWORK_TYPE_FABRIC_PRE_V1: envs = { 'DOCKER_HOST': worker_api, 'COMPOSE_PROJECT_NAME': name, - 'COMPOSE_FILE': "cluster-{}.yml".format(config['_size']), + 'COMPOSE_FILE': "cluster-{}.yml".format(config['size']), 'VM_ENDPOINT': worker_api, 'VM_DOCKER_HOSTCONFIG_NETWORKMODE': CLUSTER_NETWORK + "_{}".format(config['consensus_plugin']), @@ -357,8 +357,10 @@ def compose_up(name, host, mapped_ports, network_type=NETWORK_TYPES[0], """ logger.debug( - "Compose start: name={}, host={}, mapped_port={}, config={}".format( - name, host.get("name"), mapped_ports, config.getdata())) + "Compose start: name={}, host={}, mapped_port={}," + "config={} network_type={}".format( + name, host.get("name"), mapped_ports, + config.get_data(), network_type)) worker_api, log_type, log_server, log_level = \ host.get("worker_api"), host.get("log_type"), host.get("log_server"), \ host.get("log_level") @@ -366,14 +368,15 @@ def compose_up(name, host, mapped_ports, network_type=NETWORK_TYPES[0], os.environ['SYSLOG_SERVER'] = log_server _compose_set_env(name, worker_api, mapped_ports, network_type, - config, log_level, log_type, log_server) + log_level, log_type, log_server, config) try: - project = get_project(COMPOSE_FILE_PATH + - "/{}/".format(network_type) + log_type) + template_path = COMPOSE_FILE_PATH + "/{}/".\ + format(network_type) + log_type + project = get_project(template_path) containers = project.up(detached=True, timeout=timeout) except Exception as e: - logger.warning("Exception when compose start={}".format(e)) + logger.warning("Exception when compose start={}".format(e.message)) return {} if not containers or config['size'] != len(containers): return {} diff --git a/src/resources/cluster_api.py b/src/resources/cluster_api.py index 7a33da9a8..43c6d94f5 100644 --- a/src/resources/cluster_api.py +++ b/src/resources/cluster_api.py @@ -220,17 +220,18 @@ def cluster_create(): logger.warning(error_msg) return make_fail_resp(error=error_msg, data=r.form) - name, host_id, network_type = \ - r.form['name'], r.form['host_id'], r.form['network_type'] + name, host_id, network_type, size = \ + r.form['name'], r.form['host_id'],\ + r.form['network_type'], int(r.form['size']) if network_type == NETWORK_TYPE_FABRIC_PRE_V1: config = FabricPreNetworkConfig( consensus_plugin=r.form['consensus_plugin'], consensus_mode=r.form['consensus_mode'], - size=r.form['size']) + size=size) elif network_type == NETWORK_TYPE_FABRIC_V1: config = FabricV1NetworkConfig( - size=r.form['size']) # TODO: add more variables + size=size) # TODO: add more variables else: error_msg = "Unknown network_type={}".format(network_type) logger.warning(error_msg) diff --git a/src/themes/react/static/js/models/cluster.js b/src/themes/react/static/js/models/cluster.js index edf947621..f83099a80 100644 --- a/src/themes/react/static/js/models/cluster.js +++ b/src/themes/react/static/js/models/cluster.js @@ -58,6 +58,7 @@ export default { } else { message.error('create chain failed') } + yield call(payload.callback, false); }, *deleteCluster({payload}, {call, put}) { const data = yield call(deleteCluster, payload) diff --git a/src/themes/react/static/js/models/host.js b/src/themes/react/static/js/models/host.js index 08a2c6d24..da19d9efe 100644 --- a/src/themes/react/static/js/models/host.js +++ b/src/themes/react/static/js/models/host.js @@ -22,7 +22,7 @@ export default { subscriptions: { setup({dispatch, history}) { history.listen(location => { - if (location.pathname === '/hosts' || location.pathname === '/chains/active') { + if (location.pathname === '/hosts' || location.pathname === '/chains') { dispatch({type: 'getHosts'}) } }) diff --git a/src/themes/react/static/js/routes/cluster/active/ClusterModal.js b/src/themes/react/static/js/routes/cluster/active/ClusterModal.js index cecf4b611..005d7f4e3 100644 --- a/src/themes/react/static/js/routes/cluster/active/ClusterModal.js +++ b/src/themes/react/static/js/routes/cluster/active/ClusterModal.js @@ -28,6 +28,11 @@ class ClusterModal extends React.Component { pluginType: value }) } + setPosting = (value) => { + this.setState({ + posting: value + }) + } handleOk() { const { onOk, @@ -44,8 +49,13 @@ class ClusterModal extends React.Component { this.setState({ posting: true }); - values.consensus_mode = "batch" - onOk(values) + values.consensus_mode = "batch"; + values.network_type = values.fabric_version; + const data = { + ...values, + callback: this.setPosting + } + onOk(data) } }) } @@ -82,6 +92,11 @@ class ClusterModal extends React.Component { const hostsOptions = hosts.map((host, i) => ) + const defaultHostValue = hosts.length ? hosts[0].id : ''; + const fabricVersions = ["fabric-0.6", "fabric-1.0"]; + const fabricVersionOptions = fabricVersions.map((fabricVersion, i) => + + ) return (
@@ -97,6 +112,7 @@ class ClusterModal extends React.Component { {getFieldDecorator('host_id', { + initialValue: defaultHostValue, rules: [ { required: true, @@ -107,6 +123,19 @@ class ClusterModal extends React.Component { {hostsOptions} )} + + {getFieldDecorator('fabric_version', { + initialValue: fabricVersions[0], + rules: [ + { + required: true, + message: 'Must select fabric version', + }, + ], + })()} + {getFieldDecorator('size', { initialValue: 7,