Querying IPs in the system
Helix IPLM provides a powerful query language to search for objects in the system. You can use the streamlined Query Builder for simple searches and create your own queries for customized searches. Queries can be run from PiCLI, IPLM Web, or the API. IPLM Web queries are run from the Advanced search page. This section describes example queries used within the Helix IPLM platform in both the PiCLI and IPLM Web interfaces.
Advanced search in IPLM Web
Open Query Builder
The Advanced search page provides a single UI for building custom queries and accessing Saved queries. To access Query Builder, open the Advanced search page using the navigation menu at the top of the screen. You must be an admin to see this menu. For more information, see Admin and user views.
Select search criteria
Start by selecting one or more search criteria from the More... menu. You can customize the searchable fields by changing QUERY_BUILDER_FIELDS
and QUERY_BUILDER_FIELDS_FEATURED
in the piweb.conf file. See IPLM Web configuration for more information.
Refine the search
Each search criteria selection presents its own search sub-menu. For example, selecting IP Author displays a username selection menu.
Selecting IP Created Date displays Start and End date pickers. A single click provides a start date and clicking two dates enters a date range.
For string query and string Property Type fields, there is an additional selector that allows you to choose to include and exclude search terms with the following options:
-
Equals
-
Contains (preselected as default)
-
Starts with
-
Ends with
-
Does not equal
-
Does not contain
-
Does not start with
-
Does not end with
Preview and save the search
Once the search criteria has been selected, click Preview to display the results. The search criteria can be further refined if necessary by adding additional query fields.
To save the query, provide a name and click save. The query will then appear on the left side navigation. The query can be exported to CSV, which can take a few minutes. See Saved queries for more information, including how to share queries and organize them into folders.
Note: By default any query saved this way will not be shared (it will only be available to the user that saved it). Administrators can share useful queries with the entire user base as needed.
Optional: modify the query syntax
For users who want to refine their search to add more advanced search criteria not natively supported in Query Builder, the query syntax can be directly modified in the resulting query string.
Use the three lines menu to display or hide columns of properties defined in property sets. For more information on customizing the view, see Creating column templates.
IP related fields for use in queries
IP
-
attributes (list of attributes)
-
creation_timestamp (integer)
-
creator (user)
-
description (string)
-
dm_type (string)
-
dmtype: see dm_type
-
fqn (string): the FQN of the IP, e.g. chipsets.gpu456
-
hook_post_load (string)
-
hook_post_release (string)
-
hook_post_update (string)
-
hook_pre_release (string)
-
host (string)
-
ipls (list of IPLs)
-
labels (list of labels)
-
lib: see library
-
library (library)
-
lines: see ipls
-
name (string): the name of the IP, e.g. cpu123
-
properties (object with custom properties)
Any other field is checked to see whether it represents a property attached to the IP.
IPL
-
aliases (list of aliases)
-
attributes (list of attributes)
-
creation_timestamp (integer)
-
creator (user)
-
fqn (string): the FQN of the line, e.g. chipsets.cpu123@.TRUNK
-
ip (IP)
-
ipvs (list of IPVs)
-
labels (list of labels)
-
name (string): the name of the line, e.g. TRUNK
IPV
-
aliases (list of aliases): the aliases currently referencing the IPV
-
all_resources (list of IPV resources)
-
attributes (list of attributes)
-
creation_timestamp (integer)
-
creator (user)
-
fqn (string): the FQN of the IPV, e.g. chipsets.gpu456@5.TRUNK
-
ip (IP)
-
ipl (IPL)
-
labels (list of labels)
-
line: see ipl
-
message: see version_message
-
old_aliases (list of aliases): the aliases previously referencing the IPV
-
private_resources (list of IPV resources)
-
project_props (string)
-
properties (object with custom properties)
-
repo_path (string)
-
resources (list of IPV resources)
-
version (integer)
-
version_message (string)
Any other field is checked against the custom properties.
IPV resources
-
alias (alias): the alias of the IPV resource, if any
All other fields are the same as the IPV of the IPV resource.
Aliases
-
creation_timestamp (integer)
-
creator (user)
-
fqn (string): the FQN of the alias, e.g. chipsets.gpu123@LATEST
-
ipl (line)
-
ipv (IPV): the IPV currently referenced by the alias
-
line: see ipl
-
locked (boolean)
-
name (string): the name of the alias, e.g. LATEST
Searching IPs in PiCLI
Listing with search
'pi ip list' output can be filtered with searches:
Command Option | Description |
---|---|
--label LABEL [LABEL ..] | Filter the output by the one or more LABELs. If more the one LABELs are provided the IPs that have ALL the LABELs are returned (AND of the LABELs) |
--match-substring, -m | Search the fields of the IP objects returned by the specified MATCH_SUBSTRING. This option offers superior performance to running a full list of IPs and then piping through grep ( | grep). The substring match can be performed on server and so generates smaller set of results. |
--query, -q QUERY | Search IPs using a query defined on the command line (not a Saved query). See the Helix IPLM query language section for more details. |
--squery , -sq SQUERY | Search IPs using a Saved query. See the Helix IPLM query language section for more details on Saved queries. |
The 'pi ip list' command is actually returning IPV (IP Versions or releases) rather than IPs directly. This is normally not a noteworthy fact, but it must be understood in order to understand query language construction around the 'pi ip list' command.
When searching IPs with a query such as:
pi ip ls -q 'any(ip.attributes, {it.name ~= "FAQ"})'
pi lib ls -q 'any(attributes, {it.name ~= "FAQ"})'
In this case the 'pi lib list' command returns Libraries directly, and we are asking for attributes attached to the Libraries that 'pi lib list' has returned.
> pi ip list -q 'lib="ARM" && ip *= "cor*"' ┌─────────────────────┬────┬──────────────────┬────────────┬───────────────────────────────┬──────────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═════════════════════╪════╪══════════════════╪════════════╪═══════════════════════════════╪══════════════════════════╡ │ ARM.cortex@1.L1 │ P4 │ HEAD LATEST │ admin │ 2019-06-27 14:14:09 -0400 EDT │ releasing ARM.cortex@.L1 │ │ ARM.cortex@1.L2 │ P4 │ HEAD LATEST │ admin │ 2019-06-27 14:14:11 -0400 EDT │ releasing ARM.cortex@.L2 │ │ ARM.cortex@1.L3 │ P4 │ HEAD LATEST │ admin │ 2019-06-27 14:14:12 -0400 EDT │ releasing ARM.cortex@.L3 │ │ ARM.cortex@1.L4 │ P4 │ HEAD LATEST │ admin │ 2019-06-27 14:14:13 -0400 EDT │ releasing ARM.cortex@.L4 │ │ ARM.cortex@6.TRUNK │ P4 │ HEAD LATEST │ admin │ 2019-06-27 14:14:03 -0400 EDT │ releasing ARM.cortex │ │ ARM.cortex2@5.TRUNK │ P4 │ GOLD HEAD LATEST │ admin │ 2019-06-27 14:14:05 -0400 EDT │ Initial version │ └─────────────────────┴────┴──────────────────┴────────────┴───────────────────────────────┴──────────────────────────┘ Found 6 matching object(s).
> pi ip ls -q 'prop1="test1"' ┌──────────────────────┬────┬─────────────┬────────────┬────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞══════════════════════╪════╪═════════════╪════════════╪════════════╪═════════════════╡ │ drinks.beer@1.TRUNK │ P4 │ HEAD LATEST │ │ │ Version one │ │ drinks.vodka@1.TRUNK │ P4 │ HEAD LATEST │ │ │ Version one │ └──────────────────────┴────┴─────────────┴────────────┴────────────┴─────────────────┘
> pi ip list -q 'creator=="admin"' ┌────────────────────────────────────┬──────┬──────────────────┬────────────┬───────────────────────────────┬───────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞════════════════════════════════════╪══════╪══════════════════╪════════════╪═══════════════════════════════╪═══════════════════════╡ │ ARM.cortex@1.TRUNK │ CONT │ HEAD LATEST │ admin │ 2017-06-15 15:15:25 -0400 EDT │ Initial version │ │ ARM.cpu@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2017-06-15 15:15:38 -0400 EDT │ copied tutorial cpu │ └────────────────────────────────────┴──────┴──────────────────┴────────────┴───────────────────────────────┴───────────────────────┘
> pi ip ls -q 'prop1="test1" && power>3' ┌─────────────────────┬────┬─────────────┬────────────┬────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═════════════════════╪════╪═════════════╪════════════╪════════════╪═════════════════╡ │ drinks.beer@1.TRUNK │ P4 │ HEAD LATEST │ │ │ Version one │ └─────────────────────┴────┴─────────────┴────────────┴────────────┴─────────────────┘
> pi ip list -q 'dm_type="CONT" && lib="ARM"' ┌────────────────────┬──────┬─────────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞════════════════════╪══════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ ARM.cortex@1.TRUNK │ CONT │ HEAD LATEST │ admin │ 2017-06-15 15:15:25 -0400 EDT │ Initial version │ └────────────────────┴──────┴─────────────┴────────────┴───────────────────────────────┴─────────────────┘
> pi ip ls -q 'ip.creation_timestamp < datetime(2017,5,24) && ip.creation_timestamp > datetime(2017,5,1)' ┌───────────────────────────────┬──────┬─────────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════════╪══════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ tutorial.adc_top@1.TRUNK │ CONT │ HEAD LATEST │ admin │ 2017-05-22 13:36:00 -0700 PDT │ First version │ └───────────────────────────────┴──────┴─────────────┴────────────┴───────────────────────────────┴─────────────────┘
> pi ip ls -q 'ip.creation_timestamp > now()-weeks(2)' ┌────────────────────────────────────┬──────┬──────────────────┬────────────┬───────────────────────────────┬───────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞════════════════════════════════════╪══════╪══════════════════╪════════════╪═══════════════════════════════╪═══════════════════════╡ │ ARM.cortex@1.TRUNK │ CONT │ HEAD LATEST │ admin │ 2017-06-15 15:15:25 -0400 EDT │ Initial version │ │ ARM.cpu@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2017-06-15 15:15:38 -0400 EDT │ copied tutorial cpu │ │ Data-Converter.adc@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2017-06-15 15:15:37 -0400 EDT │ copied tutorial adc │ │ Mem.flash@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2017-06-15 15:15:36 -0400 EDT │ copied tutorial flash │ │ PDK.MS90G@1.TRUNK │ FS │ HEAD LATEST │ admin │ 2017-06-15 15:15:15 -0400 EDT │ Initial version │ │ PDK.fab1_09@1.TRUNK │ FS │ HEAD LATEST │ admin │ 2017-06-15 15:15:14 -0400 EDT │ Initial version │ │ PDK.gpdk090@1.TRUNK │ FS │ HEAD LATEST │ admin │ 2017-06-15 15:15:14 -0400 EDT │ Initial version │ └────────────────────────────────────┴──────┴──────────────────┴────────────┴───────────────────────────────┴───────────────────────┘
> pi ip ls @GOLD -a -q 'ip.name ~= ".*_top" & power is NULL' ┌─────────────────────────────────────────┬────┬──────────────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═════════════════════════════════════════╪════╪══════════════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ tutorial.analog_top@GOLD.TRUNK [@2] │ P4 │ GOLD HEAD LATEST │ admin │ 2017-06-12 14:57:42 -0700 PDT │ another release │ └─────────────────────────────────────────┴────┴──────────────────┴────────────┴───────────────────────────────┴─────────────────┘
> pi ip ls -a -q 'creation_timestamp > now()-weeks(2)' ┌──────────────────────┬────┬─────────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞══════════════════════╪════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ drinks.vodka@3.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-08 2:57:19 -0800 PST │ test │ │ drinks.vodka@2.TRUNK │ P4 │ │ admin │ 2018-01-08 2:53:12 -0800 PST │ test │ └──────────────────────┴────┴─────────────┴────────────┴───────────────────────────────┴─────────────────┘
> pi ip ls -a tutorial. -q 'power > target_power' ┌───────────────────────────────┬────┬─────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════════╪════╪═════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ tutorial.tutorial@2.TRUNK │ P4 │ │ admin │ 2017-06-16 09:31:44 -0700 PDT │ Initial version │ └───────────────────────────────┴────┴─────────┴────────────┴───────────────────────────────┴─────────────────┘
> pi ip list tutorial.padring -a -q 'contains( aliases, "GOLD") || contains(old_aliases, "GOLD")' ┌──────────────────────────┬────┬─────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞══════════════════════════╪════╪═════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ tutorial.padring@2.TRUNK │ P4 │ GOLD │ admin │ 2018-03-16 07:13:10 -0700 PDT │ hier release │ │ tutorial.padring@1.TRUNK │ P4 │ GOLD │ admin │ 2018-03-16 07:13:04 -0700 PDT │ hier release │
Aliases are returned in list format, so we use the query language's list processing capabilities to work with the results.
pi ip list tutorial.padring -a -q 'contains( aliases, "GOLD") || contains(old_aliases, "GOLD")'
Command Option | Definition |
---|---|
contains( | A list function (see Helix IPLM query language) which evaluates to true if the expression is true for any of the items in the list |
aliases | All the current aliases applied to the IPVs |
"GOLD" | The current alias to look for |
|| | Apply the previous filter or the subsequent filter |
contains( | A list function (see Helix IPLM query language) which evaluates to true if the expression is true for any of the items in the list |
old_aliases | All the non-current aliases applied to the IPVs |
"GOLD" | The non-current alias to look for |
> pi ip ls -q 'any(ip.labels, {it = "3rd_party" or it = "MS90G_LP"})' ┌───────────────────────────────┬────┬─────────────┬────────────┬───────────────────────────────┬─────────────────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════════╪════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════════════════════╡ │ ARM.cortex@6.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:43 -0800 PST │ releasing ARM.cortex │ │ Data-Converter.sd_adc@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:35 -0800 PST │ releasing Data-Converter.sd_adc │ │ Mem.nand_flash@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:18 -0800 PST │ releasing Mem.nand_flash │ │ Mem.nor_flash@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:13 -0800 PST │ releasing Mem.nor_flash │ │ PDK.MS90G_LP@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:22 -0800 PST │ releasing PDK.MS90G_LP │ │ PLL.cyclone_pll@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:30 -0800 PST │ releasing PLL.cyclone_pll │ │ PLL.tms_pll@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:39 -0800 PST │ releasing PLL.tms_pll │ └───────────────────────────────┴────┴─────────────┴────────────┴───────────────────────────────┴─────────────────────────────────┘ Found 7 matching object(s).
> pi ip ls -q 'any(ip.labels, {it = "3rd_party"}) and any(ip.labels, {it = "MS90G_LP"})' ┌───────────────────────────────┬────┬─────────────┬────────────┬───────────────────────────────┬─────────────────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════════╪════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════════════════════╡ │ Data-Converter.sd_adc@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:35 -0800 PST │ releasing Data-Converter.sd_adc │ │ PDK.MS90G_LP@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2018-01-23 11:07:22 -0800 PST │ releasing PDK.MS90G_LP │ └───────────────────────────────┴────┴─────────────┴────────────┴───────────────────────────────┴─────────────────────────────────┘ Found 2 matching object(s).
> pi ip ls tutorial.tutorial -q 'any(it.aliases, {it.locked = True and it = "GOLD"} )' ┌───────────────────────────┬────┬─────────┬────────────┬───────────────────────────────┬──────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════╪════╪═════════╪════════════╪═══════════════════════════════╪══════════════════╡ │ tutorial.tutorial@4.TRUNK │ P4 │ GOLD │ admin │ 2018-07-24 12:36:47 -0700 PDT │ tutorial release │ └───────────────────────────┴────┴─────────┴────────────┴───────────────────────────────┴──────────────────┘ Found 1 matching object(s).
> pi ip ls -a -q 'any(it.aliases, {it.locked!=True && it.name!="HEAD" && it.name!="LATEST"})' ┌───────────────────────────┬────┬─────────┬────────────┬───────────────────────────────┬──────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════╪════╪═════════╪════════════╪═══════════════════════════════╪══════════════════════╡ │ ARM.cortex@5.TRUNK │ P4 │ GOLD │ admin │ 2018-10-30 18:17:22 -0500 CDT │ releasing ARM.cortex │ │ ARM.cortex2@3.TRUNK │ P4 │ GOLD │ admin │ 2018-10-30 18:17:27 -0500 CDT │ Initial version │ │ tutorial.CADenv@1.TRUNK │ P4 │ GOLD │ admin │ 2018-10-30 08:49:25 -0500 CDT │ hier release │ │ tutorial.padring@2.TRUNK │ P4 │ GOLD │ admin │ 2018-10-30 08:50:00 -0500 CDT │ hier release │ │ tutorial.tutorial@4.TRUNK │ P4 │ GOLD │ admin │ 2018-10-30 08:50:36 -0500 CDT │ hier release │ └───────────────────────────┴────┴─────────┴────────────┴───────────────────────────────┴──────────────────────┘
> pi ip ls -a -q 'any(aliases, {it*="RC1_*"})||any(aliases, {it*="RC2_*"})' ┌────────────────────────────┬────┬────────────────────────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞════════════════════════════╪════╪════════════════════════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ tutorial.CADenv@3.TRUNK │ P4 │ HEAD LATEST RC1_2018_08_12 │ admin │ 2018-10-30 08:49:27 -0500 CDT │ hier release │ │ tutorial.gen_dig@2.TRUNK │ P4 │ HEAD LATEST RC2_2019_01_02 │ admin │ 2018-10-30 08:50:08 -0500 CDT │ hier release │ │ tutorial.proj_tech@1.TRUNK │ P4 │ HEAD LATEST RC1_2019_01_21 │ admin │ 2018-10-30 08:48:04 -0500 CDT │ hier release │ └────────────────────────────┴────┴────────────────────────────┴────────────┴───────────────────────────────┴─────────────────┘
> pi ip ls -q 'any(ip.attributes, {it.name ~= "FAQ"})' ┌──────────────────────────────────┬──────┬─────────────┬────────────┬───────────────────────────────┬─────────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞══════════════════════════════════╪══════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════════╡ │ tutorial.adc@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:31:02 -0800 PST │ hier release │ │ tutorial.analog_top@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:35:09 -0800 PST │ analog_top release │ │ tutorial.dac@0.TRUNK │ CONT │ HEAD LATEST │ admin │ 2019-11-08 17:30:48 -0800 PST │ Initial version │ │ tutorial.digital_top@1.TRUNK │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:35:42 -0800 PST │ tutorial release │ │ tutorial.padring_renamed@1.L1 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:36:23 -0800 PST │ padring L1 release │ │ tutorial.padring_renamed@1.L2 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:36:35 -0800 PST │ padring L2 release │ │ tutorial.padring_renamed@1.L3 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:36:49 -0800 PST │ padring L3 release │ │ tutorial.padring_renamed@1.L4 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:37:01 -0800 PST │ padring L4 release │ │ tutorial.padring_renamed@5.TRUNK │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:36:01 -0800 PST │ tutorial release │ │ tutorial.tutorial@1.L1 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:37:42 -0800 PST │ tutorial L1 release │ │ tutorial.tutorial@1.L2 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:38:13 -0800 PST │ tutorial L2 release │ │ tutorial.tutorial@1.L3 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:38:41 -0800 PST │ tutorial L3 release │ │ tutorial.tutorial@1.L4 │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:39:12 -0800 PST │ tutorial L4 release │ │ tutorial.tutorial@5.TRUNK │ P4 │ HEAD LATEST │ admin │ 2019-11-08 17:37:10 -0800 PST │ tutorial release │ └──────────────────────────────────┴──────┴─────────────┴────────────┴───────────────────────────────┴─────────────────────┘ Found 14 matching object(s).
The 'pi ip list' command returns IPVs, so the 'ip.attributes' construct refers to the list of attributes attached to the 'ip' of the IPVs returned by the pi ip list command. Note that providing the '-a' (all IPV) option here just prints all IPVs of the IPs returned, whether or not they match the query. See next example for how to look for attributes across IPVs. The listed output is in IPV format, but in this context they should be understood to refer to the IP objects rather than any specific IPV.
> pi ip ls -a -q 'any(attributes, {name ~= "FAQ"})' ┌───────────────────────────┬────┬───────────────────────────┬────────────┬───────────────────────────────┬──────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════╪════╪═══════════════════════════╪════════════╪═══════════════════════════════╪══════════════════╡ │ tutorial.padring@1.TRUNK │ P4 │ GOLD │ admin │ 2020-01-27 06:52:50 -0800 PST │ tutorial release │ │ tutorial.tutorial@6.TRUNK │ P4 │ GOLD HEAD ISO26262 LATEST │ admin │ 2020-01-27 07:19:25 -0800 PST │ adding fusa ip │ │ tutorial.tutorial@5.TRUNK │ P4 │ │ admin │ 2020-01-27 06:53:17 -0800 PST │ tutorial release │ │ tutorial.tutorial@4.TRUNK │ P4 │ GOLD │ admin │ 2020-01-27 06:53:17 -0800 PST │ tutorial release │ │ tutorial.tutorial@3.TRUNK │ P4 │ │ admin │ 2020-01-27 06:53:16 -0800 PST │ tutorial release │ │ tutorial.tutorial@2.TRUNK │ P4 │ GOLD │ admin │ 2020-01-27 06:53:15 -0800 PST │ tutorial release │ │ tutorial.tutorial@1.TRUNK │ P4 │ GOLD │ admin │ 2020-01-27 06:52:50 -0800 PST │ tutorial release │ │ tutorial.tutorial@0.TRUNK │ P4 │ │ admin │ 2020-01-27 06:52:44 -0800 PST │ Initial version │ └───────────────────────────┴────┴───────────────────────────┴────────────┴───────────────────────────────┴──────────────────┘ Found 8 matching object(s).
> pi ip ls -a -q 'project_props*="*unix_group\":\"mdx*"' ┌──────────────────────────┬────┬─────────────┬────────────┬───────────────────────────────┬──────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞══════════════════════════╪════╪═════════════╪════════════╪═══════════════════════════════╪══════════════════╡ │ tutorial.padring@6.TRUNK │ P4 │ HEAD LATEST │ admin │ 2020-02-18 10:52:38 -0500 EST │ tutorial release │ └──────────────────────────┴────┴─────────────┴────────────┴───────────────────────────────┴──────────────────┘ Found 1 matching object(s).
Related information