рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдПрдХ рдореБрдХреНрдд рд╕реНрд░реЛрдд, рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреА рдЖрдгрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЖрд╣реЗ. рдиреЗрдЯрд╡рд░реНрдХ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдордзреНрдпреЗ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╕рдорд╛рд╡реЗрд╢рдХ рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рд╣реЗ рддреНрдпрд╛рдЪреЗ рдЙрджреНрджрд┐рд╖реНрдЯ рдЖрд╣реЗ.

рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рд╛рд░рд╕реНрдпрд╛рд╕рд╛рдареА, рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣рдмрджреНрджрд▓ рдХрд╛рд╣реА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдИрди. рдЦрд╛рд▓реА рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣рдЪреНрдпрд╛ рдкрд░рд┐рдЪрдпрд╛рд╡рд░ рдПрдХ рдкреЛрд╕реНрдЯ рдЕрд╕реЗрд▓.

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рдкреЛрд╕реНрдЯ "skydive.network рдЪрд╛ рдкрд░рд┐рдЪрдп┬╗ Habr├й рд╡рд░.

Skydive рдПрдЬрдВрдЯреНрд╕рдХрдбреВрди рдиреЗрдЯрд╡рд░реНрдХ рдЗрд╡реНрд╣реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрди рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ. рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдПрдЬрдВрдЯ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдЕрд╕рд▓реЗрд▓реЗ рдЯреЛрдкреЛрд▓реЙрдЬреА рдбрд╛рдпрдЧреНрд░рд╛рдо рдиреЗрдЯрд╡рд░реНрдХ рдШрдЯрдХ рдХрд┐рдВрд╡рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдирд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╕реНрддреВ рдЬрд╕реЗ рдХреА TOR, рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЗ. рдордзреНрдпреЗ рдХрд╕реЗ рдЬреЛрдбрд╛рдпрдЪреЗ рдХрд┐рдВрд╡рд╛ рдХрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдЪрд╛ рддреБрдореНрд╣реА рдХрдзреА рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдЖрддрд╛ рдпрд╛рдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдиреЛрдб рдирд┐рдпрдо API рдзрдиреНрдпрд╡рд╛рдж.

рдЖрд╡реГрддреНрддреА 0.20 рдкрд╛рд╕реВрди, Skydive рдиреЛрдб рдирд┐рдпрдо API рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдирд╡реАрди рдиреЛрдб рдЖрдгрд┐ рдХрд┐рдирд╛рд░реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд┐рджреНрдпрдорд╛рди рдиреЛрдбреНрд╕рдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдиреЛрдб рдирд┐рдпрдо API рджреЛрди API рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реЗрд▓рд╛ рдЖрд╣реЗ: рдиреЛрдб рдирд┐рдпрдо API рдЖрдгрд┐ рдХрд┐рдирд╛рд░рд╛ рдирд┐рдпрдо API. рдиреЛрдб рдирд┐рдпрдо API рдирд╡реАрди рдиреЛрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд┐рджреНрдпрдорд╛рди рдиреЛрдбрдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рдПрдЬ рдирд┐рдпрдо API рджреЛрди рдиреЛрдбреНрд╕рдордзреНрдпреЗ рд╕реАрдорд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ, рдЙрджрд╛. рджреЛрди рдиреЛрдбреНрд╕ рдЬреЛрдбрддреЗ.

рдпрд╛ рдмреНрд▓реЙрдЧрдордзреНрдпреЗ рдЖрдкрдг рджреЛрди рд╡рд╛рдкрд░ рдкреНрд░рдХрд░рдгреЗ рдкрд╛рд╣рдгрд╛рд░ рдЖрд╣реЛрдд, рддреНрдпрд╛рдкреИрдХреА рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдШрдЯрдХ рдЖрд╣реЗ рдЬреЛ рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ рднрд╛рдЧ рдирд╛рд╣реА. рджреБрд╕рд░рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рдиреЗрдЯрд╡рд░реНрдХ рдирд╕рд▓реЗрд▓рд╛ рдШрдЯрдХ. рддреНрдпрд╛рдЖрдзреА, рдЖрдореНрд╣реА рдЯреЛрдкреЛрд▓реЙрдЬреА рдирд┐рдпрдо API рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд╣реА рдореВрд▓рднреВрдд рдорд╛рд░реНрдЧ рдкрд╛рд╣реВ.

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдиреЛрдб рддрдпрд╛рд░ рдХрд░рдгреЗ

рдиреЛрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдиреЛрдб рдирд╛рд╡ рдЖрдгрд┐ рд╡реИрдз рдиреЛрдб рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреБрдореНрд╣реА рдХрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реНрдпрд╛рдп рджреЗрдЦреАрд▓ рджреЗрдК рд╢рдХрддрд╛.

skydive client node-rule create --action="create" --node-name="node1" --node-type="fabric" --name="node rule1"
{
  "UUID": "ea21c30f-cfaa-4f2d-693d-95159acb71ed",
  "Name": "node rule1",
  "Description": "",
  "Metadata": {
    "Name": "node1",
    "Type": "fabric"
  },
  "Action": "create",
  "Query": ""
}

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдиреЛрдбреНрд╕ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рд╛

рд╡рд┐рджреНрдпрдорд╛рди рдиреЛрдбрдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдЬреНрдпрд╛ рдиреЛрдбреНрд╕рд╡рд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддрд╛ рддреЗ рдирд┐рд╡рдбрдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА gremlin рдХреНрд╡реЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреБрдордЪреНрдпрд╛ рд╡рд┐рдирдВрддреАрдиреБрд╕рд╛рд░, рддреБрдореНрд╣реА рдПрдХрд▓ рдиреЛрдб рдирд┐рдпрдо рд╡рд╛рдкрд░реВрди рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдиреЛрдбреНрд╕рдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реВ рд╢рдХрддрд╛.

skydive client node-rule create --action="update" --name="update rule" --query="G.V().Has('Name', 'node1')" --metadata="key1=val1, key2=val2"
{
  "UUID": "3e6c0e15-a863-4583-6345-715053ac47ce",
  "Name": "update rule",
  "Description": "",
  "Metadata": {
    "key1": "val1",
    "key2": "val2"
  },
  "Action": "update",
  "Query": "G.V().Has('Name', 'node1')"
}

рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдПрдЬ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдПрдЬ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рд╕реНрддреНрд░реЛрдд рдЖрдгрд┐ рдЧрдВрддрд╡реНрдп рдиреЛрдбреНрд╕ рдЖрдгрд┐ рдХрд╛рдард╛рдЪрд╛ рд▓рд┐рдВрдХ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ; рдЪрд╛рдЗрд▓реНрдб рдиреЛрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд▓рд┐рдВрдХ рдкреНрд░рдХрд╛рд░ рдореВрд▓реНрдп рдорд╛рд▓рдХреА рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ; рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ, рд▓рд┐рдВрдХ рдкреНрд░рдХрд╛рд░ рд╕реНрддрд░2 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд▓рд┐рдВрдХ рдкреНрд░рдХрд╛рд░ рдореВрд▓реНрдп рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╕реНрддрд░2. рддреБрдореНрд╣реА рджреЛрди рдиреЛрдбреНрд╕рдордзреНрдпреЗ рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд▓рд┐рдВрдХ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рд▓рд┐рдВрдХрдЪрд╛ рдкреНрд░рдХрд╛рд░ рд╡реЗрдЧрд│рд╛ рдЕрд╕рд╛рд╡рд╛.

skydive client edge-rule create --name="edge" --src="G.v().has('TID', '2f6f9b99-82ef-5507-76b6-cbab28bda9cb')" --dst="G.V().Has('TID', 'd6ec6e2f-362e-51e5-4bb5-6ade37c2ca5c')" --relationtype="both"
{
  "UUID": "50fec124-c6d0-40c7-42a3-2ed8d5fbd410",
  "Name": "edge",
  "Description": "",
  "Src": "G.v().has('TID', '2f6f9b99-82ef-5507-76b6-cbab28bda9cb')",
  "Dst": "G.V().Has('TID', 'd6ec6e2f-362e-51e5-4bb5-6ade37c2ca5c')",
  "Metadata": {
    "RelationType": "both"
  }
}

