From 7374f7383f4d5ee4d8078648e3b18168e274f402 Mon Sep 17 00:00:00 2001 From: Michele Costa Date: Wed, 15 Jun 2022 16:33:25 +0100 Subject: [PATCH] Perliminary BILLI intergration --- deploy_billi.yml | 7 +++++ playbooks/generate_agent_iso.yml | 5 ++++ playbooks/generate_manifests.yml | 14 +++++++++ roles/boot_iso/defaults/main.yml | 3 +- roles/generate_agent_iso/defaults/main.yml | 5 ++++ roles/generate_agent_iso/tasks/main.yml | 22 ++++++++++++++ roles/generate_manifests/defaults/main.yml | 6 ++++ roles/generate_manifests/tasks/main.yml | 25 ++++++++++++++++ roles/generate_manifests/tasks/static.yml | 29 +++++++++++++++++++ .../templates/agent-cluster-install.yaml.j2 | 22 ++++++++++++++ .../templates/cluster-deployment.yaml.j2 | 22 ++++++++++++++ .../cluster-image-set.yaml-no-working.j2 | 6 ++++ .../templates/cluster-image-set.yaml.j2 | 6 ++++ .../templates/infraenv.yaml.j2 | 15 ++++++++++ .../templates/nmstateconfig.yaml.j2 | 19 ++++++++++++ .../templates/pull-secret.yaml.j2 | 8 +++++ roles/get_image_hash/defaults/main.yml | 4 ++- roles/get_image_hash/tasks/main.yml | 3 +- roles/setup_ntp/templates/chrony.conf.j2 | 1 - 19 files changed, 218 insertions(+), 4 deletions(-) create mode 100644 deploy_billi.yml create mode 100644 playbooks/generate_agent_iso.yml create mode 100644 playbooks/generate_manifests.yml create mode 100644 roles/generate_agent_iso/defaults/main.yml create mode 100644 roles/generate_agent_iso/tasks/main.yml create mode 100644 roles/generate_manifests/defaults/main.yml create mode 100644 roles/generate_manifests/tasks/main.yml create mode 100644 roles/generate_manifests/tasks/static.yml create mode 100644 roles/generate_manifests/templates/agent-cluster-install.yaml.j2 create mode 100644 roles/generate_manifests/templates/cluster-deployment.yaml.j2 create mode 100644 roles/generate_manifests/templates/cluster-image-set.yaml-no-working.j2 create mode 100644 roles/generate_manifests/templates/cluster-image-set.yaml.j2 create mode 100644 roles/generate_manifests/templates/infraenv.yaml.j2 create mode 100644 roles/generate_manifests/templates/nmstateconfig.yaml.j2 create mode 100644 roles/generate_manifests/templates/pull-secret.yaml.j2 diff --git a/deploy_billi.yml b/deploy_billi.yml new file mode 100644 index 00000000..bd29f521 --- /dev/null +++ b/deploy_billi.yml @@ -0,0 +1,7 @@ +--- +- import_playbook: playbooks/generate_manifests.yml +- import_playbook: playbooks/generate_agent_iso.yml +- import_playbook: playbooks/boot_iso.yml + vars: + discovery_iso_name: "{{ cluster_name}}/agent.iso" + \ No newline at end of file diff --git a/playbooks/generate_agent_iso.yml b/playbooks/generate_agent_iso.yml new file mode 100644 index 00000000..8c19e116 --- /dev/null +++ b/playbooks/generate_agent_iso.yml @@ -0,0 +1,5 @@ +--- +- name: Generate agent iso using BILLI + hosts: localhost + roles: + - generate_agent_iso diff --git a/playbooks/generate_manifests.yml b/playbooks/generate_manifests.yml new file mode 100644 index 00000000..1175c02b --- /dev/null +++ b/playbooks/generate_manifests.yml @@ -0,0 +1,14 @@ +--- +- name: Generate manfiests for BILLI + hosts: localhost + vars: + destination_hosts: + - localhost + pre_tasks: + - name: pre-compute need to get hashes + set_fact: + run_get_hash: "{{ image_hashes | default({}) | length == 0 }}" + roles: + - role: get_image_hash + when: run_get_hash + - generate_manifests diff --git a/roles/boot_iso/defaults/main.yml b/roles/boot_iso/defaults/main.yml index e8f07a30..3fd3e4d7 100644 --- a/roles/boot_iso/defaults/main.yml +++ b/roles/boot_iso/defaults/main.yml @@ -1,2 +1,3 @@ --- -boot_iso_url: "{{ discovery_iso_server }}/{{ discovery_iso_name }}" +agent_iso_name: "{{ cluster_name }}/agent.iso" +boot_iso_url: "{{ discovery_iso_server }}/{{ agent_iso_name }}" \ No newline at end of file diff --git a/roles/generate_agent_iso/defaults/main.yml b/roles/generate_agent_iso/defaults/main.yml new file mode 100644 index 00000000..db52219e --- /dev/null +++ b/roles/generate_agent_iso/defaults/main.yml @@ -0,0 +1,5 @@ +generated_dir: "{{ repo_root_path }}/generated" +cluster_manifest_parent_dir: "{{ generated_dir}}/{{ cluster_name }}" +download_agent_dest_file: "{{ cluster_name }}/agent.iso" +download_dest_path: "{{ iso_download_dest_path | default('/opt/http_store/data') }}" +billi_executable: "{{ repo_root_path }}/../billi" \ No newline at end of file diff --git a/roles/generate_agent_iso/tasks/main.yml b/roles/generate_agent_iso/tasks/main.yml new file mode 100644 index 00000000..4447da04 --- /dev/null +++ b/roles/generate_agent_iso/tasks/main.yml @@ -0,0 +1,22 @@ +- name: Generate iso + ansible.builtin.shell: + cmd: "{{ billi_executable }} agent create image" + chdir: "{{ cluster_manifest_parent_dir }}" + + +- name: Put discovery iso in http store + block: + - name: Create discovery directory + file: + path: "{{ download_dest_path + '/' + download_agent_dest_file | dirname }}" + recurse: yes + state: directory + become: true + + - name: Create discovery directory + ansible.builtin.copy: + src: "{{ cluster_manifest_parent_dir }}/agent.iso" + dest: "{{ download_dest_path + '/' + download_agent_dest_file }}" + mode: 0644 + delegate_to: http_store + become: true \ No newline at end of file diff --git a/roles/generate_manifests/defaults/main.yml b/roles/generate_manifests/defaults/main.yml new file mode 100644 index 00000000..18376d6f --- /dev/null +++ b/roles/generate_manifests/defaults/main.yml @@ -0,0 +1,6 @@ +generated_dir: "{{ repo_root_path }}/generated" +cluster_manifest_parent_dir: "{{ generated_dir}}/{{ cluster_name }}" +cluster_manifest_dir: "{{ cluster_manifest_parent_dir }}/cluster-manifests" +mac_interface_default_mapping: "interfaces[?(name != null && mac != null)].{logical_nic_name: name, mac_address: mac}" +static_network_config: {} +version_filter: "[?(openshift_version == '4.10') && (cpu_architecture == 'x86_64')]" \ No newline at end of file diff --git a/roles/generate_manifests/tasks/main.yml b/roles/generate_manifests/tasks/main.yml new file mode 100644 index 00000000..b6c8bf52 --- /dev/null +++ b/roles/generate_manifests/tasks/main.yml @@ -0,0 +1,25 @@ +- + +- name: Render nmstate + include_tasks: static.yml + loop: "{{ groups['nodes'] }}" + +- name: Make cluster-manifests dir + file: + name: "{{ cluster_manifest_dir }}" + mode: 0775 + recurse: yes + state: directory + +- name: Render templates + template: + src: "{{ item }}" + dest: "{{ cluster_manifest_dir }}/{{ item.split('.')[:-1] | join('.') }}" + mode: 0644 + loop: + - agent-cluster-install.yaml.j2 + - cluster-deployment.yaml.j2 + - cluster-image-set.yaml.j2 + - infraenv.yaml.j2 + - nmstateconfig.yaml.j2 + - pull-secret.yaml.j2 diff --git a/roles/generate_manifests/tasks/static.yml b/roles/generate_manifests/tasks/static.yml new file mode 100644 index 00000000..5b05521e --- /dev/null +++ b/roles/generate_manifests/tasks/static.yml @@ -0,0 +1,29 @@ +- name: "Set network config for {{ item }}" + set_fact: + item_network_config: "{{ hostvars[item].network_config }}" + +- name: "Set default value of mac_interface_map for {{ item }}" + set_fact: + mac_interface_map: "{{ hostvars[item].mac_interface_map | default([]) }}" + +- name: "Set mac_interface_map for {{ item }} using query" + set_fact: + mac_interface_map: "{{ item_network_config | json_query( network_config.mapping_query | default(mac_interface_default_mapping) ) }}" + when: hostvars[item].mac_interface_map is not defined + +- name: Process network_config + import_role: + name: process_nmstate + vars: + network_config: "{{ item_network_config }}" + target_name: "{{ item }}" + +- name: "Set static network config for {{ item }}" + set_fact: + static_network_config_entry: + network_yaml: "{{ rendered_nmstate_yml }}" + mac_interface_map: "{{ mac_interface_map }}" + +- name: Update static_network_config_items + set_fact: + static_network_config: "{{ static_network_config | combine({item: static_network_config_entry}) }}" diff --git a/roles/generate_manifests/templates/agent-cluster-install.yaml.j2 b/roles/generate_manifests/templates/agent-cluster-install.yaml.j2 new file mode 100644 index 00000000..b0ecc7ae --- /dev/null +++ b/roles/generate_manifests/templates/agent-cluster-install.yaml.j2 @@ -0,0 +1,22 @@ +apiVersion: extensions.hive.openshift.io/v1beta1 +kind: AgentClusterInstall +metadata: + name: {{ cluster_name }}-agent-cluster-install + namespace: cluster0 +spec: + apiVIP: {{ api_vip }} + ingressVIP: {{ ingress_vip }} + clusterDeploymentRef: + name: {{ cluster_name }} + imageSetRef: + name: openshift-{{ openshift_version }} + networking: + clusterNetwork: + - cidr: {{ cluster_network_cidr }} + hostPrefix: {{ cluster_network_host_prefix }} + serviceNetwork: + - {{ service_network_cidr }} + provisionRequirements: + controlPlaneAgents: {{ groups['masters'] | length }} + workerAgents: {{ groups['workers'] | length }} + sshPublicKey: {{ ssh_public_key }} diff --git a/roles/generate_manifests/templates/cluster-deployment.yaml.j2 b/roles/generate_manifests/templates/cluster-deployment.yaml.j2 new file mode 100644 index 00000000..fb769e27 --- /dev/null +++ b/roles/generate_manifests/templates/cluster-deployment.yaml.j2 @@ -0,0 +1,22 @@ +apiVersion: hive.openshift.io/v1 +kind: ClusterDeployment +metadata: + name: {{ cluster_name }} + namespace: cluster0 +spec: + baseDomain: {{ base_dns_domain }} + clusterInstallRef: + group: extensions.hive.openshift.io + kind: AgentClusterInstall + name: {{ cluster_name }}-agent-cluster-install + version: v1beta1 + clusterName: {{ cluster_name }} + controlPlaneConfig: + servingCertificates: {} + platform: + agentBareMetal: + agentSelector: + matchLabels: + cluster-name: {{ cluster_name }} + pullSecretRef: + name: pull-secret diff --git a/roles/generate_manifests/templates/cluster-image-set.yaml-no-working.j2 b/roles/generate_manifests/templates/cluster-image-set.yaml-no-working.j2 new file mode 100644 index 00000000..936956a2 --- /dev/null +++ b/roles/generate_manifests/templates/cluster-image-set.yaml-no-working.j2 @@ -0,0 +1,6 @@ +apiVersion: hive.openshift.io/v1 +kind: ClusterImageSet +metadata: + name: openshift-{{ openshift_version }} +spec: + releaseImage: {{ (assisted_installer_release_images |json_query(version_filter))[0].url }} diff --git a/roles/generate_manifests/templates/cluster-image-set.yaml.j2 b/roles/generate_manifests/templates/cluster-image-set.yaml.j2 new file mode 100644 index 00000000..7417e5cd --- /dev/null +++ b/roles/generate_manifests/templates/cluster-image-set.yaml.j2 @@ -0,0 +1,6 @@ +apiVersion: hive.openshift.io/v1 +kind: ClusterImageSet +metadata: + name: openshift-{{ openshift_version }} +spec: + releaseImage: {{ (release_images_defaults |json_query(version_filter))[0].url }} diff --git a/roles/generate_manifests/templates/infraenv.yaml.j2 b/roles/generate_manifests/templates/infraenv.yaml.j2 new file mode 100644 index 00000000..2d0c5c2c --- /dev/null +++ b/roles/generate_manifests/templates/infraenv.yaml.j2 @@ -0,0 +1,15 @@ +apiVersion: agent-install.openshift.io/v1beta1 +kind: InfraEnv +metadata: + name: {{ cluster_name }}-infraenv + namespace: cluster0 +spec: + clusterRef: + name: {{ cluster_name }} + namespace: cluster0 + pullSecretRef: + name: pull-secret + sshAuthorizedKey: {{ ssh_public_key }} + nmStateConfigLabelSelector: + matchLabels: + cluster-name: {{ cluster_name }} diff --git a/roles/generate_manifests/templates/nmstateconfig.yaml.j2 b/roles/generate_manifests/templates/nmstateconfig.yaml.j2 new file mode 100644 index 00000000..b2039b38 --- /dev/null +++ b/roles/generate_manifests/templates/nmstateconfig.yaml.j2 @@ -0,0 +1,19 @@ +--- +{% for node in (groups['masters'] + groups['workers']) %} +apiVersion: agent-install.openshift.io/v1beta1 +kind: NMStateConfig +metadata: + name: {{ node }} + namespace: openshift-machine-api + labels: + cluster-name: {{ cluster_name }} +spec: + config: + {{ static_network_config[node].network_yaml | indent(4) }} + interfaces: +{% for item in static_network_config[node].mac_interface_map %} + - name: {{ item.logical_nic_name }} + macAddress: {{ item.mac_address}} +{% endfor %} +--- +{% endfor %} \ No newline at end of file diff --git a/roles/generate_manifests/templates/pull-secret.yaml.j2 b/roles/generate_manifests/templates/pull-secret.yaml.j2 new file mode 100644 index 00000000..e6b07d58 --- /dev/null +++ b/roles/generate_manifests/templates/pull-secret.yaml.j2 @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Secret +type: kubernetes.io/dockerconfigjson +metadata: + name: pull-secret + namespace: cluster0 +stringData: + .dockerconfigjson: '{{ pull_secret | to_json }}' diff --git a/roles/get_image_hash/defaults/main.yml b/roles/get_image_hash/defaults/main.yml index 875984d4..15f2b7e3 100644 --- a/roles/get_image_hash/defaults/main.yml +++ b/roles/get_image_hash/defaults/main.yml @@ -51,7 +51,7 @@ os_images: rootfs_url: https://mirror.openshift.com/pub/openshift-v4/aarch64/dependencies/rhcos/4.10/4.10.3/rhcos-4.10.3-aarch64-live-rootfs.aarch64.img version: 410.84.202201251210-0 -release_images: +release_images_defaults: - openshift_version: '4.6' cpu_architecture: x86_64 url: quay.io/openshift-release-dev/ocp-release:4.6.16-x86_64 @@ -78,6 +78,8 @@ release_images: url: quay.io/openshift-release-dev/ocp-release:4.10.10-aarch64 version: 4.10.10 +release_images: "{{ release_images_defaults }}" + assisted_service_image_repo_url: quay.io/edge-infrastructure assisted_installer_images: diff --git a/roles/get_image_hash/tasks/main.yml b/roles/get_image_hash/tasks/main.yml index fe219ccb..860c1c59 100644 --- a/roles/get_image_hash/tasks/main.yml +++ b/roles/get_image_hash/tasks/main.yml @@ -94,8 +94,9 @@ set_fact: assisted_installer_os_images: "{{ os_images }}" assisted_installer_release_images: "{{ release_images }}" - delegate_to: "assisted_installer" + delegate_to: "{{ item }}" delegate_facts: true + loop: "{{ destination_hosts }}" - name: "Set image hashes in {{ item }}" set_fact: diff --git a/roles/setup_ntp/templates/chrony.conf.j2 b/roles/setup_ntp/templates/chrony.conf.j2 index 67c83f1f..d5873346 100644 --- a/roles/setup_ntp/templates/chrony.conf.j2 +++ b/roles/setup_ntp/templates/chrony.conf.j2 @@ -20,4 +20,3 @@ server 127.0.0.1 {% for item in ntp_pool_servers %} server {{ item }} {% endfor %} -