diff --git a/multi-node-aio/build.sh b/multi-node-aio/build.sh index ee13430e..04c1d076 100755 --- a/multi-node-aio/build.sh +++ b/multi-node-aio/build.sh @@ -49,11 +49,12 @@ ansible-playbook -vv \ -e cinder_vm_server_ram=${CINDER_VM_SERVER_RAM:-"2048"} \ -e compute_vm_server_ram=${COMPUTE_VM_SERVER_RAM:-"8196"} \ -e infra_vm_server_ram=${INFRA_VM_SERVER_RAM:-"8196"} \ - -e loadbalancer_vm_server_ram=${LOADBALANCER_VM_SERVER_RAM:-"1024"} \ - -e logging_vm_server_ram=${LOGGING_VM_SERVER_RAM:-"1024"} \ - -e swift_vm_server_ram=${SWIFT_VM_SERVER_RAM:-"1024"} \ + -e loadbalancer_vm_server_ram=${LOADBALANCER_VM_SERVER_RAM:-"2048"} \ + -e logging_vm_server_ram=${LOGGING_VM_SERVER_RAM:-"2048"} \ + -e swift_vm_server_ram=${SWIFT_VM_SERVER_RAM:-"2048"} \ -e container_tech=${CONTAINER_TECH:-"lxc"} \ -e ipxe_kernel_url=${IPXE_KERNEL_URL:-"http://boot.ipxe.org/ipxe.lkrn"} \ -e ipxe_path_url=${IPXE_PATH_URL:-""} ${MNAIO_ANSIBLE_PARAMETERS} \ --force-handlers \ + --flush-cache \ playbooks/site.yml diff --git a/multi-node-aio/playbooks/deploy-pxe.yml b/multi-node-aio/playbooks/deploy-pxe.yml index 0b2bb4b9..96bb43b3 100644 --- a/multi-node-aio/playbooks/deploy-pxe.yml +++ b/multi-node-aio/playbooks/deploy-pxe.yml @@ -106,49 +106,60 @@ owner: root group: root - - name: network scripts for pxe + - name: Generate PXE network scripts for Debian Family template: - src: "pxe/configs/{{ ansible_os_family | lower }}/{{ item.src }}" + src: "pxe/configs/debian/{{ item.src }}" dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }} mode: "0644" owner: root group: root with_items: - src: basic-interface.cfg - dest: "basic-{{ ansible_os_family | lower }}-interface.cfg" + dest: "basic-debian-interface.cfg" dir: networking - src: vm-post-install-script.sh.j2 - dest: "vm-post-install-{{ ansible_os_family | lower }}-script.sh" + dest: "vm-post-install-debian-script.sh" dir: scripts - src: general-post-install-script.sh.j2 - dest: "general-post-install-{{ ansible_os_family | lower }}-script.sh" + dest: "general-post-install-debian-script.sh" dir: scripts + when: images[default_vm_image]['image_type'] | lower == "debian" - - name: network scripts for an MNAIO + - name: Generate guest networking scripts for Debian Family template: - src: "pxe/configs/{{ ansible_os_family | lower }}/{{ item.src }}" - dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }} - mode: "0644" - owner: root - group: root - when: - - groups['mnaio_hosts'] | default([]) | length > 0 - with_items: - - src: mnaio-bridges.cfg.j2 - dest: mnaio-bridges.cfg - dir: networking - - src: mnaio-post-install-script.sh.j2 - dest: mnaio-post-install-{{ ansible_os_family | lower }}-script.sh - dir: scripts - - - name: network scripts for servers - template: - src: "pxe/configs/{{ ansible_os_family | lower }}/vm-bridges.cfg.j2" + src: "pxe/configs/debian/vm-bridges.cfg.j2" dest: /var/www/pxe/networking/{{ hostvars[item]['server_hostname'] }}-bridges.cfg mode: "0644" owner: root group: root with_items: "{{ groups['pxe_servers'] }}" + when: images[default_vm_image]['image_type'] | lower == "debian" + + - name: Generate PXE network scripts for RedHat Family + template: + src: "pxe/configs/redhat/{{ item.src }}" + dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }} + mode: "0644" + owner: root + group: root + with_items: + - src: vm-post-install-script.sh.j2 + dest: "vm-post-install-redhat-script.sh" + dir: scripts + - src: general-post-install-script.sh.j2 + dest: "general-post-install-redhat-script.sh" + dir: scripts + when: images[default_vm_image]['image_type'] | lower == "redhat" + + - name: Generate systemd-network scripts for Red Hat Family + template: + src: "pxe/configs/redhat/systemd-network.sh.j2" + dest: /var/www/pxe/networking/{{ hostvars[item]['server_hostname'] }}-systemd-network.sh + mode: "0644" + owner: root + group: root + with_items: "{{ groups['pxe_servers'] }}" + when: images[default_vm_image]['image_type'] | lower == "redhat" - name: tftp configs for servers template: @@ -159,18 +170,9 @@ group: root with_items: "{{ groups['pxe_servers'] }}" - - name: Preseeds for pxe mnaio - template: - src: "pxe/configs/{{ ansible_os_family | lower }}/mnaio.config.j2" - dest: /var/www/pxe/configs/mnaio.config - mode: "0644" - owner: root - group: root - with_dict: "{{ images }}" - - name: Preseeds for pxe vm template: - src: "pxe/configs/{{ ansible_os_family | lower }}/vm.config.j2" + src: "pxe/configs/{{ images[default_vm_image]['image_type'] | lower }}/vm.config.j2" dest: /var/www/pxe/configs/vm.config mode: "0644" owner: root @@ -179,31 +181,13 @@ - name: Preseeds for pxe vm-compute template: - src: "pxe/configs/{{ ansible_os_family | lower }}/vm-compute.config.j2" + src: "pxe/configs/{{ images[default_vm_image]['image_type'] | lower }}/vm-compute.config.j2" dest: /var/www/pxe/configs/vm-compute.config mode: "0644" owner: root group: root with_dict: "{{ images }}" - - name: Preseeds for pxe compute - template: - src: "pxe/configs/{{ ansible_os_family | lower }}/compute.config.j2" - dest: /var/www/pxe/configs/compute.config - mode: "0644" - owner: root - group: root - with_dict: "{{ images }}" - - - name: Preseeds for pxe infra - template: - src: "pxe/configs/{{ ansible_os_family | lower }}/infra.config.j2" - dest: /var/www/pxe/configs/infra.config - mode: "0644" - owner: root - group: root - with_dict: "{{ images }}" - - name: Ensure permissions are correct file: dest: "{{ item }}" diff --git a/multi-node-aio/playbooks/group_vars/all.yml b/multi-node-aio/playbooks/group_vars/all.yml index 9cc8ec56..05972f22 100644 --- a/multi-node-aio/playbooks/group_vars/all.yml +++ b/multi-node-aio/playbooks/group_vars/all.yml @@ -26,6 +26,8 @@ default_ubuntu_mirror_proxy: 'http://10.0.2.1:3142/' default_ubuntu_mirror_hostname: archive.ubuntu.com default_ubuntu_mirror_directory: /ubuntu +default_proxy_url: 'http://10.0.2.1:3142/' + default_container_tech: "{{ container_tech | default('lxc') }}" ipxe_kernel_url: "http://boot.ipxe.org/ipxe.lkrn" @@ -48,21 +50,12 @@ images: image_netboot_kernel_url: "http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux" image_netboot_initrd_url: "http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz" image_configs: - mnaio: - url: "http://{{ tftp_server }}/configs/mnaio.config" - template_name: "mnaio.config" vm: url: "http://{{ tftp_server }}/configs/vm.config" template_name: "vm.config" vm-compute: url: "http://{{ tftp_server }}/configs/vm-compute.config" template_name: "vm-compute.config" - compute: - url: "http://{{ tftp_server }}/configs/compute.config" - template_name: "compute.config" - infra: - url: "http://{{ tftp_server }}/configs/infra.config" - template_name: "infra.config" ubuntu-16.04-amd64: image_type: "debian" image_os: "ubuntu" @@ -71,21 +64,12 @@ images: image_netboot_kernel_url: "http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux" image_netboot_initrd_url: "http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz" image_configs: - mnaio: - url: "http://{{ tftp_server }}/configs/mnaio.config" - template_name: "mnaio.config" vm: url: "http://{{ tftp_server }}/configs/vm.config" template_name: "vm.config" vm-compute: url: "http://{{ tftp_server }}/configs/vm-compute.config" template_name: "vm-compute.config" - compute: - url: "http://{{ tftp_server }}/configs/compute.config" - template_name: "compute.config" - infra: - url: "http://{{ tftp_server }}/configs/infra.config" - template_name: "infra.config" ubuntu-14.04-amd64: image_type: "debian" image_os: "ubuntu" @@ -94,21 +78,27 @@ images: image_netboot_kernel_url: "http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux" image_netboot_initrd_url: "http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz" image_configs: - mnaio: - url: "http://{{ tftp_server }}/configs/mnaio.config" - template_name: "mnaio.config" vm: url: "http://{{ tftp_server }}/configs/vm.config" template_name: "vm.config" vm-compute: url: "http://{{ tftp_server }}/configs/vm-compute.config" template_name: "vm-compute.config" - compute: - url: "http://{{ tftp_server }}/configs/compute.config" - template_name: "compute.config" - infra: - url: "http://{{ tftp_server }}/configs/infra.config" - template_name: "infra.config" + centos-7-amd64: + image_type: "redhat" + image_version: 7 + image_netboot_kernel_url: "http://mirrors.edge.kernel.org/centos/7/os/x86_64/images/pxeboot/vmlinuz" + image_netboot_initrd_url: "http://mirrors.edge.kernel.org/centos/7/os/x86_64/images/pxeboot/initrd.img" + image_repo_base_url: "http://mirrors.edge.kernel.org/centos/7" + image_kernel_options: "" + image_configs: + vm: + url: "http://{{ tftp_server }}/configs/vm.config" + template_name: "vm.config" + vm-compute: + url: "http://{{ tftp_server }}/configs/vm-compute.config" + template_name: "vm-compute.config" + # mnaio_data_disk: 'sdc' # str - not required, set this to define a given data disk if no data disk # is defined the largest unpartitioned disk will be used. mnaio_host_networks: diff --git a/multi-node-aio/playbooks/kvm/kvm-vm.xml.j2 b/multi-node-aio/playbooks/kvm/kvm-vm.xml.j2 index b7c55f32..5b0e50a9 100644 --- a/multi-node-aio/playbooks/kvm/kvm-vm.xml.j2 +++ b/multi-node-aio/playbooks/kvm/kvm-vm.xml.j2 @@ -82,7 +82,7 @@ <input type='keyboard' bus='ps2'/> - <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'> + <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us'> <listen type='address' address='127.0.0.1'/> </graphics> diff --git a/multi-node-aio/playbooks/pxe/configs/redhat/general-post-install-script.sh.j2 b/multi-node-aio/playbooks/pxe/configs/redhat/general-post-install-script.sh.j2 new file mode 100644 index 00000000..d472750c --- /dev/null +++ b/multi-node-aio/playbooks/pxe/configs/redhat/general-post-install-script.sh.j2 @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +wget --no-proxy http://{{ tftp_server }}/networking/$(cat /etc/hostname)-systemd-network.sh -O /opt/systemd-network.sh +chmod +x /opt/systemd-network.sh +/opt/systemd-network.sh diff --git a/multi-node-aio/playbooks/pxe/configs/redhat/systemd-network.sh.j2 b/multi-node-aio/playbooks/pxe/configs/redhat/systemd-network.sh.j2 new file mode 100644 index 00000000..f382330c --- /dev/null +++ b/multi-node-aio/playbooks/pxe/configs/redhat/systemd-network.sh.j2 @@ -0,0 +1,52 @@ +#!/bin/bash +# this script generates the networking using systemd-networkd +{% set server_networks = hostvars[item]['server_networks'] %} + +mkdir -p /etc/systemd/network +systemctl disable network +systemctl disable NetworkManager +systemctl enable systemd-networkd +systemctl enable systemd-resolved +systemctl start systemd-resolved +rm -f /etc/resolv.conf +ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf +{% if hostvars[item]['server_hostname'] == 'loadbalancer1' %} +# set nonlocal binding for haproxy +echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf +sysctl -p +{% endif %} + +{% for key, value in server_networks.items()|sort(attribute='1.iface') %} +# generate physical network devices +cat <<EOF >/etc/systemd/network/{{ value.iface }}.network +[Match] +Name={{ value.iface }} + +[Network] +Bridge=br-{{ key }} +EOF + +# generate bridge net devices +cat <<EOF >/etc/systemd/network/br-{{ key }}.netdev +[NetDev] +Name=br-{{ key }} +Kind=bridge +EOF + +# generate network files +cat <<EOF >/etc/systemd/network/br-{{ key }}.network +[Match] +Name=br-{{ key }} + +[Network] +{% if value.inet_type == 'dhcp' %} +DHCP=yes + +[DHCP] +UseDNS=yes +UseNTP=yes +{% elif value.address is defined %} +Address={{ value.address }} +{% endif %} +EOF +{% endfor %} diff --git a/multi-node-aio/playbooks/pxe/configs/redhat/vm-compute.config.j2 b/multi-node-aio/playbooks/pxe/configs/redhat/vm-compute.config.j2 new file mode 100644 index 00000000..5ef267bc --- /dev/null +++ b/multi-node-aio/playbooks/pxe/configs/redhat/vm-compute.config.j2 @@ -0,0 +1,63 @@ +# Server Kickstart - compute +install +text +lang en_US +keyboard us +timezone --utc Etc/UTC +auth --useshadow --enablemd5 +selinux --disabled +firewall --disabled +services --enabled=NetworkManager,sshd +eula --agreed +ignoredisk --only-use=vda +reboot + +bootloader --location=mbr +zerombr +clearpart --all --initlabel +part /boot --fstype ext3 --size=512 +part pv.01 --size=1 --grow +volgroup vmvg00 pv.01 +logvol / --fstype ext4 --name=root00 --vgname=vmvg00 --size=8192 +logvol swap --fstype swap --name=swap00 --vgname=vmvg00 --size=2048 +logvol /openstack --fstype ext4 --name=openstack00 --vgname=vmvg00 --size=16384 +logvol /var/lib/nova --fstype xfs --name=nova00 --vgname=vmvg00 --size=8192 --grow +rootpw secrete +repo --name=base --baseurl={{ images[default_vm_image]['image_repo_base_url'] }}/os/x86_64/ +repo --name=updates --baseurl={{ images[default_vm_image]['image_repo_base_url'] }}/updates/x86_64/ +url --url="{{ images[default_vm_image]['image_repo_base_url'] }}/os/x86_64/" --proxy {{ default_proxy_url }} + +%packages --nobase --ignoremissing +@core +wget +bridge-utils +dstat +git +python +systemd-networkd +systemd-resolved +tmux +vim +%end + +%post +(set -x +echo +echo "################################" +echo "# Running Post Configuration #" +echo "################################" +# install ssh key +mkdir -m0700 /root/.ssh/ +cat <<EOF >/root/.ssh/authorized_keys +{{ tftp_ssh_key }} +EOF +chmod 0600 /root/.ssh/authorized_keys + +# set apt-cacher-ng proxy +sed -i '/\[main\]/a proxy={{ default_proxy_url }}' /etc/yum.conf + +wget --no-proxy http://{{ tftp_server }}/scripts/general-post-install-redhat-script.sh -O /opt/general-post-install-script.sh +chmod +x /opt/general-post-install-script.sh +/opt/general-post-install-script.sh +) > /root/post_install.log 2>&1 +%end diff --git a/multi-node-aio/playbooks/pxe/configs/redhat/vm-post-install-script.sh.j2 b/multi-node-aio/playbooks/pxe/configs/redhat/vm-post-install-script.sh.j2 new file mode 100644 index 00000000..d472750c --- /dev/null +++ b/multi-node-aio/playbooks/pxe/configs/redhat/vm-post-install-script.sh.j2 @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +wget --no-proxy http://{{ tftp_server }}/networking/$(cat /etc/hostname)-systemd-network.sh -O /opt/systemd-network.sh +chmod +x /opt/systemd-network.sh +/opt/systemd-network.sh diff --git a/multi-node-aio/playbooks/pxe/configs/redhat/vm.config.j2 b/multi-node-aio/playbooks/pxe/configs/redhat/vm.config.j2 new file mode 100644 index 00000000..a701fdc7 --- /dev/null +++ b/multi-node-aio/playbooks/pxe/configs/redhat/vm.config.j2 @@ -0,0 +1,76 @@ +# Server Kickstart - vm +install +text +lang en_US +keyboard us +timezone --utc Etc/UTC +auth --useshadow --enablemd5 +selinux --disabled +firewall --disabled +services --enabled=NetworkManager,sshd +eula --agreed +ignoredisk --only-use=vda +reboot + +bootloader --location=mbr +zerombr +clearpart --all --initlabel +part /boot --fstype ext3 --size=512 +part pv.01 --size=1 --grow +volgroup vmvg00 pv.01 +logvol / --fstype ext4 --name=root00 --vgname=vmvg00 --size=8192 +logvol swap --fstype swap --name=swap00 --vgname=vmvg00 --size=2048 +logvol /openstack --fstype ext4 --name=openstack00 --vgname=vmvg00 --size=16384 +{% if default_container_tech == 'nspawn' %} +logvol /var/lib/machines --fstype ext4 --name=machines00 --vgname=vmvg00 --size=8192 --grow +{% elif default_container_tech == 'lxc' %} +logvol /var/lib/machines --fstype ext4 --name=machines00 --vgname=vmvg00 --size=4096 +logvol /var/lib/lxc --fstype ext4 --name=lxc00 --vgname=vmvg00 --size=8192 --grow +{% endif %} +rootpw secrete +repo --name=base --baseurl={{ images[default_vm_image]['image_repo_base_url'] }}/os/x86_64/ +repo --name=updates --baseurl={{ images[default_vm_image]['image_repo_base_url'] }}/updates/x86_64/ +url --url="{{ images[default_vm_image]['image_repo_base_url'] }}/os/x86_64/" --proxy {{ default_proxy_url }} + +%packages --nobase --ignoremissing +@core +wget +bridge-utils +btrfs-progs +dstat +git +python +systemd-networkd +systemd-resolved +tmux +vim +%end + +%post +(set -x +echo +echo "################################" +echo "# Running Post Configuration #" +echo "################################" +# install ssh key +mkdir -m0700 /root/.ssh/ +cat <<EOF >/root/.ssh/authorized_keys +{{ tftp_ssh_key }} +EOF +chmod 0600 /root/.ssh/authorized_keys + +# set apt-cacher-ng proxy +sed -i '/\[main\]/a proxy={{ default_proxy_url }}' /etc/yum.conf + +# kickstart has issues setting fstype to btrfs, so this converts the machines lvm partition to btrfs +modprobe btrfs +umount /dev/vmvg00/machines00 +btrfs-convert /dev/vmvg00/machines00 +sed -i '/vmvg00-machines00/d' /etc/fstab +echo "/dev/mapper/vmvg00-machines00 /var/lib/machines btrfs defaults 1 2" >> /etc/fstab + +wget --no-proxy http://{{ tftp_server }}/scripts/vm-post-install-redhat-script.sh -O /opt/vm-post-install-script.sh +chmod +x /opt/vm-post-install-script.sh +/opt/vm-post-install-script.sh +) > /root/post_install.log 2>&1 +%end diff --git a/multi-node-aio/playbooks/pxe/tftp/boot.ipxe.macaddr.j2 b/multi-node-aio/playbooks/pxe/tftp/boot.ipxe.macaddr.j2 index bd4c8675..26946a67 100644 --- a/multi-node-aio/playbooks/pxe/tftp/boot.ipxe.macaddr.j2 +++ b/multi-node-aio/playbooks/pxe/tftp/boot.ipxe.macaddr.j2 @@ -7,4 +7,7 @@ initrd {{ image_properties['image_netboot_initrd_url'] }} {% if image_properties['image_type'] == 'debian' %} imgargs linux hostname={{ server_vars['server_hostname'] }} {{ image_properties['image_kernel_options'] }} preseed/url={{ image_properties['image_configs'][server_vars['server_preseed_ks']]['url'] }} preseed/interactive=false netcfg/choose_interface={{ server_vars['server_default_interface'] }} netcfg/get_domain={{ server_vars['server_domain_name'] }} initrd=initrd.gz {{ server_vars['server_extra_options'] | default('') }} {% endif %} +{% if image_properties['image_type'] == 'redhat' %} +imgargs vmlinuz hostname={{ server_vars['server_hostname'] }} {{ image_properties['image_kernel_options'] }} ks={{ image_properties['image_configs'][server_vars['server_preseed_ks']]['url'] }} BOOTIF=${netX/mac} initrd=initrd.img {{ server_vars['server_extra_options'] | default('') }} +{% endif %} boot