рдкреНрд░рдердо рд╡рд╛рдкрд░ рдХреЗрд╕

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдореНрд╣реА рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЗрдЯрд╡рд░реНрдХ рдирд╕рд▓реЗрд▓реЗ рдЙрдкрдХрд░рдг рдХрд╕реЗ рджрд╛рдЦрд╡рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ. рдЪрд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛ рдХреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕ рдЖрд╣реЗ рдЬреЗ рдХрд╛рд╣реА рдЙрдкрдпреБрдХреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛рд╕рд╣ рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреА рдЖрдХреГрддреАрдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдПрдХ рдиреЛрдб рдирд┐рдпрдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рддрдпрд╛рд░ рдХрд░рд╛ рдХрдорд╛рдВрдбрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбреВ рд╢рдХрддреЛ рдХрд┐рдВрд╡рд╛ рдирдВрддрд░ рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдЕрдкрдбреЗрдЯ рдиреЛрдб рдирд┐рдпрдо рдЖрджреЗрд╢ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ.

рдЯреЛрдкреЛрд▓реЙрдЬреА рдбрд╛рдпрдЧреНрд░рд╛рдордордзреНрдпреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рд╣реЛрд╕реНрдЯ рдирд┐рдпрдо рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛.

skydive client node-rule create --action="create" --node-name="sda" --node-type="persistentvolume" --metadata="DEVNAME=/dev/sda,DEVTYPE=disk,ID.MODEL=SD_MMC, ID.MODEL ID=0316, ID.PATH TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0, ID.SERIAL SHORT=20120501030900000, ID.VENDOR=Generic-, ID.VENDOR ID=0bda, MAJOR=8, MINOR=0, SUBSYSTEM=block, USEC_INITIALIZED=104393719727"

рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдиреЛрдб рд╣реЛрд╕реНрдЯ рдиреЛрдбрд╢реА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдПрдЬ рдирд┐рдпрдорд╛рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛.

skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"

рд╡рд░реАрд▓ рдЖрджреЗрд╢рд╛рдВрдирдВрддрд░, рддреБрдореНрд╣реА рдЖрддрд╛ рдЦрд╛рд▓реАрд▓ рдЗрдореЗрдЬрдордзреНрдпреЗ рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛рд╕рд╣ рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреА рдЖрдХреГрддреАрдордзреНрдпреЗ рджреГрд╢реНрдпрдорд╛рди рдЕрд╕рд▓реЗрд▓реЗ рдЙрдкрдХрд░рдг рдкрд╛рд╣реВ рд╢рдХрддрд╛.

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рджреБрд╕рд░рд╛ рд╡рд╛рдкрд░ рдХреЗрд╕

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдЖрдореНрд╣реА рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ рднрд╛рдЧ рдирд╕рд▓реЗрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдХрд╕реЗ рдЬреЛрдбрд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ. рд╣реЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ. рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдПрдЬрдВрдЯ рджреЛрди рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╣реЛрд╕реНрдЯрд╡рд░ рдЪрд╛рд▓рдд рдЖрд╣реЗрдд, рдпрд╛ рджреЛрди рд╣реЛрд╕реНрдЯреНрд╕рдирд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ TOR рд╕реНрд╡рд┐рдЪрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдЬрд░реА рдЖрдкрдг рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдИрд▓рдордзреНрдпреЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдиреЛрдбреНрд╕ рдЖрдгрд┐ рд▓рд┐рдВрдХреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрди рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░реВ рд╢рдХрддреЛ, рддрд░реАрд╣реА рдЖрдкрдг рдЯреЛрдкреЛрд▓реЙрдЬреА рдирд┐рдпрдо API рд╡рд╛рдкрд░реВрди рддреЗ рдХрд╕реЗ рдХрд░реВ рд╢рдХрддреЛ рддреЗ рдкрд╛рд╣реВ рдпрд╛.

TOR рд╕реНрд╡рд┐рдЪрд╢рд┐рд╡рд╛рдп, рдЦрд╛рд▓реАрд▓ рдЪрд┐рддреНрд░рд╛рдд рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рджреЛрди рдПрдЬрдВрдЯ рдХреЛрдгрддреНрдпрд╛рд╣реА рд▓рд┐рдВрдХрд╢рд┐рд╡рд╛рдп рджреЛрди рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдореНрд╣рдгреВрди рджрд┐рд╕рддреАрд▓.

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рдЖрддрд╛ TOR рд╕реНрд╡рд┐рдЪ рдЖрдгрд┐ рдкреЛрд░реНрдЯреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рд╣реЛрд╕реНрдЯ рдирд┐рдпрдо рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛.

