ื”ื•ืกืคืช ืฆื•ืžืช ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ Skydive ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

Skydive ื”ื•ื ืžื ืชื— ื˜ื•ืคื•ืœื•ื’ื™ื™ืช ืจืฉืช ื•ืคืจื•ื˜ื•ืงื•ืœ ืงื•ื“ ืคืชื•ื— ื‘ื–ืžืŸ ืืžืช. ืžื˜ืจืชื• ื”ื™ื ืœืกืคืง ื“ืจืš ืžืงื™ืคื” ืœื”ื‘ื™ืŸ ืžื” ืงื•ืจื” ื‘ืชืฉืชื™ืช ืจืฉืช.

ื›ื“ื™ ืœืขื ื™ื™ืŸ ืื•ืชืš, ืื ื™ ืืชืŸ ืœืš ื›ืžื” ืฆื™ืœื•ืžื™ ืžืกืš ืขืœ Skydive. ืœืžื˜ื” ื™ื”ื™ื” ืคื•ืกื˜ ืขืœ ื”ื™ื›ืจื•ืช ืขื Skydive.

ื”ื•ืกืคืช ืฆื•ืžืช ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ Skydive ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

ื”ื•ืกืคืช ืฆื•ืžืช ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ Skydive ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

ื”ื•ื“ืขื” "ืžื‘ื•ื ืœ-skydive.networkยป ืขืœ Habrรฉ.

Skydive ืžืฆื™ื’ ืืช ื˜ื•ืคื•ืœื•ื’ื™ื™ืช ื”ืจืฉืช ืขืœ ื™ื“ื™ ืงื‘ืœืช ืื™ืจื•ืขื™ ืจืฉืช ืžืกื•ื›ื ื™ Skydive. ื”ืื ืื™ ืคืขื ืชื”ื™ืชื ื›ื™ืฆื“ ืœื”ื•ืกื™ืฃ ืื• ืœื”ืฆื™ื’ ื‘ืชืจืฉื™ื ื˜ื•ืคื•ืœื•ื’ื™ื” ืจื›ื™ื‘ื™ ืจืฉืช ืฉื ืžืฆืื™ื ืžื—ื•ืฅ ืœืจืฉืช ืกื•ื›ื ื™ Skydive ืื• ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืื™ื ื ืจืฉืช ื›ื’ื•ืŸ TOR, ืื—ืกื•ืŸ ื ืชื•ื ื™ื ื•ื›ื•'. ืื™ืŸ ืฆื•ืจืš ืœื“ืื•ื’ ื‘ืงืฉืจ ืœื–ื” ื™ื•ืชืจ ื”ื•ื“ื•ืช ืœ-Node rule API.

ืžืื– ื’ืจืกื” 0.20, Skydive ืžืกืคืงืช ืžืžืฉืง API ืฉืœ ืฆื•ืžืช ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœื™ืฆื•ืจ ืฆืžืชื™ื ื•ืงืฆื•ื•ืช ื—ื“ืฉื™ื ื•ืœืขื“ื›ืŸ ืืช ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆืžืชื™ื ืงื™ื™ืžื™ื. ื”-API ืฉืœ ื›ืœืœ ื”ืฆื•ืžืช ืžื—ื•ืœืง ืœืฉื ื™ ืžืžืฉืงื™ API: ื”-API ืฉืœ ื›ืœืœ ื”ืฆื•ืžืช ื•ืžืžืฉืง ื”-Edge rule API. ื”-API ืฉืœ ื›ืœืœ ื”ืฆื•ืžืช ืžืฉืžืฉ ืœื™ืฆื™ืจืช ืฆื•ืžืช ื—ื“ืฉ ื•ืœืขื“ื›ื•ืŸ ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆื•ืžืช ืงื™ื™ื. ื”-Edge rule 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": ""
}

ืขื“ื›ืŸ ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆืžืชื™ื Skydive

ื›ื“ื™ ืœืขื“ื›ืŸ ืืช ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆื•ืžืช ืงื™ื™ื, ืขืœื™ืš ืœืกืคืง ืฉืื™ืœืชืช ื’ืจืžืœื™ืŸ ื›ื“ื™ ืœื‘ื—ื•ืจ ืืช ื”ืฆืžืชื™ื ืฉื‘ื”ื ื‘ืจืฆื•ื ืš ืœืขื“ื›ืŸ ืืช ื”ืžื˜ื ื ืชื•ื ื™ื. ืœืคื™ ื‘ืงืฉืชืš, ืชื•ื›ืœ ืœืขื“ื›ืŸ ืืช ื”ืžื˜ื ื ืชื•ื ื™ื ืฉืœ ืฆืžืชื™ื ืื—ื“ ืื• ื™ื•ืชืจ ื‘ืืžืฆืขื•ืช ื›ืœืœ ืฆื•ืžืช ื™ื—ื™ื“.

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')"
}

ื™ืฆื™ืจืช ืื“ื’' ืฆื ื™ื—ื” ื—ื•ืคืฉื™ืช

ื›ื“ื™ ืœื™ืฆื•ืจ ืงืฆื”, ืขืœื™ืš ืœืฆื™ื™ืŸ ืืช ืฆืžืชื™ ื”ืžืงื•ืจ ื•ื”ื™ืขื“ ื•ืืช ืกื•ื’ ื”ืงื™ืฉื•ืจ ืฉืœ ื”ืงืฆื”; ื›ื“ื™ ืœื™ืฆื•ืจ ืฆื•ืžืช ืฆืืฆื, ืขืจืš ืกื•ื’ ื”ืงื™ืฉื•ืจ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื‘ืขืœื•ืช; ื‘ืื•ืคืŸ ื“ื•ืžื”, ื›ื“ื™ ืœื™ืฆื•ืจ ืกื•ื’ ืงื™ืฉื•ืจ layer2, ืขืจืš ืกื•ื’ ื”ืงื™ืฉื•ืจ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื›ื‘ื” 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"

