From 038c73414e6a3793063680217e9720fb1a218758 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Wed, 18 Oct 2017 15:44:27 +0100
Subject: [PATCH] Add configuration for virtualised compute hosts

Hosts in the [compute] group will be configured as virtualised compute
hosts. These hosts are treated as part of the overcloud, and affected by
all overcloud commands.
---
 ansible/group_vars/all/compute                | 115 ++++++++++++++++++
 ansible/group_vars/all/kolla                  |   3 +
 ansible/group_vars/compute/ansible-user       |   7 ++
 ansible/group_vars/compute/bios               |   7 ++
 ansible/group_vars/compute/lvm                |   6 +
 ansible/group_vars/compute/network            |   6 +
 ansible/group_vars/compute/raid               |   7 ++
 ansible/group_vars/compute/sysctl             |   3 +
 ansible/group_vars/compute/users              |   4 +
 etc/kayobe/compute.yml                        | 101 +++++++++++++++
 .../group_vars/compute/network-interfaces     |  27 ++++
 etc/kayobe/inventory/groups                   |   5 +
 12 files changed, 291 insertions(+)
 create mode 100644 ansible/group_vars/all/compute
 create mode 100644 ansible/group_vars/compute/ansible-user
 create mode 100644 ansible/group_vars/compute/bios
 create mode 100644 ansible/group_vars/compute/lvm
 create mode 100644 ansible/group_vars/compute/network
 create mode 100644 ansible/group_vars/compute/raid
 create mode 100644 ansible/group_vars/compute/sysctl
 create mode 100644 ansible/group_vars/compute/users
 create mode 100644 etc/kayobe/compute.yml
 create mode 100644 etc/kayobe/inventory/group_vars/compute/network-interfaces

diff --git a/ansible/group_vars/all/compute b/ansible/group_vars/all/compute
new file mode 100644
index 000000000..0c3878052
--- /dev/null
+++ b/ansible/group_vars/all/compute
@@ -0,0 +1,115 @@
+---
+###############################################################################
+# Compute node configuration.
+
+# User with which to access the computes via SSH during bootstrap, in order
+# to setup the Kayobe user account.
+compute_bootstrap_user: "{{ lookup('env', 'USER') }}"
+
+###############################################################################
+# Compute network interface configuration.
+
+# List of networks to which compute nodes are attached.
+compute_network_interfaces: >
+  {{ (compute_default_network_interfaces +
+      compute_extra_network_interfaces) | unique | list }}
+
+# List of default networks to which compute nodes are attached.
+compute_default_network_interfaces: >
+  {{ [provision_oc_net_name,
+      internal_net_name,
+      storage_net_name] | unique | list }}
+
+# List of extra networks to which compute nodes are attached.
+compute_extra_network_interfaces: []
+
+###############################################################################
+# Compute node BIOS configuration.
+
+# Dict of compute BIOS options. Format is same as that used by stackhpc.drac
+# role.
+compute_bios_config: "{{ compute_bios_config_default | combine(compute_bios_config_extra) }}"
+
+# Dict of default compute BIOS options. Format is same as that used by
+# stackhpc.drac role.
+compute_bios_config_default: {}
+
+# Dict of additional compute BIOS options. Format is same as that used by
+# stackhpc.drac role.
+compute_bios_config_extra: {}
+
+###############################################################################
+# Compute node RAID configuration.
+
+# List of compute RAID volumes. Format is same as that used by stackhpc.drac
+# role.
+compute_raid_config: "{{ compute_raid_config_default + compute_raid_config_extra }}"
+
+# List of default compute RAID volumes. Format is same as that used by
+# stackhpc.drac role.
+compute_raid_config_default: []
+
+# List of additional compute RAID volumes. Format is same as that used by
+# stackhpc.drac role.
+compute_raid_config_extra: []
+
+###############################################################################
+# Compute node LVM configuration.
+
+# List of compute volume groups. See mrlesmithjr.manage-lvm role for
+# format.
+compute_lvm_groups: "{{ compute_lvm_groups_default + compute_lvm_groups_extra }}"
+
+# Default list of compute volume groups. See mrlesmithjr.manage-lvm role for
+# format.
+compute_lvm_groups_default:
+  - "{{ compute_lvm_group_data }}"
+
+# Additional list of compute volume groups. See mrlesmithjr.manage-lvm role
+# for format.
+compute_lvm_groups_extra: []
+
+# Compute LVM volume group for data. See mrlesmithjr.manage-lvm role for
+# format.
+compute_lvm_group_data:
+  vgname: data
+  disks: "{{ compute_lvm_group_data_disks | join(',') }}"
+  create: True
+  lvnames: "{{ compute_lvm_group_data_lvs }}"
+
+# List of disks for use by compute LVM data volume group. Default to an
+# invalid value to require configuration.
+compute_lvm_group_data_disks:
+  - changeme
+
+# List of LVM logical volumes for the data volume group.
+compute_lvm_group_data_lvs:
+  - "{{ compute_lvm_group_data_lv_docker_volumes }}"
+
+# Docker volumes LVM backing volume.
+compute_lvm_group_data_lv_docker_volumes:
+  lvname: docker-volumes
+  size: "{{ compute_lvm_group_data_lv_docker_volumes_size }}"
+  create: True
+  filesystem: "{{ compute_lvm_group_data_lv_docker_volumes_fs }}"
+  mount: True
+  mntp: /var/lib/docker/volumes
+
+# Size of docker volumes LVM backing volume.
+compute_lvm_group_data_lv_docker_volumes_size: 75%VG
+
+# Filesystem for docker volumes LVM backing volume. ext4 allows for shrinking.
+compute_lvm_group_data_lv_docker_volumes_fs: ext4
+
+###############################################################################
+# Compute node sysctl configuration.
+
+# Dict of sysctl parameters to set.
+compute_sysctl_parameters: {}
+
+###############################################################################
+# Compute node user configuration.
+
+# List of users to create. This should be in a format accepted by the
+# singleplatform-eng.users role.
+compute_users: "{{ users_default }}"
diff --git a/ansible/group_vars/all/kolla b/ansible/group_vars/all/kolla
index e1bacfe25..f60988934 100644
--- a/ansible/group_vars/all/kolla
+++ b/ansible/group_vars/all/kolla
@@ -213,6 +213,9 @@ kolla_overcloud_inventory_top_level_group_map:
   network:
     groups:
       - network