skydive client node-rule create --node-name="TOR" --node-type="fabric" --action="create"
skydive client node-rule create --node-name="port1" --node-type="port" --action="create"
skydive client node-rule create --node-name="port2" --node-type="port" --action="create"

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, TOR рд╕реНрд╡рд┐рдЪ рдЖрдгрд┐ рдкреЛрд░реНрдЯ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдЯреЛрдкреЛрд▓реЙрдЬреА рдЖрддрд╛ рдЦрд╛рд▓реАрд▓ рдкреНрд░рддрд┐рдореЗрдкреНрд░рдорд╛рдгреЗ рджрд┐рд╕реЗрд▓.

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рдЖрддрд╛ TOR рд╕реНрд╡рд┐рдЪ, рдкреЛрд░реНрдЯ 1 рдЖрдгрд┐ рд╣реЛрд╕реНрдЯ 1 рдЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рдХрдиреЗрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рдПрдЬ рдирд┐рдпрдо рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛.

skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port1')" --relationtype="ownership"
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port1')" --relationtype="layer2"
skydive client edge-rule create --src="G.V().Has('TID', '372c254d-bac9-50c2-4ca9-86dcc6ce8a57')" --dst="G.V().Has('Name', 'port1')" --relationtype="layer2"

TOR рд╕реНрд╡рд┐рдЪ рдкреЛрд░реНрдЯ 2 рдЖрдгрд┐ рд╣реЛрд╕реНрдЯ 2 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рджрд░рдореНрдпрд╛рди рд▓рд┐рдВрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛

skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port2')" --relationtype="layer2"
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port2')" --relationtype="ownership"
skydive client edge-rule create --src="G.V().Has('TID', '50037073-7862-5234-4996-e58cc067c69c')" --dst="G.V().Has('Name', 'port2')" --relationtype="layer2"

рдУрдирд░рд╢рд┐рдк рдЖрдгрд┐ рд▓реЗрдпрд░2 рдЕрд╕реЛрд╕рд┐рдПрд╢рди рдЖрддрд╛ TOR рд╕реНрд╡рд┐рдЪ рдЖрдгрд┐ рдкреЛрд░реНрдЯ, рддрд╕реЗрдЪ рдПрдЬрдВрдЯ рдЖрдгрд┐ рдкреЛрд░реНрдЯ рджрд░рдореНрдпрд╛рди рд▓реЗрдпрд░2 рдЕрд╕реЛрд╕рд┐рдПрд╢рди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рдЖрддрд╛ рдЕрдВрддрд┐рдо рдЯреЛрдкреЛрд▓реЙрдЬреА рдЦрд╛рд▓реАрд▓ рдкреНрд░рддрд┐рдореЗрдкреНрд░рдорд╛рдгреЗ рджрд┐рд╕реЗрд▓.

рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рдХреНрд▓рд╛рдпрдВрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдХрд╛рдпрдбрд╛рдпрд╡реНрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреАрдордзреНрдпреЗ рдиреЛрдб рдЬреЛрдбрдгреЗ

рдЖрддрд╛ рджреЛрди рд╣реЛрд╕реНрдЯ/рдПрдЬрдВрдЯ рдпреЛрдЧреНрдпрд░рд┐рддреАрдиреЗ рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреБрдореНрд╣реА рдХрдиреЗрдХреНрд╢рдирдЪреА рдЪрд╛рдЪрдгреА рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рджреЛрди рд╣реЛрд╕реНрдЯрдордзреАрд▓ рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдорд╛рд░реНрдЧ рдХреЕрдкреНрдЪрд░ рдХрд░реВ рд╢рдХрддрд╛.

рдкреАрдПрд╕ рд▓рд┐рдВрдХ рдореВрд│ рдкреЛрд╕реНрдЯ

рдЖрдореНрд╣реА рдЗрддрд░ рд╕реНрдХрд╛рдпрдбрд╛рдЗрд╡реНрд╣ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдмрджреНрджрд▓ рдкреЛрд╕реНрдЯ рд▓рд┐рд╣реВ рд╢рдХрддреАрд▓ рдЕрд╢рд╛ рд▓реЛрдХрд╛рдВрдирд╛ рд╢реЛрдзрдд рдЖрд╣реЛрдд.
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЧрдкреНрдкрд╛ skydive.network рджреНрд╡рд╛рд░реЗ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