2017-01-19 5 views
0

Я использую режим роя, и я хотел бы получить VirtualIP от службы в конкретной сети: 6yhxlmtq69zaojpy57xdvaeiw Результат должен быть: 10.0.0.3/24Docker инспектировать формат IP извлечь из конкретной сети

[[email protected] vagrant]# docker service inspect tqy1id7zsg9s 
[ 
    { 
     "ID": "tqy1id7zsg9s7rftu8uu51g2l", 
     "Version": { 
      "Index": 72 
     }, 
     "CreatedAt": "2017-01-19T07:56:13.30985464Z", 
     "UpdatedAt": "2017-01-19T07:56:13.312923681Z", 
     "Spec": { 
      "Name": "spark-master", 
      "TaskTemplate": { 
       "ContainerSpec": { 
        "Image": "fsoppelsa/spark-master:[email protected]:7aee2f405b 546584b75bc1ec6ec3bfb5744de52788058c3455a1b43817d6af84", 
        "Labels": { 
         "spark-master": "" 
        }, 
        "Env": [ 
         "SPARK_MASTER_IP=0.0.0.0" 
        ], 
        "Mounts": [ 
         { 
          "Type": "volume", 
          "Source": "spark", 
          "Target": "/data", 
          "VolumeOptions": { 
           "DriverConfig": { 
            "Name": "local" 
           } 
          } 
         } 
        ], 
        "DNSConfig": {} 
       }, 
       "Resources": { 
        "Limits": {}, 
        "Reservations": {} 
       }, 
       "RestartPolicy": { 
        "Condition": "any", 
        "MaxAttempts": 0 
       }, 
       "Placement": { 
        "Constraints": [ 
         "node.labels.type == sparkmaster" 
        ] 
       }, 
       "Networks": [ 
        { 
         "Target": "6yhxlmtq69zaojpy57xdvaeiw" 
        } 
       ], 
       "ForceUpdate": 0 
      }, 
      "Mode": { 
       "Replicated": { 
        "Replicas": 1 
       } 
      }, 
      "UpdateConfig": { 
       "Parallelism": 1, 
       "FailureAction": "pause", 
       "MaxFailureRatio": 0 
      }, 
      "Networks": [ 
       { 
        "Target": "spark" 
       } 
      ], 
      "EndpointSpec": { 
       "Mode": "vip", 
       "Ports": [ 
        { 
         "Protocol": "tcp", 
         "TargetPort": 8080, 
         "PublishedPort": 8080, 
         "PublishMode": "ingress" 
        } 
       ] 
      } 
     }, 
     "Endpoint": { 
      "Spec": { 
       "Mode": "vip", 
       "Ports": [ 
        { 
         "Protocol": "tcp", 
         "TargetPort": 8080, 
         "PublishedPort": 8080, 
         "PublishMode": "ingress" 
        } 
       ] 
      }, 
      "Ports": [ 
       { 
        "Protocol": "tcp", 
        "TargetPort": 8080, 
        "PublishedPort": 8080, 
        "PublishMode": "ingress" 
       } 
      ], 
      "VirtualIPs": [ 
       { 
        "NetworkID": "4w6z3pc3zspunw4n6199594ve", 
        "Addr": "10.255.0.9/16" 
       }, 
       { 
        "NetworkID": "6yhxlmtq69zaojpy57xdvaeiw", 
        "Addr": "10.0.0.3/24" 
       } 
      ] 
     }, 
     "UpdateStatus": { 
      "StartedAt": "0001-01-01T00:00:00Z", 
      "CompletedAt": "0001-01-01T00:00:00Z" 
     } 
    } 
] 

с помощью этой команды я получаю:

docker service inspect spark-master -f {{.Endpoint.VirtualIPs}} 
[{4w6z3pc3zspunw4n6199594ve 10.255.0.9/16} {6yhxlmtq69zaojpy57xdvaeiw 10.0.0.3/24}] 

Как указать правильный формат, чтобы получить VirtualIp сети 6yhxlmtq69zaojpy57xdvaeiw?

+0

увидеть мой ответ на http://stackoverflow.com/questions/30342796/how-to-get-env-variable-when-doing-docker-inspect/30353018#30353018 вы должны быть в состоянии извлечь соответствующая часть – user2915097

+0

Что дает 'docker service inspect spark-master -f {{(index (.Endpoint.VirtualIPs) 0) .4w6z3pc3zspunw4n6199594ve}}' – user2915097

+0

Я неправильно прочитал, лучше попробуйте 'docker service проверить spark-master -f {{index (.Endpoint.VirtualIPs) 1) .6yhxlmtq69zaojpy57xdvaeiw}} ' – user2915097

ответ

0
docker service inspect spark-master -f '{{range $i, $value := .Endpoint.VirtualIPs}} {{if eq $value.NetworkID "6yhxlmtq69zaojpy57xdvaeiw" }}{{$value.Addr}}{{end}}{{end}}' 
+0

немного играл с этим, я мог бы получить еще больше комп lex: '' 'docker service проверить spark-master -f '{{$ net: = (index .Spec.TaskTemplate.Networks 0) .Target}} {{range $ i, $ value: = .Endpoint.VirtualIPs}} {{if eq $ value.NetworkID $ net}} {{$ value.Addr}} {{end}} {{end}} ''' ' – rolele

Смежные вопросы