diff --git a/pkg/inventory/ifc/interface.go b/pkg/inventory/ifc/interface.go
new file mode 100644
index 000000000..0dc8b751a
--- /dev/null
+++ b/pkg/inventory/ifc/interface.go
@@ -0,0 +1,52 @@
+/*
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package ifc
+
+import (
+	"context"
+
+	remoteifc "opendev.org/airship/airshipctl/pkg/remote/ifc"
+)
+
+// Inventory interface for airshipctl
+type Inventory interface {
+	BaremetalInventory() (BaremetalInventory, error)
+}
+
+// BaremetalInventory interface that allows working with baremetal hosts
+type BaremetalInventory interface {
+	Select(BaremetalHostSelector) ([]remoteifc.Client, error)
+	SelectOne(BaremetalHostSelector) (remoteifc.Client, error)
+	RunOperation(context.Context, BaremetalOperation, BaremetalHostSelector, BaremetalBatchRunOptions) error
+}
+
+// BaremetalOperation baremetal operation
+type BaremetalOperation string
+
+const (
+	// BaremetalOperationReboot reboot
+	BaremetalOperationReboot BaremetalOperation = "reboot"
+	// BaremetalOperationPowerOff power off
+	BaremetalOperationPowerOff BaremetalOperation = "power-off"
+	// BaremetalOperationPowerOn power on
+	BaremetalOperationPowerOn BaremetalOperation = "power-on"
+	// BaremetalOperationEjectVirtualMedia eject virtual media
+	BaremetalOperationEjectVirtualMedia BaremetalOperation = "eject-virtual-media"
+)
+
+// BaremetalBatchRunOptions are options to be passed to RunOperation, this is to be
+// exetended in the future, to support such things as concurency
+type BaremetalBatchRunOptions struct {
+}
diff --git a/pkg/inventory/ifc/selectors.go b/pkg/inventory/ifc/selectors.go
new file mode 100644
index 000000000..dc1e1c467
--- /dev/null
+++ b/pkg/inventory/ifc/selectors.go
@@ -0,0 +1,51 @@
+/*
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package ifc
+
+// BaremetalHostSelector allows to select baremetal hosts, if used empty all possible hosts
+// will be should be returned by Select() method of BaremetalInvenotry interface
+type BaremetalHostSelector struct {
+	PhaseSelector PhaseSelector
+	Name          string
+	Namespace     string
+	LabelSelector string
+}
+
+// PhaseSelector allows to select hosts based on phase they belong to
+type PhaseSelector struct {
+	Name      string
+	Namespace string
+}
+
+// ByName allows to select hosts based on their name
+func (s BaremetalHostSelector) ByName(name string) BaremetalHostSelector {
+	s.Name = name
+	return s
+}
+
+// ByNamespace allows to select hosts based on their namespace
+func (s BaremetalHostSelector) ByNamespace(name, namespace string) BaremetalHostSelector {
+	s.PhaseSelector = PhaseSelector{
+		Name:      name,
+		Namespace: namespace,
+	}
+	return s
+}
+
+// ByLabel allows to select hosts based on label
+func (s BaremetalHostSelector) ByLabel(label string) BaremetalHostSelector {
+	s.LabelSelector = label
+	return s
+}