2017-03-14 27 views
0

这里是到目前为止的代码
关于变量注:
'ports' - 有可能是在“端口”列表
'nodes_u'这将包含任何数量的服务器的任意端口数目名称和IP地址对
'serv_name_u'可以是任何东西,但是是静态的,一旦定义
'port_qty'等于在“端口”嵌套的循环+格式化多个列表

ports = ['443', '80'] 
nodes_u = ['SERVER1', '10.0.0.1', 'SERVER2', '10.0.0.2'] 
serv_name_u = "TESTING" 
port_qty = 2 

for i in range(0, len(ports)): 
    print("ltm pool "+serv_name_u+"_{0}_pool {{ \n members {{" 
      .format(ports[i])) 
    for i in range(0, len(nodes_u), 2): 
     print("  {0} {{ \n   address {1} \n  }}" 
       .format(nodes_u[i], nodes_u[i+1])) 
上市的端口数

这里是输出

ltm pool TESTING_443_pool { 
    members { 
     SERVER1 { 
      address 10.0.0.1 
     } 
     SERVER2 { 
      address 10.0.0.2 
     } 
ltm pool TESTING_80_pool { 
    members { 
     SERVER1 { 
      address 10.0.0.1 
     } 
     SERVER2 { 
      address 10.0.0.2 
     } 

我的问题还是什么,我试图找出是怎样才能得到仅在池部分中的服务器名称后显示的端口号的例子!所以输出就像这样

ltm pool TESTING_443_pool { 
    members { 
     SERVER1:443 { <<<Port Number Here! 
      address 10.0.0.1 
     } 
     SERVER2:443 { <<<Port Number Here! 
      address 10.0.0.2 
     } 
ltm pool TESTING_80_pool { 
    members { 
     SERVER1:80 { <<<Port Number Here! 
      address 10.0.0.1 
     } 
     SERVER2:80 { <<<Port Number Here! 
      address 10.0.0.2 
     } 

每次我尝试一些我刚刚结束了上市的两个端口或迭代跳过去的指数范围为“端口”名单。此外,如果有更好的方法来捕捉输入或生成输出,我全是耳朵!

+3

欢迎来到StackOverflow。请阅读[我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)和[如何创建最小,完整和可验证的示例](http:// stackoverflow。 com/help/mcve),然后回来并重新修改您的问题 –

+0

对反馈的回应很好:)是否有这样一种不连贯的方式构建这些字符串的原因?您希望打印输出中的特定缩进级别是否存在问题? – roganjosh

+0

耶基本上我试图写一个小脚本,输出可以粘贴到F5负载平衡器的代码。有可能是F5的API,但我还没有得到那种先进的! :)无论如何,它有一个特定的语法,它是期望的,这是我试图产生的输出。 –

回答

0

删除嵌套for -loop,只是包括在所述外for -loop两个打印语句,与索引:{1}插入port数:

for i in range(0, len(ports)): 
    print("ltm pool "+serv_name_u+"_{0}_pool {{ \n members {{" 
      .format(ports[i])) 
    # for i in range(0, len(nodes_u), 2): 
    print("  {0}:{1} {{ \n   address {2} \n  }}" 
      .format(nodes_u[i], ports[i], nodes_u[i+1])) 

输出:

List of nodes: 
ltm node SERVER1 { 
    address 10.0.0.1 
    } 
ltm node SERVER2 { 
    address 10.0.0.2 
    } 
ltm pool TESTING_443_pool { 
    members { 
     SERVER1:443 { 
      address 10.0.0.1 
     } 
ltm pool TESTING_80_pool { 
    members { 
     10.0.0.1:80 { 
      address SERVER2 
     } 

尝试#2: 使用不同的增量器名称(ij)在嵌套for -loops两个名单区分可以得到需要的结果:

for i in range(0, len(ports)): 
    print("ltm pool "+serv_name_u+"_{0}_pool {{ \n members {{" 
      .format(ports[i])) 
    for j in range(0, len(nodes_u), 2): 
     print("  {0}:{1} {{ \n   address {2} \n  }}" 
       .format(nodes_u[j], ports[i], nodes_u[j+1])) 

输出:

ltm pool TESTING_443_pool { 
    members { 
     SERVER1:443 { 
      address 10.0.0.1 
     } 
     SERVER2:443 { 
      address 10.0.0.2 
     } 
ltm pool TESTING_80_pool { 
    members { 
     SERVER1:80 { 
      address 10.0.0.1 
     } 
     SERVER2:80 { 
      address 10.0.0.2 
     } 

作为一种更好的方法来捕捉输入或生成输出,可以考虑使用输入的数据结构不同,如dictionarykeysnameportvalues分别为values

+0

几乎但不完全!我尝试过,得到了和你一样的输出,每个池都应该包含两台服务器作为成员,同样,如果仔细查看TESTING_80_pool,而不是打印已打印IP的服务器的名称,然后打印它的地址服务器的名称。我相信这是与步长2. –

+0

啊,是的,我的错误,我用你的第二个输出作为我的目标输出,而不是你的第一个输出的例子。感谢您指出了这一点! :)我会尽力纠正它。 – davedwards

+0

@Charles Crosland我认为你是对的,这个问题看起来与你的建议类似,所以我给了它另一个镜头。 – davedwards