github.com/myafeier/fabric@v1.0.1-0.20170722181825-3a4b1f2bce86/bddtests/regression/go/ote/json2yml.js (about)

     1  //
     2  // Copyright IBM Corp. All Rights Reserved.
     3  //
     4  // SPDX-License-Identifier: Apache-2.0
     5  //
     6  var fs = require('fs');
     7  
     8  var cfgFile = process.argv[2];
     9  //var cfgFile = __dirname + "/" + "network-cfg.json";
    10  var dFile = __dirname + "/" + "docker-compose.yml";
    11  fs.createWriteStream(dFile);
    12  
    13  var CA=0;
    14  var CDB=0;
    15  var KAFKA=0;
    16  
    17  // Orderer environment var
    18  var ord_env_name=[];
    19  var ord_env_val=[];
    20  if ( process.env.CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT != null ) {
    21      console.log(' CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT= ', process.env.CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT);
    22      ord_env_name.push('CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT');
    23      ord_env_val.push(process.env.CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT);
    24  }
    25  if ( process.env.CONFIGTX_ORDERER_ORDERERTYPE != null ) {
    26      console.log(' CONFIGTX_ORDERER_ORDERERTYPE= ', process.env.CONFIGTX_ORDERER_ORDERERTYPE);
    27      ord_env_name.push('CONFIGTX_ORDERER_ORDERERTYPE');
    28      ord_env_val.push(process.env.CONFIGTX_ORDERER_ORDERERTYPE);
    29      if ( process.env.CONFIGTX_ORDERER_ORDERERTYPE == 'kafka' ) {
    30         KAFKA=1;
    31      }
    32  }
    33  if ( process.env.CONFIGTX_ORDERER_BATCHTIMEOUT != null ) {
    34      console.log(' CONFIGTX_ORDERER_BATCHTIMEOUT= ', process.env.CONFIGTX_ORDERER_BATCHTIMEOUT);
    35      ord_env_name.push('CONFIGTX_ORDERER_BATCHTIMEOUT');
    36      ord_env_val.push(process.env.CONFIGTX_ORDERER_BATCHTIMEOUT);
    37  }
    38  
    39  console.log('ord_env_name: ', ord_env_name.length, ord_env_name);
    40  console.log('ord_env_val: ', ord_env_val.length, ord_env_val);
    41  
    42  // Peer environment var
    43  var peer_env_name=[];
    44  var peer_env_val=[];
    45  if ( process.env.CORE_LOGGING_LEVEL != null ) {
    46      console.log(' CORE_LOGGING_LEVEL= ', process.env.CORE_LOGGING_LEVEL);
    47      peer_env_name.push('CORE_LOGGING_LEVEL');
    48      peer_env_val.push(process.env.CORE_LOGGING_LEVEL);
    49  }
    50  if ( process.env.CORE_SECURITY_LEVEL != null ) {
    51      console.log(' CORE_SECURITY_LEVEL= ', process.env.CORE_SECURITY_LEVEL);
    52      peer_env_name.push('CORE_SECURITY_LEVEL');
    53      peer_env_val.push(process.env.CORE_SECURITY_LEVEL);
    54  }
    55  if ( process.env.CORE_SECURITY_HASHALGORITHM != null ) {
    56      console.log(' CORE_SECURITY_HASHALGORITHM= ', process.env.CORE_SECURITY_HASHALGORITHM);
    57      peer_env_name.push('CORE_SECURITY_HASHALGORITHM');
    58      peer_env_val.push(process.env.CORE_SECURITY_HASHALGORITHM);
    59  }
    60  
    61  console.log('peer_env_name: ', peer_env_name.length, peer_env_name);
    62  console.log('peer_env_val: ', peer_env_val.length, peer_env_val);
    63  
    64  //process.exit();
    65  console.log('network cfg: ', cfgFile);
    66  console.log('docker composer: ', dFile);
    67  
    68  var addVP = parseInt(process.argv[3]);
    69  console.log('add peer: ', addVP);
    70  
    71  var VPName = 'peer' + addVP;
    72  
    73  var addOrderer = parseInt(process.argv[4]);;
    74  console.log('add Orderer: ', addOrderer);
    75  
    76  var addBroker = parseInt(process.argv[5]);
    77  console.log('add Kafka Broker: ', addBroker);
    78  
    79  //console.log(' input argv length', process.argv.length);
    80  var dbType = 'none';
    81  if (process.argv.length == 7) {
    82     dbType = process.argv[6];
    83  }
    84  console.log('DB type: ', dbType);
    85  
    86  var cfgContent = JSON.parse(fs.readFileSync(cfgFile, 'utf8'));
    87  
    88  var top_key = Object.keys(cfgContent);
    89  
    90  var lvl1_obj;
    91  var lvl2_key;
    92  var lvl2_obj;
    93  var lvl3_key;
    94  var tmp_name;
    95  var tmp_port;
    96  var ordererAddr;
    97  var ordererPort;
    98  var couchdbAddr;
    99  var couchdbPort;
   100  var vp0Addr;
   101  var vp0Port;
   102  var tmp;
   103  var e;
   104  
   105  if ( addBroker > 0 ) {
   106     KAFKA=1;
   107  }
   108  
   109  if ( (dbType == 'couchdb') || (dbType == 'goleveldb') ){
   110     CDB=1;
   111  }
   112  
   113  //header 0
   114  for ( i0=0; i0<top_key.length; i0++ ) {
   115      var lvl0_obj = cfgContent[top_key[i0]];
   116      var lvl1_key = Object.keys(lvl0_obj);
   117      if ( top_key[i0] == 'ordererAddress' ) {
   118           ordererAddr = lvl0_obj;
   119           console.log('orderer address:', ordererAddr);
   120      } else if ( top_key[i0] == 'ordererPort' ) {
   121           ordererPort = parseInt(lvl0_obj);
   122           console.log('orderer Port:', ordererPort);
   123      } else if ( top_key[i0] == 'couchdbAddress' ) {
   124           couchdbAddr = lvl0_obj;
   125           console.log('couchdb address:', couchdbAddr);
   126      } else if ( top_key[i0] == 'couchdbPort' ) {
   127           couchdbPort = parseInt(lvl0_obj);
   128           console.log('couchdb Port:', couchdbPort);
   129      } else if ( top_key[i0] == 'vp0Address' ) {
   130           vp0Addr = lvl0_obj;
   131           console.log('peer0 address:', vp0Addr);
   132      } else if ( top_key[i0] == 'vp0Port' ) {
   133           vp0Port = parseInt(lvl0_obj);
   134           console.log('peer0 Port:', vp0Port);
   135      } else if ( top_key[i0] == 'version' ) {
   136           buff = top_key[i0] + ":" + " '" + lvl0_obj + "'" + "\n";
   137           fs.appendFileSync(dFile, buff);
   138      } else if ( top_key[i0] == 'networks' ) {
   139           buff = top_key[i0] + ":" + "\n";
   140           fs.appendFileSync(dFile, buff);
   141           buff = '    bridge:' + '\n';
   142           fs.appendFileSync(dFile, buff);
   143      } else if ( top_key[i0] == 'services' ) {
   144          buff = '\n';
   145          fs.appendFileSync(dFile, buff);
   146          buff = top_key[i0] + ':' + '\n';
   147          fs.appendFileSync(dFile, buff);
   148          //header 1
   149          for ( i=0; i<lvl1_key.length; i++ ) {
   150              lvl1_obj = lvl0_obj[lvl1_key[i]];
   151              lvl2_key = Object.keys(lvl1_obj);
   152  
   153              // header 2
   154               if (lvl1_key[i] == 'couchdb' ) {
   155                  if (dbType == 'couchdb') {
   156                  for ( v = 0; v < addVP; v++ ) {
   157                      tmp_name = lvl1_key[i] + v;
   158                      tmp_port = couchdbPort + v;
   159                      buff = '  ' + tmp_name +':' + '\n';
   160                      fs.appendFileSync(dFile, buff);
   161  
   162                      // header 3
   163                      for ( k=0; k<lvl2_key.length; k++ ) {
   164                          if ( lvl2_key[k] == 'environment' ) {
   165                              lvl2_obj = lvl1_obj[lvl2_key[k]];
   166                              lvl3_key = Object.keys(lvl2_obj);
   167  
   168                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   169                              fs.appendFileSync(dFile, buff);
   170  
   171                              // header 4
   172                              for ( m=0; m< lvl3_key.length; m++ ) {
   173                                  if ( lvl3_key[m] == 'CORE_PEER_ID' ) {
   174                                      buff = '  ' + '    - ' + lvl3_key[m] + '=' + tmp_name + '\n';
   175                                  } else if ( lvl3_key[m] == 'CORE_PEER_ADDRESS' ) {
   176                                      buff = '  ' + '    - ' + lvl3_key[m] + '=' + vp0Addr +':'+ tmp_port + '\n';
   177                                  } else if ( lvl3_key[m] == 'CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS' ) {
   178                                      buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'couchdb'+v +':'+ couchdbPort + '\n';
   179                                  } else {
   180                                      buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   181                                  }
   182  
   183                                  fs.appendFileSync(dFile, buff);
   184                              }
   185                          } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   186                                      || ( lvl2_key[k] == 'restart') ) {
   187                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   188                              fs.appendFileSync(dFile, buff);
   189  
   190                          } else if ( lvl2_key[k] == 'container_name' ) {
   191                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + tmp_name + '\n';
   192                              fs.appendFileSync(dFile, buff);
   193  
   194                          } else if ( lvl2_key[k] == 'ports' ) {
   195                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   196                              fs.appendFileSync(dFile, buff);
   197  
   198                              // header 4
   199                              buff = '  ' + '    - ' + tmp_port + ':' + couchdbPort + '\n';
   200                              fs.appendFileSync(dFile, buff);
   201  
   202                          } else if ( lvl2_key[k] == 'links' ) {
   203                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   204                              //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   205  
   206                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   207                              fs.appendFileSync(dFile, buff);
   208                              buff = '  ' + '    - ' + 'orderer' + '\n';
   209                              fs.appendFileSync(dFile, buff);
   210                              if ( CA == 1 ) {
   211                                  buff = '  ' + '    - ' + 'ca' + '\n';
   212                                  fs.appendFileSync(dFile, buff);
   213                              }
   214                              // header 4
   215                              for ( m=0; m< v; m++ ) {
   216                                  buff = '  ' + '    - ' +'peer'+m + '\n';
   217                                  fs.appendFileSync(dFile, buff);
   218                              }
   219  
   220                          } else if ( ( lvl2_key[k] == 'volumes' ) || ( lvl2_key[k] == 'depends_on' ) ){
   221                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   222                              //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   223  
   224                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   225                              fs.appendFileSync(dFile, buff);
   226  
   227                              // header 4
   228                              for ( m=0; m< lvl2_obj.length; m++ ) {
   229                                  buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   230                                  fs.appendFileSync(dFile, buff);
   231  
   232                              }
   233  
   234                          } else {
   235                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   236                              fs.appendFileSync(dFile, buff);
   237  
   238                              buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   239                              fs.appendFileSync(dFile, buff);
   240  
   241                          }
   242                      }
   243                      // add a blank line
   244                      buff = '\n';
   245                      fs.appendFileSync(dFile, buff);
   246  
   247                  }
   248                  }
   249               } else if (lvl1_key[i] == 'orderer' ) {
   250                  for ( v = 0; v < addOrderer; v++ ) {
   251                      tmp_name = lvl1_key[i] + v;
   252                      buff = '  ' + tmp_name +':' + '\n';
   253                      fs.appendFileSync(dFile, buff);
   254  
   255                      // header 3
   256                      for ( k=0; k<lvl2_key.length; k++ ) {
   257                          if ( (lvl2_key[k] == 'environment') ) {
   258                              lvl2_obj = lvl1_obj[lvl2_key[k]];
   259                              lvl3_key = Object.keys(lvl2_obj);
   260  
   261                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   262                              fs.appendFileSync(dFile, buff);
   263  
   264                                  // header 4
   265                                  for ( m=0; m< lvl3_key.length; m++ ) {
   266                                      tmp = ord_env_name.indexOf( lvl3_key[m] );
   267                                      if ( tmp >= 0 ) {
   268                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + ord_env_val[tmp] + '\n';
   269                                          fs.appendFileSync(dFile, buff);
   270                                      } else if ( lvl3_key[m] == 'CONFIGTX_ORDERER_KAFKA_BROKERS' ) {
   271                                          if ( addBroker > 0 ) {
   272                                              buff = '  ' + '    - ' + lvl3_key[m] + '=[';
   273                                              for (n=0; n<addBroker; n++) {
   274                                                  buff = buff + 'kafka' + n +':9092' ;
   275                                                  if ( n < (addBroker-1) ) {
   276                                                       buff = buff + ',';
   277                                                  }
   278                                              }
   279                                              buff = buff + ']' + '\n';
   280                                              fs.appendFileSync(dFile, buff);
   281                                          }
   282                                      } else if ( lvl3_key[m] == 'CONFIGTX_ORDERER_ORDERERTYPE' ) {
   283                                              if ( addBroker > 0 ) {
   284                                                  buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'kafka' + '\n';
   285                                                  fs.appendFileSync(dFile, buff);
   286                                              } else {
   287                                                  buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'solo' + '\n';
   288                                                  fs.appendFileSync(dFile, buff);
   289                                              }
   290                                      } else if ( lvl3_key[m] == 'ORDERER_GENERAL_LISTENPORT' ) {
   291                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + ordererPort + '\n';
   292                                              fs.appendFileSync(dFile, buff);
   293                                      } else if ( ( lvl3_key[m] == 'ORDERER_GENERAL_GENESISMETHOD' ) || ( lvl3_key[m] == 'ORDERER_GENERAL_GENESISFILE' ) ) {
   294                                          if ( addBroker > 0 ) {
   295                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + lvl2_obj[lvl3_key[m]] + '\n';
   296                                              fs.appendFileSync(dFile, buff);
   297                                          } else {
   298                                              //buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'solo' + '\n';
   299                                              //fs.appendFileSync(dFile, buff);
   300                                          }
   301                                      } else {
   302                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   303                                          fs.appendFileSync(dFile, buff);
   304                                      }
   305  
   306                                  }
   307                          } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   308                                      || ( lvl2_key[k] == 'restart') ) {
   309                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   310                              fs.appendFileSync(dFile, buff);
   311                          } else if ( lvl2_key[k] == 'container_name' ) {
   312                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + tmp_name + '\n';
   313                              fs.appendFileSync(dFile, buff);
   314                          } else if ( lvl2_key[k] == 'ports' ) {
   315                                  lvl2_obj = lvl1_obj[lvl2_key[k]];
   316                                  lvl3_key = Object.keys(lvl2_obj);
   317  
   318                                  buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   319                                  fs.appendFileSync(dFile, buff);
   320                                  tmp_port = ordererPort + v;
   321  
   322                                  buff = '  ' + '    - ' + tmp_port +':' + ordererPort + '\n' ;
   323                                  fs.appendFileSync(dFile, buff);
   324  
   325                          } else if ( (lvl2_key[k] == 'depends_on') ) {
   326                              if ( addBroker > 0 ) {
   327                                  lvl2_obj = lvl1_obj[lvl2_key[k]];
   328                                  lvl3_key = Object.keys(lvl2_obj);
   329  
   330                                  buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   331                                  fs.appendFileSync(dFile, buff);
   332  
   333                                  buff = '  ' + '    - ' + 'zookeeper' + '\n' ;
   334                                  fs.appendFileSync(dFile, buff);
   335                                  if ( KAFKA==1 ) {
   336                                      for (n=0; n<addBroker; n++) {
   337                                          buff = '  ' + '    - ' + 'kafka' + n + '\n' ;
   338                                          fs.appendFileSync(dFile, buff);
   339                                      }
   340                                  }
   341                              }
   342                          } else {
   343                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   344                              fs.appendFileSync(dFile, buff);
   345  
   346                              buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   347                              fs.appendFileSync(dFile, buff);
   348  
   349                          }
   350                      }
   351                      // add a blank line
   352                      buff = '\n';
   353                      fs.appendFileSync(dFile, buff);
   354  
   355                  }
   356               } else if (lvl1_key[i] == 'kafka' ) {
   357                  for ( v = 0; v < addBroker; v++ ) {
   358                      tmp_name = lvl1_key[i] + v;
   359                      tmp_port = vp0Port + v;
   360                      buff = '  ' + tmp_name +':' + '\n';
   361                      fs.appendFileSync(dFile, buff);
   362  
   363                      // header 3
   364                      for ( k=0; k<lvl2_key.length; k++ ) {
   365                          if ( (lvl2_key[k] == 'environment') ) {
   366                                  lvl2_obj = lvl1_obj[lvl2_key[k]];
   367                                  lvl3_key = Object.keys(lvl2_obj);
   368  
   369                                  buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   370                                  fs.appendFileSync(dFile, buff);
   371  
   372                                  // header 4
   373                                  for ( m=0; m< lvl3_key.length; m++ ) {
   374                                      if ( lvl3_key[m] == 'KAFKA_BROKER_ID' ) {
   375                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + v + '\n';
   376                                          fs.appendFileSync(dFile, buff);
   377                                      } else if ( lvl3_key[m] == 'KAFKA_DEFAULT_REPLICATION_FACTOR' ) {
   378                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + addBroker + '\n';
   379                                          fs.appendFileSync(dFile, buff);
   380                                      } else {
   381                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   382                                          fs.appendFileSync(dFile, buff);
   383                                      }
   384  
   385                                  }
   386                          } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   387                                      || ( lvl2_key[k] == 'restart') ) {
   388                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   389                              fs.appendFileSync(dFile, buff);
   390                          } else if ( lvl2_key[k] == 'container_name' ) {
   391                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + tmp_name + '\n';
   392                              fs.appendFileSync(dFile, buff);
   393  
   394                          } else {
   395                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   396                              fs.appendFileSync(dFile, buff);
   397  
   398                              buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   399                              fs.appendFileSync(dFile, buff);
   400  
   401                          }
   402                      }
   403                      // add a blank line
   404                      buff = '\n';
   405                      fs.appendFileSync(dFile, buff);
   406  
   407                  }
   408               } else if (lvl1_key[i] == 'zookeeper' ) {
   409                  if ( KAFKA == 1 ) {
   410                      tmp_name = lvl1_key[i];
   411                      buff = '  ' + tmp_name +':' + '\n';
   412                      fs.appendFileSync(dFile, buff);
   413  
   414                      // header 3
   415                      for ( k=0; k<lvl2_key.length; k++ ) {
   416                          if ( (lvl2_key[k] == 'environment') ) {
   417                                  lvl2_obj = lvl1_obj[lvl2_key[k]];
   418                                  lvl3_key = Object.keys(lvl2_obj);
   419  
   420                                  buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   421                                  fs.appendFileSync(dFile, buff);
   422  
   423                                  // header 4
   424                                  for ( m=0; m< lvl3_key.length; m++ ) {
   425                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   426                                          fs.appendFileSync(dFile, buff);
   427                                  }
   428                          } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   429                                      || ( lvl2_key[k] == 'restart') ) {
   430                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   431                              fs.appendFileSync(dFile, buff);
   432                          } else if ( lvl2_key[k] == 'container_name' ) {
   433                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + tmp_name + '\n';
   434                              fs.appendFileSync(dFile, buff);
   435  
   436                          } else {
   437                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   438                              fs.appendFileSync(dFile, buff);
   439  
   440                              buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   441                              fs.appendFileSync(dFile, buff);
   442  
   443                          }
   444                      }
   445                      // add a blank line
   446                      buff = '\n';
   447                      fs.appendFileSync(dFile, buff);
   448  
   449                  }
   450               } else if (lvl1_key[i] == 'peer' ) {
   451                  for ( v = 0; v < addVP; v++ ) {
   452                      tmp_name = lvl1_key[i] + v;
   453                      tmp_port = vp0Port + v;
   454                      buff = '  ' + tmp_name +':' + '\n';
   455                      fs.appendFileSync(dFile, buff);
   456  
   457                      // header 3
   458                      for ( k=0; k<lvl2_key.length; k++ ) {
   459                          if ( (lvl2_key[k] == 'environment') ) {
   460                              lvl2_obj = lvl1_obj[lvl2_key[k]];
   461                              lvl3_key = Object.keys(lvl2_obj);
   462  
   463                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   464                              fs.appendFileSync(dFile, buff);
   465  
   466                                  // header 4
   467                                  for ( m=0; m< lvl3_key.length; m++ ) {
   468                                      tmp = peer_env_name.indexOf( lvl3_key[m] );
   469                                      if ( tmp >= 0 ) {
   470                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + peer_env_val[tmp] + '\n';
   471                                          fs.appendFileSync(dFile, buff);
   472                                      } else if ( lvl3_key[m] == 'CORE_PEER_ID' ) {
   473                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + tmp_name + '\n';
   474                                          fs.appendFileSync(dFile, buff);
   475                                      } else if ( lvl3_key[m] == 'CORE_PEER_NETWORKID' ) {
   476                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + tmp_name + '\n';
   477                                          fs.appendFileSync(dFile, buff);
   478                                      } else if ( lvl3_key[m] == 'CORE_PEER_ADDRESS' ) {
   479                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + vp0Addr +':'+ tmp_port + '\n';
   480                                          fs.appendFileSync(dFile, buff);
   481                                      } else if ( lvl3_key[m] == 'CORE_PEER_DISCOVERY_ROOTNODE' ) {
   482                                          if ( v != 0 ) {
   483                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + vp0Addr +':'+ vp0Port + '\n';
   484                                              fs.appendFileSync(dFile, buff);
   485                                          }
   486                                      } else if ( lvl3_key[m] == 'CORE_LEDGER_STATE_STATEDATABASE' ) {
   487                                          if (dbType == 'couchdb') {
   488                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'CouchDB' + '\n';
   489                                              fs.appendFileSync(dFile, buff);
   490                                          } else if (dbType == 'goleveldb') {
   491                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'goleveldb' + '\n';
   492                                              fs.appendFileSync(dFile, buff);
   493                                          }
   494                                      } else if ( lvl3_key[m] == 'CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS' ) {
   495                                          if (dbType == 'couchdb') {
   496                                              tmp = couchdbPort+v;
   497                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'couchdb'+v +':'+ tmp + '\n';
   498                                              fs.appendFileSync(dFile, buff);
   499                                          }
   500                                      } else {
   501                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   502                                          fs.appendFileSync(dFile, buff);
   503                                      }
   504  
   505                                  }
   506                          } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   507                                      || ( lvl2_key[k] == 'restart') ) {
   508                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   509                              fs.appendFileSync(dFile, buff);
   510  
   511                          } else if ( lvl2_key[k] == 'container_name' ) {
   512                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + tmp_name + '\n';
   513                              fs.appendFileSync(dFile, buff);
   514  
   515                          } else if ( lvl2_key[k] == 'ports' ) {
   516                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   517                              fs.appendFileSync(dFile, buff);
   518  
   519                              // header 4
   520                              buff = '  ' + '    - ' + tmp_port + ':' + vp0Port + '\n';
   521                              fs.appendFileSync(dFile, buff);
   522  
   523                          } else if ( lvl2_key[k] == 'links' ) {
   524                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   525                              //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   526  
   527                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   528                              fs.appendFileSync(dFile, buff);
   529                              buff = '  ' + '    - ' + 'orderer0' + '\n';
   530                              fs.appendFileSync(dFile, buff);
   531                              if (dbType == 'couchdb') {
   532                                  buff = '  ' + '    - ' + 'couchdb'+v + '\n';
   533                                  fs.appendFileSync(dFile, buff);
   534                              }
   535                              if ( CA == 1 ) {
   536                                  buff = '  ' + '    - ' + 'ca' + '\n';
   537                                  fs.appendFileSync(dFile, buff);
   538                              }
   539                              // header 4
   540                              for ( m=0; m< v; m++ ) {
   541                                  buff = '  ' + '    - ' +'peer'+m + '\n';
   542                                  fs.appendFileSync(dFile, buff);
   543                              }
   544  
   545                          } else if ( lvl2_key[k] == 'volumes' ) {
   546                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   547                              //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   548  
   549                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   550                              fs.appendFileSync(dFile, buff);
   551  
   552                              // header 4
   553                              for ( m=0; m< lvl2_obj.length; m++ ) {
   554                                  buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   555                                  fs.appendFileSync(dFile, buff);
   556  
   557                              }
   558  
   559                          } else if ( lvl2_key[k] == 'depends_on'  ){
   560                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   561  
   562                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   563                              fs.appendFileSync(dFile, buff);
   564  
   565                              // header 4
   566                              for ( m=0; m< lvl2_obj.length; m++ ) {
   567                                  buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   568                                  fs.appendFileSync(dFile, buff);
   569                              }
   570  
   571                          } else {
   572                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   573                              fs.appendFileSync(dFile, buff);
   574  
   575                              buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   576                              fs.appendFileSync(dFile, buff);
   577  
   578                          }
   579                      }
   580                      // add a blank line
   581                      buff = '\n';
   582                      fs.appendFileSync(dFile, buff);
   583  
   584                  }
   585               } else if (lvl1_key[i] == 'cli' ) {
   586                  buff = '  ' + lvl1_key[i] +':' + '\n';
   587                  fs.appendFileSync(dFile, buff);
   588  
   589                  // header 3
   590                  for ( k=0; k<lvl2_key.length; k++ ) {
   591                      if ( lvl2_key[k] == 'environment' ) {
   592                          lvl2_obj = lvl1_obj[lvl2_key[k]];
   593                          lvl3_key = Object.keys(lvl2_obj);
   594                          //console.log('lvl2_obj: ', lvl2_obj);
   595                          //console.log('lvl3_key: ', lvl3_key);
   596  
   597                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   598                          fs.appendFileSync(dFile, buff);
   599  
   600                          // header 4
   601                          for ( m=0; m< lvl3_key.length; m++ ) {
   602                              /*if ( lvl3_key[m] == 'CORE_PEER_COMMITTER_LEDGER_ORDERER' ) {
   603                                  buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'orderer0' +':'+ ordererPort + '\n';
   604                                  fs.appendFileSync(dFile, buff);
   605                              } else {*/
   606                                  buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   607                                  fs.appendFileSync(dFile, buff);
   608                              //}
   609  
   610                          }
   611                      } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   612                              || ( lvl2_key[k] == 'restart') || ( lvl2_key[k] == 'container_name') || ( lvl2_key[k] == 'tty') ) {
   613                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   614                          fs.appendFileSync(dFile, buff);
   615  
   616                      } else if ( lvl2_key[k] == 'links' ) {
   617                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   618                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   619  
   620                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   621                          fs.appendFileSync(dFile, buff);
   622  
   623                          // header 4
   624                              buff = '  ' + '    - ' +'orderer0:orderer0' + '\n';
   625                              fs.appendFileSync(dFile, buff);
   626                              buff = '  ' + '    - ' +'peer0:peer0' + '\n';
   627                              fs.appendFileSync(dFile, buff);
   628  
   629                      } else if ( lvl2_key[k] == 'depends_on' ) {
   630                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   631                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   632  
   633                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   634                          fs.appendFileSync(dFile, buff);
   635  
   636                          // header 4
   637                              buff = '  ' + '    - ' +'orderer0' + '\n';
   638                              fs.appendFileSync(dFile, buff);
   639                              buff = '  ' + '    - ' +'peer0' + '\n';
   640                              fs.appendFileSync(dFile, buff);
   641  
   642                      } else if ( ( lvl2_key[k] == 'ports' ) || ( lvl2_key[k] == 'volumes' )  ){
   643                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   644                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   645  
   646                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   647                          fs.appendFileSync(dFile, buff);
   648  
   649                          // header 4
   650                          for ( m=0; m< lvl2_obj.length; m++ ) {
   651                              buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   652                              fs.appendFileSync(dFile, buff);
   653  
   654                          }
   655  
   656                      } else {
   657                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   658                          fs.appendFileSync(dFile, buff);
   659  
   660                          buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   661                          fs.appendFileSync(dFile, buff);
   662  
   663                      }
   664                  }
   665                  // add a blank line
   666                  buff = '\n';
   667                  fs.appendFileSync(dFile, buff);
   668  
   669               } else {
   670                  if (lvl1_key[i] == 'ca' ) {
   671                      CA=1;
   672                  }
   673                  buff = '  ' + lvl1_key[i] +':' + '\n';
   674                  fs.appendFileSync(dFile, buff);
   675  
   676                  // header 3
   677                  for ( k=0; k<lvl2_key.length; k++ ) {
   678                      if ( lvl2_key[k] == 'environment' ) {
   679                          lvl2_obj = lvl1_obj[lvl2_key[k]];
   680                          lvl3_key = Object.keys(lvl2_obj);
   681                          //console.log('lvl2_obj: ', lvl2_obj);
   682                          //console.log('lvl3_key: ', lvl3_key);
   683  
   684                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   685                          fs.appendFileSync(dFile, buff);
   686  
   687                          // header 4
   688                          for ( m=0; m< lvl3_key.length; m++ ) {
   689                              buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   690                              fs.appendFileSync(dFile, buff);
   691  
   692                          }
   693                      } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   694                              || ( lvl2_key[k] == 'restart') || ( lvl2_key[k] == 'container_name') || ( lvl2_key[k] == 'tty') ) {
   695                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   696                          fs.appendFileSync(dFile, buff);
   697  
   698                      } else if ( ( lvl2_key[k] == 'ports' ) || ( lvl2_key[k] == 'links' ) || ( lvl2_key[k] == 'volumes' )
   699                              || ( lvl2_key[k] == 'depends_on' ) ){
   700                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   701                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   702  
   703                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   704                          fs.appendFileSync(dFile, buff);
   705  
   706                          // header 4
   707                          for ( m=0; m< lvl2_obj.length; m++ ) {
   708                              buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   709                              fs.appendFileSync(dFile, buff);
   710  
   711                          }
   712  
   713                      } else {
   714                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   715                          fs.appendFileSync(dFile, buff);
   716  
   717                          buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   718                          fs.appendFileSync(dFile, buff);
   719  
   720                      }
   721                  }
   722                  // add a blank line
   723                  buff = '\n';
   724                  fs.appendFileSync(dFile, buff);
   725  
   726              }
   727          }
   728      }
   729  }