Skip to content

Commit

Permalink
add machineset resource implementation
Browse files Browse the repository at this point in the history
This patch adds the abilty to create the 'machineset' resource.
  • Loading branch information
Guy Afik committed Aug 12, 2021
1 parent 8c1f60b commit 7a49a64
Showing 1 changed file with 140 additions and 0 deletions.
140 changes: 140 additions & 0 deletions ocp_resources/machineset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
from ocp_resources.resource import NamespacedResource


class MachineSet(NamespacedResource):
"""
Machineset object.
Args:
cluster_name (str): OpenShift cluster name.
machine_role (str): machine role. e.g.: 'worker'.
machine_type (str): machine role. e.g.: 'worker'.
replicas (int): amount of replicas the machineset will have.
provider_spec (dict): provider spec information.
provider spec example:
{
"value": {
"apiVersion": "ovirtproviderconfig.machine.openshift.io/v1beta1",
"auto_pinning_policy": "none",
"cluster_id": 5612af70-f4f5-455d-b7df-fbad66accc38,
"cpu": {
"cores": 8,
"sockets": 1,
"threads": 1
},
"credentialsSecret": {
"name": "ovirt-credentials"
},
"kind": "OvirtMachineProviderSpec",
"memory_mb": 16000,
"os_disk": {
"size_gb": 31
},
"template_name": "ge2n1-gcwmg-rhcos",
"type": "server",
"userDataSecret": {
"name": "worker-user-data"
}
}
}
"""

api_group = NamespacedResource.ApiGroup.MACHINE_OPENSHIFT_IO

def __init__(
self,
cluster_name=None,
name=None,
namespace=None,
teardown=True,
client=None,
machine_role="worker",
machine_type="worker",
replicas=1,
provider_spec=None,
yaml_file=None,
):
super().__init__(
name=name,
namespace=namespace,
client=client,
teardown=teardown,
yaml_file=yaml_file,
)
self.replicas = replicas
self.cluster_name = cluster_name
self.machine_role = machine_role
self.machine_type = machine_type
self.provider_spec = provider_spec or {}

@property
def available_replicas(self):
return self.instance.status.availableReplicas

@property
def ready_replicas(self):
return self.instance.status.readyReplicas

@property
def desired_replicas(self):
return self.instance.status.replicas

@property
def provider_spec_value(self):
return self.instance.spec.template.spec.providerSpec.value

def to_dict(self):
res = super().to_dict()
if self.yaml_file:
return res

_spec, _metadata, _labels = (
"spec",
"metadata",
"labels",
)
(
_cluster_api_cluster,
_cluster_api_machine_role,
_cluster_api_machine_type,
_cluster_api_machineset,
) = (
"cluster-api-cluster",
"cluster-api-machine-role",
"cluster-api-machine-type",
"cluster-api-machineset",
)

res[_metadata].setdefault(_labels, {}).update(
{
f"{self.api_group}/{_cluster_api_cluster}": self.cluster_name,
f"{self.api_group}/{_cluster_api_machine_role}": self.machine_role,
f"{self.api_group}/{_cluster_api_machine_type}": self.machine_type,
}
)

res.setdefault(_spec, {}).update(
{
"replicas": self.replicas,
"selector": {
"matchLabels": {
f"{self.api_group}/{_cluster_api_cluster}": self.cluster_name,
f"{self.api_group}/{_cluster_api_machineset}": f"{self.cluster_name}-{self.machine_role}",
}
},
"template": {
_metadata: {
_labels: {
f"{self.api_group}/{_cluster_api_cluster}": self.cluster_name,
f"{self.api_group}/{_cluster_api_machine_role}": self.machine_role,
f"{self.api_group}/{_cluster_api_machine_type}": self.machine_type,
f"{self.api_group}/{_cluster_api_machineset}": f"{self.cluster_name}-{self.machine_role}",
},
},
_spec: {"providerSpec": self.provider_spec},
},
}
)
return res

0 comments on commit 7a49a64

Please sign in to comment.