3.4 KiB
Inventory Refresh Overview
Tower should have an inventory view that is more aligned towards systems management rather than merely maintaining inventory for automation.
Inventory Source Promotion
Starting with Tower 3.2, InventorySource
will be associated directly with an Inventory
.
Fact Searching and Caching
Smart Inventory
Starting in Tower 3.2, Tower will support the ability to define a Smart Inventory. You will define the inventories using the same language we currently support in our Smart Search.
Inventory Changes
-
The
Inventory
model has a new field calledkind
. The default of this field will be blank for normal inventories and set tosmart
for smart inventories. -
Inventory
model as a new field calledhost_filter
. The default of this field will be blank for normal inventories. Whenhost_filter
is set AND the inventorykind
is set tosmart
is the combination that makes a Smart Inventory.
Smart Filter (host__filter)
The SmartFilter
class handles our translation of the smart search string. We store the
filter value in the host_filter
field for an inventory. This value should be expressed
the same way we express our existing smart searches.
host_filter="search=foo"
host_filter="group__search=bar"
host_filter="search=baz and group__search=bang"
host_filter="name=localhost or group__name=local"
Creating a new Smart Inventory for all of our GCE and EC2 groups might look like this:
HTTP POST /api/v2/inventories/
{
"name": "GCE and EC2 Smart Inventory",
"kind": "smart",
"host_filter": "group__search=ec2 and group__search=gce"
...
}
Acceptance Critera
When verifying acceptance we should ensure the following statements are true:
Inventory
has a new field namedkind
that defaults to empty and can only be set tosmart
.Inventory
has a new field namedhost_filter
to empty and can only be set to a valid SmartFilter string.Inventory
with ahost_filter
set and akind
ofsmart
will have ahosts
list reflecting the results of searching/hosts
with the same smart search that is set in thehost_filter
.
API Concerns
There are no breaking or backwards incompatible changes for this feature.
Other Changes
Inventory update all inventory__sources
A new endpoint /api/v2/inventories/:id/update_inventory_sources
has been added. This endpoint
functions in the same way that /api/v2/inventory_source/:id/update
functions for a single
InventorySource
with the exception that it updates all of the inventory sources for the
Inventory
.
HTTP GET /api/v2/inventories/:id/update_inventory_sources
will list all of the inventory
sources and if they will be updated when a POST to the same endpoint is made. The result of
this request will look like this:
{
[
{"inventory_source": 1, "can_update": True},
{"inventory_source": 2, "can_update": False},
]
}
When making a POST to the same endpoint, the response will contain a status as well as the job ID for the update.
POST /api/v2/inventories/:id/update_inventory_sources
{
[
{"inventory_update": 20, "inventory_source": 1, "status": "started"},
{"inventory_update": 21, "inventory_source": 2, "status": "Could not start because `can_update` returned False"}
]
}