Skip to content

Commit 5bcf70b

Browse files
committed
Add playbook to generate manifests for a single agent based HCP cluster
1 parent 48d4d8d commit 5bcf70b

File tree

12 files changed

+294
-0
lines changed

12 files changed

+294
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,6 @@ dmypy.json
133133

134134
# Prevent manifest file upload
135135
aap_manifest.zip
136+
137+
# Prevent pull_secret.txt file upload
138+
pull_secret.txt

ansible/hcp-manifests.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
# Playbook to create manifests for a Hosted Control Plane deployed by MCE
3+
#
4+
# Example Usage:
5+
#
6+
# time ansible-playbook -i -i ../jetlag/ansible/inventory/cloud30.local ansible/hcp-manifests.yml
7+
#
8+
9+
- name: Create manifests for an hcp cluster deployed by MCE
10+
hosts: bastion
11+
gather_facts: false
12+
vars_files:
13+
- vars/all.yml
14+
roles:
15+
- hcp-create-manifests
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
# hcp-create-manifests default vars
3+
4+
hv_vm_manifests_directory: /root/hv-vm
5+
6+
hcp_namespace: clusters
7+
8+
# Must match DNS records
9+
hcp_cluster_name: standard-00001
10+
11+
# Provide pull-secret for connected manifests
12+
hcp_pull_secret: "{{ lookup('file', '../pull_secret.txt') }}"
13+
14+
# SSH key that will be able to access booted HCP worker machines
15+
ssh_public_key_file: ~/.ssh/id_rsa.pub
16+
17+
# OCP version for the hosted cluster
18+
hcp_release_image: quay.io/openshift-release-dev/ocp-release:4.17.25-x86_64
19+
20+
# Starting count of Hosted Cluster worker replicas
21+
hcp_nodepool_replicas: 1
22+
23+
hcp_nodeselectors:
24+
- 'node-role.kubernetes.io/hcp: ""'
25+
26+
hcp_tolerations:
27+
- effect: NoExecute
28+
key: node-role.kubernetes.io/hcp
29+
value: reserved
30+
- effect: NoSchedule
31+
key: node-role.kubernetes.io/hcp
32+
value: reserved
33+
34+
hcp_etcd_storageclass: localstorage-sc
35+
36+
hcp_vm_offset: 8
37+
38+
# sushy emulator bmc username/password
39+
bmc_username_base64: "{{ 'redhat' | b64encode }}"
40+
bmc_password_base64: "{{ 'password' | b64encode }}"
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
# hcp-create-manifests tasks
3+
4+
- name: Create directories for hv-vm HCP manifests on bastion
5+
file:
6+
path: "{{ item.dir }}"
7+
state: directory
8+
loop:
9+
- dir: "{{ hv_vm_manifests_directory }}/"
10+
- dir: "{{ hv_vm_manifests_directory }}/hcp"
11+
12+
- name: Template a manifest per hv-vm on bastion as a SNO
13+
template:
14+
src: "{{ item.src }}"
15+
dest: "{{ item.dest }}"
16+
loop:
17+
- src: 01-namespace.yml.j2
18+
dest: "{{ hv_vm_manifests_directory }}/hcp/01-namespace.yml"
19+
- src: 02-secret-ps.yml.j2
20+
dest: "{{ hv_vm_manifests_directory }}/hcp/02-secret-ps.yml"
21+
- src: 03-secret-ssh.yml.j2
22+
dest: "{{ hv_vm_manifests_directory }}/hcp/03-secret-ssh.yml"
23+
- src: 04-hostedcluster.yml.j2
24+
dest: "{{ hv_vm_manifests_directory }}/hcp/04-hostedcluster.yml"
25+
- src: 05-nodepool.yml.j2
26+
dest: "{{ hv_vm_manifests_directory }}/hcp/05-nodepool.yml"
27+
- src: 06-nmstateconfig.yml.j2
28+
dest: "{{ hv_vm_manifests_directory }}/hcp/06-nmstateconfig.yml"
29+
- src: 07-infraenv.yml.j2
30+
dest: "{{ hv_vm_manifests_directory }}/hcp/07-infraenv.yml"
31+
- src: 08-bmh.yml.j2
32+
dest: "{{ hv_vm_manifests_directory }}/hcp/08-bmh.yml"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
apiVersion: v1
3+
kind: Namespace
4+
metadata:
5+
name: {{ hcp_namespace }}
6+
---
7+
apiVersion: rbac.authorization.k8s.io/v1
8+
kind: Role
9+
metadata:
10+
name: capi-provider-role
11+
namespace: {{ hcp_namespace }}
12+
rules:
13+
- apiGroups:
14+
- agent-install.openshift.io
15+
resources:
16+
- agents
17+
verbs:
18+
- '*'
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: {{ hcp_cluster_name }}-pull-secret
5+
namespace: {{ hcp_namespace }}
6+
Type: kubernetes.io/dockerconfigjson
7+
data:
8+
.dockerconfigjson: {{ hcp_pull_secret | to_json | b64encode }}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
apiVersion: v1
3+
kind: Secret
4+
metadata:
5+
name: {{ hcp_cluster_name }}-ssh-key
6+
namespace: {{ hcp_namespace }}
7+
stringData:
8+
id_rsa.pub: {{ lookup('file', ssh_public_key_file) }}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
apiVersion: hypershift.openshift.io/v1beta1
3+
kind: HostedCluster
4+
metadata:
5+
name: {{ hcp_cluster_name }}
6+
namespace: {{ hcp_namespace }}
7+
spec:
8+
{% if hcp_nodeselectors | length > 0 %}
9+
nodeSelector:
10+
{% for nodeselector in hcp_nodeselectors %}
11+
{{ nodeselector }}
12+
{% endfor %}
13+
{% endif %}
14+
{% if hcp_tolerations | length > 0 %}
15+
tolerations:
16+
{% for toleration in hcp_tolerations %}
17+
- {{ toleration }}
18+
{% endfor %}
19+
{% endif %}
20+
etcd:
21+
managementType: Managed
22+
managed:
23+
storage:
24+
type: PersistentVolume
25+
persistentVolume:
26+
storageClassName: {{ hcp_etcd_storageclass }}
27+
release:
28+
image: {{ hcp_release_image }}
29+
pullSecret:
30+
name: {{ hcp_cluster_name }}-pull-secret
31+
sshKey:
32+
name: {{ hcp_cluster_name }}-ssh-key
33+
networking:
34+
machineNetwork:
35+
- cidr: "{{ hostvars[groups['hv_vm'][0]]['machine_network'] }}"
36+
networkType: OVNKubernetes
37+
serviceNetwork:
38+
- cidr: "172.31.0.0/16"
39+
platform:
40+
agent:
41+
agentNamespace: {{ hcp_namespace }}
42+
type: Agent
43+
infraID: {{ hcp_cluster_name }}
44+
dns:
45+
baseDomain: {{ hostvars[groups['hv_vm'][0]]['base_domain'] }}
46+
services:
47+
- service: APIServer
48+
servicePublishingStrategy:
49+
nodePort:
50+
address: api.{{ hcp_cluster_name }}.{{ hostvars[groups['hv_vm'][0]]['base_domain'] }}
51+
type: NodePort
52+
- service: OAuthServer
53+
servicePublishingStrategy:
54+
nodePort:
55+
address: api.{{ hcp_cluster_name }}.{{ hostvars[groups['hv_vm'][0]]['base_domain'] }}
56+
type: NodePort
57+
- service: OIDC
58+
servicePublishingStrategy:
59+
# nodePort:
60+
# address: api.{{ hcp_cluster_name }}.{{ hostvars[groups['hv_vm'][0]]['base_domain'] }}
61+
type: None
62+
- service: Konnectivity
63+
servicePublishingStrategy:
64+
nodePort:
65+
address: api.{{ hcp_cluster_name }}.{{ hostvars[groups['hv_vm'][0]]['base_domain'] }}
66+
type: NodePort
67+
- service: Ignition
68+
servicePublishingStrategy:
69+
nodePort:
70+
address: api.{{ hcp_cluster_name }}.{{ hostvars[groups['hv_vm'][0]]['base_domain'] }}
71+
type: NodePort
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
apiVersion: hypershift.openshift.io/v1beta1
3+
kind: NodePool
4+
metadata:
5+
name: {{ hcp_cluster_name }}-workers
6+
namespace: {{ hcp_namespace }}
7+
spec:
8+
clusterName: {{ hcp_cluster_name }}
9+
replicas: {{ hcp_nodepool_replicas }}
10+
management:
11+
autoRepair: false
12+
upgradeType: InPlace
13+
platform:
14+
type: Agent
15+
release:
16+
image: {{ hcp_release_image }}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{% for vm in groups['hv_vm'][hcp_vm_offset:] %}
2+
---
3+
apiVersion: agent-install.openshift.io/v1beta1
4+
kind: NMStateConfig
5+
metadata:
6+
name: {{ vm }}
7+
namespace: {{ hcp_namespace }}
8+
labels:
9+
cluster: {{ hcp_cluster_name }}
10+
spec:
11+
config:
12+
interfaces:
13+
- name: enp1s0
14+
type: ethernet
15+
state: up
16+
ipv4:
17+
enabled: true
18+
dhcp: false
19+
address:
20+
- ip: {{ hostvars[vm]['ip'] }}
21+
prefix-length: {{ hostvars[vm]['network_prefix'] }}
22+
dns-resolver:
23+
config:
24+
server:
25+
- {{ hostvars[vm]['gateway'] }}
26+
routes:
27+
config:
28+
- destination: 0.0.0.0/0
29+
metric: 1
30+
next-hop-address: {{ hostvars[vm]['gateway'] }}
31+
next-hop-interface: enp1s0
32+
table-id: 254
33+
interfaces:
34+
- name: enp1s0
35+
macAddress: {{ hostvars[vm]['mac_address'] }}
36+
{% endfor %}

0 commit comments

Comments
 (0)