awx/docs/inventory_refresh.md
2017-05-23 12:58:03 -04:00

95 lines
3.4 KiB
Markdown

# 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 called `kind`. The default of this field will be blank
for normal inventories and set to `smart` for smart inventories.
* `Inventory` model as a new field called `host_filter`. The default of this field will be blank
for normal inventories. When `host_filter` is set AND the inventory `kind` is set to `smart`
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 named `kind` that defaults to empty and
can only be set to `smart`.
* `Inventory` has a new field named `host_filter` to empty and can only be
set to a valid _SmartFilter_ string.
* `Inventory` with a `host_filter` set and a `kind` of `smart` will have
a `hosts` list reflecting the results of searching `/hosts` with the same
smart search that is set in the `host_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"}
]
}
### Background deleition of Inventory
### InventorySource Hosts and Groups read-only