github.com/tenywen/fabric@v1.0.0-beta.0.20170620030522-a5b1ed380643/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_COMMITTER_LEDGER_ORDERER' ) {
   479                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'orderer0' +':'+ ordererPort + '\n';
   480                                          fs.appendFileSync(dFile, buff);
   481                                      } else if ( lvl3_key[m] == 'CORE_PEER_ADDRESS' ) {
   482                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' + vp0Addr +':'+ tmp_port + '\n';
   483                                          fs.appendFileSync(dFile, buff);
   484                                      } else if ( lvl3_key[m] == 'CORE_PEER_DISCOVERY_ROOTNODE' ) {
   485                                          if ( v != 0 ) {
   486                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + vp0Addr +':'+ vp0Port + '\n';
   487                                              fs.appendFileSync(dFile, buff);
   488                                          }
   489                                      } else if ( lvl3_key[m] == 'CORE_LEDGER_STATE_STATEDATABASE' ) {
   490                                          if (dbType == 'couchdb') {
   491                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'CouchDB' + '\n';
   492                                              fs.appendFileSync(dFile, buff);
   493                                          } else if (dbType == 'goleveldb') {
   494                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'goleveldb' + '\n';
   495                                              fs.appendFileSync(dFile, buff);
   496                                          }
   497                                      } else if ( lvl3_key[m] == 'CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS' ) {
   498                                          if (dbType == 'couchdb') {
   499                                              tmp = couchdbPort+v;
   500                                              buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'couchdb'+v +':'+ tmp + '\n';
   501                                              fs.appendFileSync(dFile, buff);
   502                                          }
   503                                      } else {
   504                                          buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   505                                          fs.appendFileSync(dFile, buff);
   506                                      }
   507  
   508                                  }
   509                          } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   510                                      || ( lvl2_key[k] == 'restart') ) {
   511                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   512                              fs.appendFileSync(dFile, buff);
   513  
   514                          } else if ( lvl2_key[k] == 'container_name' ) {
   515                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + tmp_name + '\n';
   516                              fs.appendFileSync(dFile, buff);
   517  
   518                          } else if ( lvl2_key[k] == 'ports' ) {
   519                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   520                              fs.appendFileSync(dFile, buff);
   521  
   522                              // header 4
   523                              buff = '  ' + '    - ' + tmp_port + ':' + vp0Port + '\n';
   524                              fs.appendFileSync(dFile, buff);
   525  
   526                          } else if ( lvl2_key[k] == 'links' ) {
   527                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   528                              //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   529  
   530                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   531                              fs.appendFileSync(dFile, buff);
   532                              buff = '  ' + '    - ' + 'orderer0' + '\n';
   533                              fs.appendFileSync(dFile, buff);
   534                              if (dbType == 'couchdb') {
   535                                  buff = '  ' + '    - ' + 'couchdb'+v + '\n';
   536                                  fs.appendFileSync(dFile, buff);
   537                              }
   538                              if ( CA == 1 ) {
   539                                  buff = '  ' + '    - ' + 'ca' + '\n';
   540                                  fs.appendFileSync(dFile, buff);
   541                              }
   542                              // header 4
   543                              for ( m=0; m< v; m++ ) {
   544                                  buff = '  ' + '    - ' +'peer'+m + '\n';
   545                                  fs.appendFileSync(dFile, buff);
   546                              }
   547  
   548                          } else if ( lvl2_key[k] == 'volumes' ) {
   549                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   550                              //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   551  
   552                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   553                              fs.appendFileSync(dFile, buff);
   554  
   555                              // header 4
   556                              for ( m=0; m< lvl2_obj.length; m++ ) {
   557                                  buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   558                                  fs.appendFileSync(dFile, buff);
   559  
   560                              }
   561  
   562                          } else if ( lvl2_key[k] == 'depends_on'  ){
   563                              var lvl2_obj = lvl1_obj[lvl2_key[k]];
   564  
   565                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   566                              fs.appendFileSync(dFile, buff);
   567  
   568                              // header 4
   569                              for ( m=0; m< lvl2_obj.length; m++ ) {
   570                                  buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   571                                  fs.appendFileSync(dFile, buff);
   572                              }
   573  
   574                          } else {
   575                              buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   576                              fs.appendFileSync(dFile, buff);
   577  
   578                              buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   579                              fs.appendFileSync(dFile, buff);
   580  
   581                          }
   582                      }
   583                      // add a blank line
   584                      buff = '\n';
   585                      fs.appendFileSync(dFile, buff);
   586  
   587                  }
   588               } else if (lvl1_key[i] == 'cli' ) {
   589                  buff = '  ' + lvl1_key[i] +':' + '\n';
   590                  fs.appendFileSync(dFile, buff);
   591  
   592                  // header 3
   593                  for ( k=0; k<lvl2_key.length; k++ ) {
   594                      if ( lvl2_key[k] == 'environment' ) {
   595                          lvl2_obj = lvl1_obj[lvl2_key[k]];
   596                          lvl3_key = Object.keys(lvl2_obj);
   597                          //console.log('lvl2_obj: ', lvl2_obj);
   598                          //console.log('lvl3_key: ', lvl3_key);
   599  
   600                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   601                          fs.appendFileSync(dFile, buff);
   602  
   603                          // header 4
   604                          for ( m=0; m< lvl3_key.length; m++ ) {
   605                              if ( lvl3_key[m] == 'CORE_PEER_COMMITTER_LEDGER_ORDERER' ) {
   606                                  buff = '  ' + '    - ' + lvl3_key[m] + '=' + 'orderer0' +':'+ ordererPort + '\n';
   607                                  fs.appendFileSync(dFile, buff);
   608                              } else {
   609                                  buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   610                                  fs.appendFileSync(dFile, buff);
   611                              }
   612  
   613                          }
   614                      } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   615                              || ( lvl2_key[k] == 'restart') || ( lvl2_key[k] == 'container_name') || ( lvl2_key[k] == 'tty') ) {
   616                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   617                          fs.appendFileSync(dFile, buff);
   618  
   619                      } else if ( lvl2_key[k] == 'links' ) {
   620                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   621                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   622  
   623                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   624                          fs.appendFileSync(dFile, buff);
   625  
   626                          // header 4
   627                              buff = '  ' + '    - ' +'orderer0:orderer0' + '\n';
   628                              fs.appendFileSync(dFile, buff);
   629                              buff = '  ' + '    - ' +'peer0:peer0' + '\n';
   630                              fs.appendFileSync(dFile, buff);
   631  
   632                      } else if ( lvl2_key[k] == 'depends_on' ) {
   633                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   634                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   635  
   636                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   637                          fs.appendFileSync(dFile, buff);
   638  
   639                          // header 4
   640                              buff = '  ' + '    - ' +'orderer0' + '\n';
   641                              fs.appendFileSync(dFile, buff);
   642                              buff = '  ' + '    - ' +'peer0' + '\n';
   643                              fs.appendFileSync(dFile, buff);
   644  
   645                      } else if ( ( lvl2_key[k] == 'ports' ) || ( lvl2_key[k] == 'volumes' )  ){
   646                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   647                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   648  
   649                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   650                          fs.appendFileSync(dFile, buff);
   651  
   652                          // header 4
   653                          for ( m=0; m< lvl2_obj.length; m++ ) {
   654                              buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   655                              fs.appendFileSync(dFile, buff);
   656  
   657                          }
   658  
   659                      } else {
   660                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   661                          fs.appendFileSync(dFile, buff);
   662  
   663                          buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   664                          fs.appendFileSync(dFile, buff);
   665  
   666                      }
   667                  }
   668                  // add a blank line
   669                  buff = '\n';
   670                  fs.appendFileSync(dFile, buff);
   671  
   672               } else {
   673                  if (lvl1_key[i] == 'ca' ) {
   674                      CA=1;
   675                  }
   676                  buff = '  ' + lvl1_key[i] +':' + '\n';
   677                  fs.appendFileSync(dFile, buff);
   678  
   679                  // header 3
   680                  for ( k=0; k<lvl2_key.length; k++ ) {
   681                      if ( lvl2_key[k] == 'environment' ) {
   682                          lvl2_obj = lvl1_obj[lvl2_key[k]];
   683                          lvl3_key = Object.keys(lvl2_obj);
   684                          //console.log('lvl2_obj: ', lvl2_obj);
   685                          //console.log('lvl3_key: ', lvl3_key);
   686  
   687                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   688                          fs.appendFileSync(dFile, buff);
   689  
   690                          // header 4
   691                          for ( m=0; m< lvl3_key.length; m++ ) {
   692                              buff = '  ' + '    - ' + lvl3_key[m] + '=' +lvl2_obj[lvl3_key[m]] + '\n';
   693                              fs.appendFileSync(dFile, buff);
   694  
   695                          }
   696                      } else if ( ( lvl2_key[k] == 'image' ) || ( lvl2_key[k] == 'command' ) || ( lvl2_key[k] == 'working_dir' )
   697                              || ( lvl2_key[k] == 'restart') || ( lvl2_key[k] == 'container_name') || ( lvl2_key[k] == 'tty') ) {
   698                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + lvl1_obj[lvl2_key[k]] + '\n';
   699                          fs.appendFileSync(dFile, buff);
   700  
   701                      } else if ( ( lvl2_key[k] == 'ports' ) || ( lvl2_key[k] == 'links' ) || ( lvl2_key[k] == 'volumes' )
   702                              || ( lvl2_key[k] == 'depends_on' ) ){
   703                          var lvl2_obj = lvl1_obj[lvl2_key[k]];
   704                          //console.log('lvl2_obj: %d ', lvl2_obj.length, lvl2_obj);
   705  
   706                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   707                          fs.appendFileSync(dFile, buff);
   708  
   709                          // header 4
   710                          for ( m=0; m< lvl2_obj.length; m++ ) {
   711                              buff = '  ' + '    - ' +lvl2_obj[m] + '\n';
   712                              fs.appendFileSync(dFile, buff);
   713  
   714                          }
   715  
   716                      } else {
   717                          buff = '  ' + '  ' + lvl2_key[k] + ': ' + '\n';
   718                          fs.appendFileSync(dFile, buff);
   719  
   720                          buff = '  ' + '    - ' + lvl1_obj[lvl2_key[k]] + '\n';
   721                          fs.appendFileSync(dFile, buff);
   722  
   723                      }
   724                  }
   725                  // add a blank line
   726                  buff = '\n';
   727                  fs.appendFileSync(dFile, buff);
   728  
   729              }
   730          }
   731      }
   732  }