diff options
15 files changed, 144 insertions, 86 deletions
diff --git a/ci/deploy.sh b/ci/deploy.sh index eacfe8cf0..adf96c332 100755 --- a/ci/deploy.sh +++ b/ci/deploy.sh @@ -53,6 +53,7 @@ $(notify "OPTIONS:" 2) -h Print this message and exit -l Lab-name -p Pod-name + -P Skip installation of package dependencies -s Deploy-scenario short-name -S Storage dir for VM images -L Deployment log path and file name @@ -97,6 +98,10 @@ $(notify "Input parameters to the build script are:" 2) -L Deployment log path and name, eg. -L /home/jenkins/job.log.tar.gz -l Lab name as defined in the configuration directory, e.g. lf -p POD name as defined in the configuration directory, e.g. pod2 +-P Skip installing dependency distro packages on current host + This flag should only be used if you have kept back older packages that + would be upgraded and that is undesirable on the current system. + Note that without the required packages, deploy will fail. -s Deployment-scenario, this points to a short deployment scenario name, which has to be defined in config directory (e.g. os-odl-nofeature-ha). -S Storage dir for VM images, default is mcp/deploy/images @@ -153,6 +158,7 @@ BASE_CONFIG_URI="file://${REPO_ROOT_PATH}/mcp/config" # Customize deploy workflow DRY_RUN=${DRY_RUN:-0} +USE_EXISTING_PKGS=${USE_EXISTING_PKGS:-0} USE_EXISTING_INFRA=${USE_EXISTING_INFRA:-0} INFRA_CREATION_ONLY=${INFRA_CREATION_ONLY:-0} NO_DEPLOY_ENVIRONMENT=${NO_DEPLOY_ENVIRONMENT:-0} @@ -170,7 +176,7 @@ source "${DEPLOY_DIR}/lib.sh" # set +x OPNFV_BRIDGE_IDX=0 -while getopts "b:B:dDfEFl:L:p:s:S:he" OPTION +while getopts "b:B:dDfEFl:L:p:Ps:S:he" OPTION do case $OPTION in b) @@ -223,6 +229,9 @@ do DEPLOY_TYPE='virtual' fi ;; + P) + USE_EXISTING_PKGS=1 + ;; s) DEPLOY_SCENARIO=${OPTARG} ;; @@ -269,26 +278,23 @@ pushd "${DEPLOY_DIR}" > /dev/null # Prepare the deploy config files based on lab/pod information, deployment # scenario, etc. -# Install required packages -[ -n "$(command -v apt-get)" ] && sudo apt-get install -y \ - git make rsync mkisofs curl virtinst cpu-checker qemu-kvm uuid-runtime \ - libvirt-bin cloud-guest-utils e2fsprogs kpartx -[ -n "$(command -v yum)" ] && sudo yum install -y --skip-broken \ - git make rsync genisoimage curl virt-install qemu-kvm util-linux \ - libvirt cloud-utils-growpart e2fsprogs kpartx - -# For baremetal, python is indirectly required for PDF parsing -if [ "${DEPLOY_TYPE}" = 'baremetal' ]; then - [ -n "$(command -v apt-get)" ] && sudo apt-get install -y \ - python python-ipaddress python-jinja2 python-yaml - [ -n "$(command -v yum)" ] && sudo yum install -y --skip-broken \ - python python-ipaddress python-jinja2 python-yaml -fi - -# AArch64 VMs use AAVMF (guest UEFI) -if [ "$(uname -m)" = 'aarch64' ]; then - [ -n "$(command -v apt-get)" ] && sudo apt-get install -y qemu-efi - [ -n "$(command -v yum)" ] && sudo yum install -y --skip-broken AAVMF +# Install required packages on jump server +if [ ${USE_EXISTING_PKGS} -eq 1 ]; then + notify "[NOTE] Skipping distro pkg installation\n" 2 1>&2 +else + notify "[NOTE] Installing required distro pkgs\n" 2 1>&2 + if [ -n "$(command -v apt-get)" ]; then + pkg_type='deb'; pkg_cmd='sudo apt-get install -y' + else + pkg_type='rpm'; pkg_cmd='sudo yum install -y --skip-broken' + fi + eval "$(parse_yaml "./requirements_${pkg_type}.yaml")" + for section in 'common' "${DEPLOY_TYPE}" "$(uname -m)"; do + section_var="requirements_pkg_${section}[*]" + pkg_list+=" ${!section_var}" + done + # shellcheck disable=SC2086 + ${pkg_cmd} ${pkg_list} fi if ! virsh list >/dev/null 2>&1; then diff --git a/docs/release/installation/installation.instruction.rst b/docs/release/installation/installation.instruction.rst index 502c75097..53ef809ac 100644 --- a/docs/release/installation/installation.instruction.rst +++ b/docs/release/installation/installation.instruction.rst @@ -191,10 +191,14 @@ installed on the Jumpserver: - CentOS 7 (recommended by Pharos specification); - Ubuntu Xenial; -**NOTE:** The install script expects 'libvirt' to be installed and running -on the Jumpserver. In case the packages are missing, the script will install +**NOTE:** The install script will automatically install all required distro +package dependencies on the Jumpserver, unless explicitly asked not to +(via `-P` deploy arg). This includes Python, QEMU, libvirt etc. + +**NOTE:** The install script expects 'libvirt' to be already running on the +Jumpserver. In case libvirt packages are missing, the script will install them; but depending on the OS distribution, the user might have to start the -'libvirtd' service manually. +'libvirtd' service manually, then run the deploy script again. ========================================== OPNFV Software Installation and Deployment diff --git a/mcp/config/states/baremetal_init b/mcp/config/states/baremetal_init index 7b532da52..a8bb3b970 100755 --- a/mcp/config/states/baremetal_init +++ b/mcp/config/states/baremetal_init @@ -31,3 +31,4 @@ wait_for 90 "! salt -C 'kvm* or cmp*' test.ping | " \ "tee /dev/stderr | grep -Fq 'Not connected'" salt -C 'kvm* or cmp*' state.apply linux,ntp,salt.minion +salt -C 'kvm* or cmp*' pkg.upgrade refresh=False diff --git a/mcp/config/states/virtual_control_plane b/mcp/config/states/virtual_control_plane index d92e99232..3856bef10 100755 --- a/mcp/config/states/virtual_control_plane +++ b/mcp/config/states/virtual_control_plane @@ -27,8 +27,6 @@ if [ "${ERASE_ENV}" -eq 1 ]; then fi # KVM libvirt first, VCP deployment -#FIXME Should be removed once upstream patch get merged -salt -C 'kvm*' group.add libvirtd wait_for 5 "salt -C 'kvm*' state.sls libvirt" salt -C 'kvm* or cmp*' state.apply salt diff --git a/mcp/patches/0011-service.horizon.server.cluster-Default-to-v2-API.patch b/mcp/patches/0011-service.horizon.server.cluster-Default-to-v2-API.patch deleted file mode 100644 index 2f2fb7c9c..000000000 --- a/mcp/patches/0011-service.horizon.server.cluster-Default-to-v2-API.patch +++ /dev/null @@ -1,33 +0,0 @@ -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -: Copyright (c) 2017 Mirantis Inc., Enea AB and others. -: -: All rights reserved. This program and the accompanying materials -: are made available under the terms of the Apache License, Version 2.0 -: which accompanies this distribution, and is available at -: http://www.apache.org/licenses/LICENSE-2.0 -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -From: Alexandru Avadanii <Alexandru.Avadanii@enea.com> -Date: Thu, 19 Oct 2017 02:03:01 +0200 -Subject: [PATCH] service.horizon.server.cluster: Default to v2 API - -Horizon service definition hardcodes the API version to v3, and -also overrides the value in our reclass model during interpolation. -Adjust the default to '2'. - -Signed-off-by: Ting Wu <ting.wu@enea.com> -Signed-off-by: Junaid Ali <junaidali.yahya@gmail.com> -Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com> ---- - -diff --git a/service/horizon/server/cluster.yml b/service/horizon/server/cluster.yml ---- a/service/horizon/server/cluster.yml -+++ b/service/horizon/server/cluster.yml -@@ -6,7 +6,7 @@ - _param: - horizon_version: liberty - horizon_identity_host: localhost -- horizon_identity_version: 3 -+ horizon_identity_version: 2 - horizon_identity_encryption: none - horizon_identity_endpoint_type: internalURL - horizon: diff --git a/mcp/patches/0013-libvirt-unix_sock_group-s-libvirtd-libvirt.patch b/mcp/patches/0013-libvirt-unix_sock_group-s-libvirtd-libvirt.patch new file mode 100644 index 000000000..1ac6cd157 --- /dev/null +++ b/mcp/patches/0013-libvirt-unix_sock_group-s-libvirtd-libvirt.patch @@ -0,0 +1,21 @@ +From: Alexandru Avadanii <Alexandru.Avadanii@enea.com> +Date: Sun, 20 Aug 2017 02:03:01 +0200 +Subject: [PATCH] libvirt: unix_sock_group: s/libvirtd/libvirt/ + +For Pike, libvirt 3.x is used, which uses "libvirt" by default. + +Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com> +--- + +diff --git a/libvirt/files/libvirtd.conf.Debian b/libvirt/files/libvirtd.conf.Debian +--- a/libvirt/files/libvirtd.conf.Debian ++++ b/libvirt/files/libvirtd.conf.Debian +@@ -81,7 +81,7 @@ + # without becoming root. + # + # This is restricted to 'root' by default. +-unix_sock_group = "libvirtd" ++unix_sock_group = "libvirt" + + # Set the UNIX socket permissions for the R/O socket. This is used + # for monitoring VM status only diff --git a/mcp/patches/patches.list b/mcp/patches/patches.list index fcbd3ae88..4214b63a7 100644 --- a/mcp/patches/patches.list +++ b/mcp/patches/patches.list @@ -14,5 +14,5 @@ /usr/share/salt-formulas/env: 0008-Handle-file_recv-option.patch /usr/share/salt-formulas/env: 0009-seedng-module-Sync-salt-version.patch /usr/share/salt-formulas/env: 0010-maas-region-allow-timeout-override.patch -/usr/share/salt-formulas/reclass: 0011-service.horizon.server.cluster-Default-to-v2-API.patch /usr/share/salt-formulas/env: 0012-linux.storage.lvm-Disable-filter.patch +/usr/share/salt-formulas/env: 0013-libvirt-unix_sock_group-s-libvirtd-libvirt.patch diff --git a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/infra/kvm.yml b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/infra/kvm.yml index fe9646535..dae8ad62f 100644 --- a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/infra/kvm.yml +++ b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/infra/kvm.yml @@ -7,6 +7,7 @@ ############################################################################## --- classes: + - system.linux.system.repo.glusterfs - service.keepalived.cluster.single - system.glusterfs.server.volume.glance - system.glusterfs.server.volume.keystone @@ -24,6 +25,7 @@ classes: parameters: _param: linux_system_codename: xenial + glusterfs_version: '3.13' cluster_vip_address: ${_param:infra_kvm_address} cluster_node01_address: ${_param:infra_kvm_node01_address} cluster_node02_address: ${_param:infra_kvm_node02_address} diff --git a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute.yml b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute.yml index 632404416..50241b4f0 100644 --- a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute.yml +++ b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute.yml @@ -7,6 +7,7 @@ ############################################################################## --- classes: + - system.linux.system.repo.glusterfs - system.linux.storage.loopback - system.glusterfs.client.cluster - system.nova.compute.cluster @@ -33,6 +34,7 @@ parameters: keepalived_vip_virtual_router_id: 69 loopback_device_size: 20 linux_system_codename: xenial + glusterfs_version: '3.13' # {dhcp,single}_nic are not used, but referenced dhcp_nic: ${_param:opnfv_vcp_vm_primary_interface} single_nic: ${_param:opnfv_vcp_vm_secondary_interface} diff --git a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute_pdf.yml.j2 b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute_pdf.yml.j2 index 3c51abf4a..cee41700e 100644 --- a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute_pdf.yml.j2 +++ b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_compute_pdf.yml.j2 @@ -27,8 +27,6 @@ {%- set vlan_mgmt = conf['net_config']['mgmt']['vlan'] -%} {%- set vlan_private = conf['net_config']['private']['vlan'] -%} {%- set vlan_public = conf['net_config']['public']['vlan'] -%} - - {%- set gateway_public = conf['net_config']['public']['gateway'] -%} {%- else -%} {%- set nic_admin = 'enp6s0' -%} {%- set nic_mgmt = 'enp6s0' -%} @@ -40,9 +38,9 @@ {%- endif -%} {#- Filter-out NIC duplicates by constructing a dict (used NICs only) -#} -{%- set nics = { nic_admin: True, nic_mgmt: True, nic_public: True} -%} +{%- set nics = { nic_admin: True, nic_mgmt: True } -%} -{%- set vlans = { vlan_admin: nic_admin, vlan_mgmt: nic_mgmt, vlan_public: nic_public} -%} +{%- set vlans = { vlan_admin: nic_admin, vlan_mgmt: nic_mgmt } -%} --- parameters: linux: @@ -94,31 +92,18 @@ parameters: mtu: ${_param:interface_mtu} br-ex: enabled: true - type: ovs_bridge - mtu: ${_param:interface_mtu} - address: ${_param:external_address} - netmask: 255.255.255.0 - proto: static - gateway: {{ gateway_public }} - floating-to-ex: - enabled: true type: ovs_port - port_type: patch bridge: br-floating - peer: ex-to-floating - ex-to-floating: - enabled: true - type: ovs_port - port_type: patch - bridge: br-ex - peer: floating-to-ex - {{ nic_public }}: - enabled: true + proto: static {%- if vlan_public and vlan_public != 'native' %} ovs_options: tag={{ vlan_public }} {%- endif %} + address: ${_param:external_address} + netmask: 255.255.255.0 + {{ nic_public }}: + enabled: true proto: manual ovs_port_type: OVSPort type: ovs_port - ovs_bridge: br-ex - bridge: br-ex + ovs_bridge: br-floating + bridge: br-floating diff --git a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_control.yml b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_control.yml index 2cf0596d2..0abe3655e 100644 --- a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_control.yml +++ b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_control.yml @@ -7,6 +7,7 @@ ############################################################################## --- classes: + - system.linux.system.repo.glusterfs - system.ceilometer.client - system.memcached.server.single - system.keystone.server.cluster @@ -37,6 +38,7 @@ parameters: cluster_node03_hostname: ${_param:openstack_control_node03_hostname} cluster_node03_address: ${_param:openstack_control_node03_address} nova_vncproxy_url: https://${_param:cluster_public_host}:6080 + glusterfs_version: '3.13' dhcp_nic: ${_param:opnfv_vcp_vm_primary_interface} single_nic: ${_param:opnfv_vcp_vm_secondary_interface} linux: diff --git a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_init.yml b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_init.yml index e2f6539c4..fe4be9d60 100644 --- a/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_init.yml +++ b/mcp/reclass/classes/cluster/baremetal-mcp-pike-common-ha/openstack_init.yml @@ -149,7 +149,7 @@ parameters: horizon_secret_key: opaesee8Que2yahJoh9fo0eefo1Aeyo6ahyei8zeiboh3aeth5loth7ieNa5xi5e horizon_identity_host: ${_param:openstack_control_address} horizon_identity_encryption: none - horizon_identity_version: 2 + horizon_identity_version: 3 mongodb_server_replica_set: ceilometer mongodb_ceilometer_password: opnfv_secret mongodb_admin_password: opnfv_secret diff --git a/mcp/reclass/classes/cluster/virtual-mcp-pike-common-noha/openstack_init.yml b/mcp/reclass/classes/cluster/virtual-mcp-pike-common-noha/openstack_init.yml index cf35a2b20..89b06fb7e 100644 --- a/mcp/reclass/classes/cluster/virtual-mcp-pike-common-noha/openstack_init.yml +++ b/mcp/reclass/classes/cluster/virtual-mcp-pike-common-noha/openstack_init.yml @@ -85,7 +85,7 @@ parameters: horizon_secret_key: opaesee8Que2yahJoh9fo0eefo1Aeyo6ahyei8zeiboh3aeth5loth7ieNa5xi5e horizon_identity_host: ${_param:cluster_vip_address} horizon_identity_encryption: none - horizon_identity_version: 2 + horizon_identity_version: 3 mongodb_server_replica_set: ceilometer mongodb_ceilometer_password: opnfv_secret mongodb_admin_password: opnfv_secret diff --git a/mcp/scripts/requirements_deb.yaml b/mcp/scripts/requirements_deb.yaml new file mode 100755 index 000000000..84b75ee65 --- /dev/null +++ b/mcp/scripts/requirements_deb.yaml @@ -0,0 +1,36 @@ +############################################################################## +# Copyright (c) 2017 Mirantis Inc., Enea AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +--- +requirements_pkg: + # Common pkgs required for all deploys, no matter the type, arch etc. + common: + - cloud-guest-utils + - cpu-checker + - curl + - e2fsprogs + - git + - kpartx + - libvirt-bin + - make + - mkisofs + - qemu-kvm + - rsync + - uuid-runtime + - virtinst + # Optional, arch-specific requirements, matched by key name = $(uname -m) + aarch64: + # AArch64 VMs use AAVMF (guest UEFI) + - ipxe-qemu + - qemu-efi + # Optional, deploy-type-specific requirements + baremetal: + # For baremetal, python is indirectly required for PDF parsing + - python + - python-ipaddress + - python-jinja2 + - python-yaml diff --git a/mcp/scripts/requirements_rpm.yaml b/mcp/scripts/requirements_rpm.yaml new file mode 100755 index 000000000..7a6ec38b9 --- /dev/null +++ b/mcp/scripts/requirements_rpm.yaml @@ -0,0 +1,34 @@ +############################################################################## +# Copyright (c) 2017 Mirantis Inc., Enea AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +--- +requirements_pkg: + # Common pkgs required for all deploys, no matter the type, arch etc. + common: + - cloud-utils-growpart + - curl + - e2fsprogs + - genisoimage + - git + - kpartx + - libvirt + - make + - qemu-kvm + - rsync + - util-linux + - virt-install + # Optional, arch-specific requirements, matched by key name = $(uname -m) + aarch64: + # AArch64 VMs use AAVMF (guest UEFI) + - AAVMF + # Optional, deploy-type-specific requirements + baremetal: + # For baremetal, python is indirectly required for PDF parsing + - python + - python-ipaddress + - python-jinja2 + - python-yaml |