ืœืื—ืจ ื”ืคืงื•ื“ื•ืช ืœืขื™ืœ, ื›ืขืช ืชื•ื›ืœ ืœืจืื•ืช ืืช ื”ืžื›ืฉื™ืจ ื’ืœื•ื™ ื‘ืชืจืฉื™ื ื”ื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ ืฆื ื™ื—ื” ื—ื•ืคืฉื™ืช ืขื ื”ืžื˜ื ื ืชื•ื ื™ื ื”ื ืชื•ื ื™ื ื›ืคื™ ืฉืžื•ืฆื’ ื‘ืชืžื•ื ื” ืœืžื˜ื”.

ื”ื•ืกืคืช ืฆื•ืžืช ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ Skydive ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

ืžืงืจื” ืฉื™ืžื•ืฉ ืฉื ื™

ื‘ืžืงืจื” ื–ื” ื ืจืื” ื›ื™ืฆื“ ืœื”ื•ืกื™ืฃ ื”ืชืงืŸ ืจืฉืช ืฉืื™ื ื• ื—ืœืง ืžืจืฉืช ืฆื ื™ื—ื” ื—ื•ืคืฉื™ืช. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ื“ื•ื’ืžื” ื”ื–ื•. ื™ืฉ ืœื ื• ืฉื ื™ ืกื•ื›ื ื™ ืฆื ื™ื—ื” ื—ื•ืคืฉื™ืช ื”ืคื•ืขืœื™ื ืขืœ ืฉื ื™ ืžืืจื—ื™ื ืฉื•ื ื™ื, ื›ื“ื™ ืœื—ื‘ืจ ืืช ืฉื ื™ ื”ืžืืจื—ื™ื ื”ืืœื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืžืชื’ TOR. ืœืžืจื•ืช ืฉืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉื™ื’ ื–ืืช ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ืฆืžืชื™ื ื•ืงื™ืฉื•ืจื™ื ืฉืœ ืžื‘ื ื” ื‘ืงื•ื‘ืฅ ืชืฆื•ืจื”, ื‘ื•ืื• ื ืจืื” ื›ื™ืฆื“ ื ื•ื›ืœ ืœืขืฉื•ืช ืืช ืื•ืชื• ื”ื“ื‘ืจ ื‘ืืžืฆืขื•ืช ืžืžืฉืง ื”-API ืฉืœ Topology Rules.

ืœืœื ืžืชื’ TOR, ืฉื ื™ ื”ืกื•ื›ื ื™ื ื™ื•ืคื™ืขื• ื›ืฉื ื™ ืฆืžืชื™ื ืฉื•ื ื™ื ืœืœื ื›ืœ ืงื™ืฉื•ืจ, ื›ืคื™ ืฉืžื•ืฆื’ ื‘ืชืžื•ื ื” ืœืžื˜ื”.

ื”ื•ืกืคืช ืฆื•ืžืช ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ Skydive ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

ื›ืขืช ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื•ืช ื”ื‘ืื•ืช ืฉืœ Rules Host ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ืžืชื’ ื”-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 ื•ื”ื™ืฆื™ืื•ืช ื ื•ืฆืจื• ื•ื ื•ืกืคื• ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ ืฆื ื™ื—ื” ื—ื•ืคืฉื™ืช, ื•ื”ื˜ื•ืคื•ืœื•ื’ื™ื” ืชื™ืจืื” ื›ืขืช ื›ืžื• ื‘ืชืžื•ื ื” ืœืžื˜ื”.

ื”ื•ืกืคืช ืฆื•ืžืช ืœื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœ Skydive ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

ื›ืขืช ื”ืคืขืœ ืืช ืคืงื•ื“ื•ืช ื”-Edge Rule ื”ื‘ืื•ืช ื›ื“ื™ ืœื™ืฆื•ืจ ื—ื™ื‘ื•ืจ ื‘ื™ืŸ ืžืชื’ 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 ื‘ืื•ืคืŸ ื™ื“ื ื™ ื“ืจืš ืœืงื•ื— Skydive

ื›ืขืช ืฉื ื™ ื”ืžืืจื—ื™ื/ื”ืกื•ื›ื ื™ื ืžื—ื•ื‘ืจื™ื ื›ื”ืœื›ื” ื•ืชื•ื›ืœื• ืœื‘ื“ื•ืง ืืช ื”ื—ื™ื‘ื•ืจ ืื• ืœื™ืฆื•ืจ ืœื›ื™ื“ืช ื ืชื™ื‘ ื”ืงืฆืจ ื‘ื™ื•ืชืจ ื‘ื™ืŸ ืฉื ื™ ื”ืžืืจื—ื™ื.

ื .ื‘ ืงื™ืฉื•ืจ ืœ ืคื•ืกื˜ ืžืงื•ืจื™

ืื ื—ื ื• ืžื—ืคืฉื™ื ืื ืฉื™ื ืฉื™ื•ื›ืœื• ืœื›ืชื•ื‘ ืคื•ืกื˜ื™ื ืขืœ ืชื›ื•ื ื•ืช ืื—ืจื•ืช ืฉืœ Skydive.
ืฆ'ืื˜ ื‘ื˜ืœื’ืจื ื“ืจืš skydive.network.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”