+  compute:
+    groups:
+      - compute
 
 # List of names of top level kolla-ansible groups. Any of these groups which
 # have no hosts mapped to them will be provided with an empty group definition.
diff --git a/ansible/group_vars/compute/ansible-user b/ansible/group_vars/compute/ansible-user
new file mode 100644
index 000000000..5f74de0c1
--- /dev/null
+++ b/ansible/group_vars/compute/ansible-user
@@ -0,0 +1,7 @@
+---
+# User with which to access the computes via SSH.
+ansible_user: "{{ kayobe_ansible_user }}"
+
+# User with which to access the computes before the kayobe_ansible_user
+# account has been created.
+bootstrap_user: "{{ compute_bootstrap_user }}"
diff --git a/ansible/group_vars/compute/bios b/ansible/group_vars/compute/bios
new file mode 100644
index 000000000..b53bc641c
--- /dev/null
+++ b/ansible/group_vars/compute/bios
@@ -0,0 +1,7 @@
+---
+###############################################################################
+# Compute node BIOS configuration.
+
+# Dict of monitoring node BIOS options. Format is same as that used by
+# stackhpc.drac role.
+bios_config: "{{ compute_bios_config }}"
diff --git a/ansible/group_vars/compute/lvm b/ansible/group_vars/compute/lvm
new file mode 100644
index 000000000..5c6889ec5
--- /dev/null
+++ b/ansible/group_vars/compute/lvm
@@ -0,0 +1,6 @@
+---
+###############################################################################
+# Compute node LVM configuration.
+
+# List of LVM volume groups.
+lvm_groups: "{{ compute_lvm_groups }}"
diff --git a/ansible/group_vars/compute/network b/ansible/group_vars/compute/network
new file mode 100644
index 000000000..94810f07a
--- /dev/null
+++ b/ansible/group_vars/compute/network
@@ -0,0 +1,6 @@
+---
+###############################################################################
+# Network interface attachments.
+
+# List of networks to which these nodes are attached.
+network_interfaces: "{{ compute_network_interfaces | unique | list }}"
diff --git a/ansible/group_vars/compute/raid b/ansible/group_vars/compute/raid
new file mode 100644
index 000000000..598d0b4bf
--- /dev/null
+++ b/ansible/group_vars/compute/raid
@@ -0,0 +1,7 @@
+---
+###############################################################################
+# Compute node RAID configuration.
+
+# List of compute node RAID volumes. Format is same as that used by
+# stackhpc.drac role.
+raid_config: "{{ compute_raid_config }}"
diff --git a/ansible/group_vars/compute/sysctl b/ansible/group_vars/compute/sysctl
new file mode 100644
index 000000000..16cf547d9
--- /dev/null
+++ b/ansible/group_vars/compute/sysctl
@@ -0,0 +1,3 @@
+---
+# Dict of sysctl parameters to set.
+sysctl_parameters: "{{ compute_sysctl_parameters }}"
diff --git a/ansible/group_vars/compute/users b/ansible/group_vars/compute/users
new file mode 100644
index 000000000..5e0c81588
--- /dev/null
+++ b/ansible/group_vars/compute/users
@@ -0,0 +1,4 @@
+---
+# List of users to create. This should be in a format accepted by the
+# singleplatform-eng.users role.
+users: "{{ compute_users }}"
diff --git a/etc/kayobe/compute.yml b/etc/kayobe/compute.yml
new file mode 100644
index 000000000..18fa9a878
--- /dev/null
+++ b/etc/kayobe/compute.yml
@@ -0,0 +1,101 @@
+---
+###############################################################################
+# Compute node configuration.
+
+# User with which to access the computes via SSH during bootstrap, in order
+# to setup the Kayobe user account.
+#compute_bootstrap_user:
+
+###############################################################################
+# Network interface attachments.
+
+# List of networks to which compute nodes are attached.
+#compute_network_interfaces:
+
+# List of default networks to which compute nodes are attached.
+#compute_default_network_interfaces:
+
+# List of extra networks to which compute nodes are attached.
+#compute_extra_network_interfaces:
+
+###############################################################################
+# Compute node BIOS configuration.
+
+# Dict of compute BIOS options. Format is same as that used by stackhpc.drac
+# role.
+#compute_bios_config:
+
+# Dict of default compute BIOS options. Format is same as that used by
+# stackhpc.drac role.
+#compute_bios_config_default:
+
+# Dict of additional compute BIOS options. Format is same as that used by
+# stackhpc.drac role.
+#compute_bios_config_extra:
+
+###############################################################################
+# Compute node RAID configuration.
+
+# List of compute RAID volumes. Format is same as that used by stackhpc.drac
+# role.
+#compute_raid_config:
+
+# List of default compute RAID volumes. Format is same as that used by
+# stackhpc.drac role.
+#compute_raid_config_default:
+
+# List of additional compute RAID volumes. Format is same as that used by
+# stackhpc.drac role.
+#compute_raid_config_extra:
+
+###############################################################################
+# Compute node LVM configuration.
+
+# List of compute volume groups. See mrlesmithjr.manage-lvm role for
+# format.
+#compute_lvm_groups:
+
+# Default list of compute volume groups. See mrlesmithjr.manage-lvm role for
+# format.
+#compute_lvm_groups_default:
+
+# Additional list of compute volume groups. See mrlesmithjr.manage-lvm role
+# for format.
+#compute_lvm_groups_extra:
+
+# Compute LVM volume group for data. See mrlesmithjr.manage-lvm role for
+# format.
+#compute_lvm_group_data:
+
+# List of disks for use by compute LVM data volume group. Default to an
+# invalid value to require configuration.
+#compute_lvm_group_data_disks:
+
+# List of LVM logical volumes for the data volume group.
+#compute_lvm_group_data_lvs:
+
+# Docker volumes LVM backing volume.
+#compute_lvm_group_data_lv_docker_volumes:
+
+# Size of docker volumes LVM backing volume.
+#compute_lvm_group_data_lv_docker_volumes_size:
+
+# Filesystem for docker volumes LVM backing volume. ext4 allows for shrinking.
+#compute_lvm_group_data_lv_docker_volumes_fs:
+
+###############################################################################
+# Compute node sysctl configuration.
+
+# Dict of sysctl parameters to set.
+#compute_sysctl_parameters:
+
+###############################################################################
+# Compute node user configuration.
+
+# List of users to create. This should be in a format accepted by the
+# singleplatform-eng.users role.
+#compute_users:
+
+###############################################################################
+# Dummy variable to allow Ansible to accept this file.
+workaround_ansible_issue_8743: yes
diff --git a/etc/kayobe/inventory/group_vars/compute/network-interfaces b/etc/kayobe/inventory/group_vars/compute/network-interfaces
new file mode 100644
index 000000000..421f69d39
--- /dev/null
+++ b/etc/kayobe/inventory/group_vars/compute/network-interfaces
@@ -0,0 +1,27 @@
+---
+###############################################################################
+# Network interface definitions for the compute group.
+
+# Overcloud provisioning network IP information.
+# provision_oc_net_interface:
+# provision_oc_net_bridge_ports:
+# provision_oc_net_bond_slaves:
+
+# Internal network IP information.
+# internal_net_interface:
+# internal_net_bridge_ports:
+# internal_net_bond_slaves:
+
+# External network IP information.
+# external_net_interface:
+# external_net_bridge_ports:
+# external_net_bond_slaves:
+
+# Storage network IP information.
+# storage_net_interface:
+# storage_net_bridge_ports:
+# storage_net_bond_slaves:
+
+###############################################################################
+# Dummy variable to allow Ansible to accept this file.
+workaround_ansible_issue_8743: yes
diff --git a/etc/kayobe/inventory/groups b/etc/kayobe/inventory/groups
index 02c5956d4..e7aef20e3 100644
--- a/etc/kayobe/inventory/groups
+++ b/etc/kayobe/inventory/groups
@@ -15,10 +15,14 @@ controllers
 [monitoring]
 # Empty group to provide declaration of monitoring group.
 
+[compute]
+# Empty group to provide declaration of compute group.
+
 [overcloud:children]
 controllers
 network
 monitoring
+compute
 
 [docker:children]
 # Hosts in this group will have Docker installed.
@@ -26,6 +30,7 @@ seed
 controllers
 network
 monitoring
+compute
 
 ###############################################################################
 # Networking groups.