In this example, the instance cannot be placed without
violating exclusion tags. As those are, however, soft
errors, adding --ignore-soft-errors, the placement is
possible.

Signed-off-by: Klaus Aehlig <aeh...@google.com>
---
 Makefile.am                                 |   1 +
 test/data/htools/hail-alloc-plain-tags.json | 271 ++++++++++++++++++++++++++++
 test/hs/shelltests/htools-hail.test         |   9 +
 3 files changed, 281 insertions(+)
 create mode 100644 test/data/htools/hail-alloc-plain-tags.json

diff --git a/Makefile.am b/Makefile.am
index fa915e5..f830754 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1545,6 +1545,7 @@ TEST_FILES = \
        test/data/htools/hail-alloc-invalid-network.json \
        test/data/htools/hail-alloc-invalid-twodisks.json \
        test/data/htools/hail-alloc-restricted-network.json \
+       test/data/htools/hail-alloc-plain-tags.json \
        test/data/htools/hail-alloc-spindles.json \
        test/data/htools/hail-alloc-twodisks.json \
        test/data/htools/hail-change-group.json \
diff --git a/test/data/htools/hail-alloc-plain-tags.json 
b/test/data/htools/hail-alloc-plain-tags.json
new file mode 100644
index 0000000..57ae474
--- /dev/null
+++ b/test/data/htools/hail-alloc-plain-tags.json
@@ -0,0 +1,271 @@
+{
+  "cluster_tags": [
+    "htools:iextags:service"
+  ],
+  "instances": {
+    "instance-1": {
+      "admin_state": "up",
+      "admin_state_source": "admin",
+      "disk_space_total": 256,
+      "disk_template": "drbd",
+      "disks": [
+        {
+          "mode": "rw",
+          "size": 128,
+          "spindles": 1
+        }
+      ],
+      "hypervisor": "xen-pvm",
+      "memory": 128,
+      "nics": [
+        {
+          "bridge": "xen-br0",
+          "ip": null,
+          "link": "xen-br0",
+          "mac": "aa:00:00:15:92:6f",
+          "mode": "bridged"
+        }
+      ],
+      "nodes": [
+        "node1",
+        "node2"
+      ],
+      "os": "debian-image",
+      "spindle_use": 1,
+      "tags": [
+        "service:foo"
+      ],
+      "vcpus": 1
+    },
+    "instance-2": {
+      "admin_state": "up",
+      "admin_state_source": "admin",
+      "disk_space_total": 256,
+      "disk_template": "drbd",
+      "disks": [
+        {
+          "mode": "rw",
+          "size": 128,
+          "spindles": 1
+        }
+      ],
+      "hypervisor": "xen-pvm",
+      "memory": 128,
+      "nics": [
+        {
+          "bridge": "xen-br0",
+          "ip": null,
+          "link": "xen-br0",
+          "mac": "aa:00:00:15:92:6f",
+          "mode": "bridged"
+        }
+      ],
+      "nodes": [
+        "node2",
+        "node3"
+      ],
+      "os": "debian-image",
+      "spindle_use": 1,
+      "tags": [
+        "service:foo"
+      ],
+      "vcpus": 1
+    },
+    "instance-3": {
+      "admin_state": "up",
+      "admin_state_source": "admin",
+      "disk_space_total": 256,
+      "disk_template": "drbd",
+      "disks": [
+        {
+          "mode": "rw",
+          "size": 128,
+          "spindles": 1
+        }
+      ],
+      "hypervisor": "xen-pvm",
+      "memory": 128,
+      "nics": [
+        {
+          "bridge": "xen-br0",
+          "ip": null,
+          "link": "xen-br0",
+          "mac": "aa:00:00:15:92:6f",
+          "mode": "bridged"
+        }
+      ],
+      "nodes": [
+        "node3",
+        "node1"
+      ],
+      "os": "debian-image",
+      "spindle_use": 1,
+      "tags": [
+        "service:foo"
+      ],
+      "vcpus": 1
+    }
+  },
+  "nodegroups": {
+    "uuid-group-1": {
+      "alloc_policy": "preferred",
+      "ipolicy": {
+        "disk-templates": [
+          "sharedfile",
+          "diskless",
+          "plain",
+          "blockdev",
+          "drbd",
+          "file",
+          "rbd"
+        ],
+        "minmax": [
+          {
+            "max": {
+              "cpu-count": 8,
+              "disk-count": 16,
+              "disk-size": 1048576,
+              "memory-size": 32768,
+              "nic-count": 8,
+              "spindle-use": 8
+            },
+            "min": {
+              "cpu-count": 1,
+              "disk-count": 1,
+              "disk-size": 128,
+              "memory-size": 128,
+              "nic-count": 1,
+              "spindle-use": 1
+            }
+          }
+        ],
+        "spindle-ratio": 32.0,
+        "std": {
+          "cpu-count": 1,
+          "disk-count": 1,
+          "disk-size": 1024,
+          "memory-size": 128,
+          "nic-count": 1,
+          "spindle-use": 1
+        },
+        "vcpu-ratio": 4.0
+      },
+      "name": "default",
+      "networks": [],
+      "tags": []
+    }
+  },
+  "nodes": {
+    "node1": {
+      "drained": false,
+      "free_disk": 1377024,
+      "free_memory": 32635,
+      "free_spindles": 12,
+      "group": "uuid-group-1",
+      "i_pri_memory": 0,
+      "i_pri_up_memory": 0,
+      "master_candidate": true,
+      "master_capable": true,
+      "ndparams": {
+        "exclusive_storage": false,
+        "oob_program": null,
+        "spindle_count": 1
+      },
+      "offline": false,
+      "primary_ip": "192.168.1.1",
+      "reserved_cpus": 0,
+      "reserved_memory": 0,
+      "secondary_ip": "192.168.2.1",
+      "tags": [],
+      "total_cpus": 4,
+      "total_disk": 1377280,
+      "total_memory": 32763,
+      "total_spindles": 12,
+      "vm_capable": true
+    },
+    "node2": {
+      "drained": false,
+      "free_disk": 1377024,
+      "free_memory": 32635,
+      "free_spindles": 12,
+      "group": "uuid-group-1",
+      "i_pri_memory": 0,
+      "i_pri_up_memory": 0,
+      "master_candidate": true,
+      "master_capable": true,
+      "ndparams": {
+        "exclusive_storage": false,
+        "oob_program": null,
+        "spindle_count": 1
+      },
+      "offline": false,
+      "primary_ip": "192.168.1.2",
+      "reserved_cpus": 0,
+      "reserved_memory": 0,
+      "secondary_ip": "192.168.2.2",
+      "tags": [],
+      "total_cpus": 4,
+      "total_disk": 1377280,
+      "total_memory": 32763,
+      "total_spindles": 12,
+      "vm_capable": true
+    },
+    "node3": {
+      "drained": false,
+      "free_disk": 1377024,
+      "free_memory": 32635,
+      "free_spindles": 12,
+      "group": "uuid-group-1",
+      "i_pri_memory": 0,
+      "i_pri_up_memory": 0,
+      "master_candidate": true,
+      "master_capable": true,
+      "ndparams": {
+        "exclusive_storage": false,
+        "oob_program": null,
+        "spindle_count": 1
+      },
+      "offline": false,
+      "primary_ip": "192.168.1.3",
+      "reserved_cpus": 0,
+      "reserved_memory": 0,
+      "secondary_ip": "192.168.2.3",
+      "tags": [],
+      "total_cpus": 4,
+      "total_disk": 1377280,
+      "total_memory": 32763,
+      "total_spindles": 12,
+      "vm_capable": true
+    }
+  },
+  "request": {
+    "disk_space_total": 1024,
+    "disk_template": "plain",
+    "disks": [
+      {
+        "mode": "rw",
+        "size": 1024,
+        "spindles": 1
+      }
+    ],
+    "hypervisor": "xen-pvm",
+    "memory": 1024,
+    "name": "instance-new",
+    "nics": [
+      {
+        "bridge": null,
+        "ip": null,
+        "mac": "00:11:22:33:44:55"
+      }
+    ],
+    "os": "instance-debootstrap",
+    "required_nodes": 1,
+    "spindle_use": 1,
+    "tags": [
+      "service:foo",
+      "service:bar"
+    ],
+    "type": "allocate",
+    "vcpus": 1
+  }
+}
diff --git a/test/hs/shelltests/htools-hail.test 
b/test/hs/shelltests/htools-hail.test
index 44df47a..be035c4 100644
--- a/test/hs/shelltests/htools-hail.test
+++ b/test/hs/shelltests/htools-hail.test
@@ -162,3 +162,12 @@ cat $TESTDATA_DIR/hail-alloc-invalid-network.json | grep 
-v -e '"network":"uuid-
 ./test/hs/hail $T/hail-alloc-spindles.json.excl-stor
 >>> /"success":true,"info":"Request successful: Selected group: 
 >>> group1,.*FailSpindles: 2",.*"result":\["node1"\]/
 >>>= 0
+
+# Check that --ignore-soft-errors works and ignores tag errors
+./test/hs/hail $TESTDATA_DIR/hail-alloc-plain-tags.json
+>>> /"success":false,.*FailTags: 3/
+>>>= 0
+
+./test/hs/hail --ignore-soft-errors $TESTDATA_DIR/hail-alloc-plain-tags.json
+>>> /"success":true/
+>>>= 0
-- 
2.2.0.rc0.207.ga3a616c

Reply via email to