Install Browbeat on a VM
Initial attempt at getting ansible to work with installing Browbeat in each of these situations: * Install on Undercloud from Local Machine * Install on Undercloud from Undercloud * Install on Non-Undercloud from Local Machine * Install on Non-Undercloud from Non-Undercloud Improvements/Cleanup: * Install instructions from Browbeat VM * Separate Browbeat machine from Undercloud * Flavor/Image upload via python-OpenStackClient from browbeat-venv * Separate install components into separate roles for easier debugging * Separate Flavors/Images Upload from browbeat install into separate role * Change order of vars for easier understanding * Support CentOS iptables setup with another var * Download and then convert qcow2 into raw image for upload Change-Id: I99365ef933c57a9ec0faedefcdc2d7c0f92f0ec4
This commit is contained in:
parent
4927a55241
commit
9b333bd72c
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
# Path of browbeat
|
|
||||||
browbeat_path: /home/stack/browbeat
|
|
||||||
|
|
||||||
# Home directory on undercloud
|
|
||||||
home_dir: /home/stack
|
|
||||||
|
|
||||||
# Login user for the remote hosts
|
|
||||||
host_remote_user: heat-admin
|
|
||||||
|
|
||||||
# Login user for the local/jump machine
|
|
||||||
local_remote_user: stack
|
|
11
ansible/gather/group_vars/all.yml
Normal file
11
ansible/gather/group_vars/all.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# Adjust Browbeat user if you are deploying Browbeat on a different machine than the Undercloud
|
||||||
|
browbeat_user: stack
|
||||||
|
# Login user for the local/jump machine (Typically Undercloud)
|
||||||
|
local_remote_user: stack
|
||||||
|
# Login user for the Overcloud hosts
|
||||||
|
host_remote_user: heat-admin
|
||||||
|
|
||||||
|
home_dir: "/home/{{browbeat_user}}"
|
||||||
|
browbeat_path: "{{home_dir}}/browbeat"
|
@ -28,7 +28,7 @@
|
|||||||
- common
|
- common
|
||||||
- undercloud
|
- undercloud
|
||||||
|
|
||||||
- hosts: undercloud
|
- hosts: browbeat
|
||||||
remote_user: "{{ local_remote_user }}"
|
remote_user: "{{ browbeat_user }}"
|
||||||
roles:
|
roles:
|
||||||
- dump-facts
|
- dump-facts
|
||||||
|
@ -1,10 +1,33 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
if [ ! $# -ge 1 ]; then
|
function usage
|
||||||
echo "Usage: ./generate_tripleo_hostfiles.sh <tripleo_ip_address>"
|
{
|
||||||
echo "Generates ssh config file to use with an TripleO undercloud host as a jumpbox and creates ansible inventory file."
|
echo "Usage: generate_tripleo_hostfile.sh [-t <tripleo_ip_address> [-l | --localhost]] | [-h | --help]"
|
||||||
exit
|
echo "Generates ssh config file to use with an TripleO undercloud host as a jumpbox and creates ansible inventory file."
|
||||||
|
}
|
||||||
|
|
||||||
|
uncomment_localhost=false
|
||||||
|
tripleo_ip_address=
|
||||||
|
while [ "$1" != "" ]; do
|
||||||
|
case $1 in
|
||||||
|
-l | --localhost ) uncomment_localhost=true
|
||||||
|
;;
|
||||||
|
-t | --tripleo_ip_address )
|
||||||
|
shift
|
||||||
|
tripleo_ip_address=$1
|
||||||
|
;;
|
||||||
|
-h | --help ) usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
* ) usage
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
if [ -z "$tripleo_ip_address" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
tripleo_ip_address=$1
|
|
||||||
ansible_inventory_file='hosts'
|
ansible_inventory_file='hosts'
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
ssh_config_file=${DIR}'/ssh-config'
|
ssh_config_file=${DIR}'/ssh-config'
|
||||||
@ -187,7 +210,17 @@ echo "---------------------------"
|
|||||||
echo "Creating ansible inventory file:"
|
echo "Creating ansible inventory file:"
|
||||||
echo "---------------------------"
|
echo "---------------------------"
|
||||||
echo ""
|
echo ""
|
||||||
echo "[undercloud]" | tee ${ansible_inventory_file}
|
echo "[browbeat]" | tee ${ansible_inventory_file}
|
||||||
|
echo "# Pick host depending on desired install" | tee -a ${ansible_inventory_file}
|
||||||
|
if [ "${uncomment_localhost}" = true ]; then
|
||||||
|
echo "localhost" | tee -a ${ansible_inventory_file}
|
||||||
|
echo "#undercloud" | tee -a ${ansible_inventory_file}
|
||||||
|
else
|
||||||
|
echo "#localhost" | tee -a ${ansible_inventory_file}
|
||||||
|
echo "undercloud" | tee -a ${ansible_inventory_file}
|
||||||
|
fi
|
||||||
|
echo "" | tee -a ${ansible_inventory_file}
|
||||||
|
echo "[undercloud]" | tee -a ${ansible_inventory_file}
|
||||||
echo "undercloud" | tee -a ${ansible_inventory_file}
|
echo "undercloud" | tee -a ${ansible_inventory_file}
|
||||||
if [[ ${#controller_hn} -gt 0 ]]; then
|
if [[ ${#controller_hn} -gt 0 ]]; then
|
||||||
echo "" | tee -a ${ansible_inventory_file}
|
echo "" | tee -a ${ansible_inventory_file}
|
||||||
|
@ -9,11 +9,18 @@
|
|||||||
- no-sshd-dns
|
- no-sshd-dns
|
||||||
- shaker-check
|
- shaker-check
|
||||||
|
|
||||||
- hosts: undercloud
|
- hosts: browbeat
|
||||||
remote_user: "{{ local_remote_user }}"
|
remote_user: "{{ browbeat_user }}"
|
||||||
roles:
|
roles:
|
||||||
- common
|
- common
|
||||||
- browbeat
|
- browbeat
|
||||||
|
- { role: browbeat-results, when: browbeat_results_in_httpd}
|
||||||
|
- firewall
|
||||||
|
- perfkitbenchmarker
|
||||||
|
- rally
|
||||||
|
- shaker
|
||||||
|
- flavors
|
||||||
|
- images
|
||||||
|
|
||||||
- hosts: compute
|
- hosts: compute
|
||||||
remote_user: "{{ host_remote_user }}"
|
remote_user: "{{ host_remote_user }}"
|
||||||
|
@ -1,52 +1,75 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Browbeat Install Configuration
|
||||||
|
########################################
|
||||||
|
|
||||||
|
# Adjust Browbeat user if you are deploying Browbeat on a different machine than the Undercloud
|
||||||
|
browbeat_user: stack
|
||||||
|
# Login user for the local/jump machine (Typically Undercloud)
|
||||||
|
local_remote_user: stack
|
||||||
|
# Login user for the Overcloud hosts
|
||||||
|
host_remote_user: heat-admin
|
||||||
|
|
||||||
# OpenStack Installer
|
# OpenStack Installer
|
||||||
|
# Tripleo is the only installer supported currently
|
||||||
tripleo: true
|
tripleo: true
|
||||||
|
|
||||||
browbeat_path: /home/stack/browbeat
|
home_dir: "/home/{{browbeat_user}}"
|
||||||
home_dir: /home/stack
|
browbeat_path: "{{home_dir}}/browbeat"
|
||||||
|
|
||||||
|
# The Overcloud RC file
|
||||||
|
overcloudrc: "{{home_dir}}/overcloudrc"
|
||||||
|
|
||||||
|
# The Overcloud CA cert file
|
||||||
|
# overcloud_ca_path: /etc/pki/ca-trust/source/anchors/overcloud.crt.pem
|
||||||
|
|
||||||
|
# The default Browbeat venv
|
||||||
|
browbeat_venv: "{{home_dir}}/browbeat-venv"
|
||||||
|
|
||||||
|
# The default Rally venv
|
||||||
|
rally_venv: "{{home_dir}}/rally-venv"
|
||||||
|
|
||||||
|
# Rally version to install
|
||||||
|
rally_version: 0.8.1
|
||||||
|
|
||||||
|
# The default Shaker venv
|
||||||
|
shaker_venv: "{{home_dir}}/shaker-venv"
|
||||||
|
|
||||||
|
# Shaker version to Install
|
||||||
|
shaker_version: 0.0.17
|
||||||
|
|
||||||
|
# PerfKitBenchmarker Settings
|
||||||
|
perfkit_venv: "{{home_dir}}/perfkit-venv"
|
||||||
|
perfkit_version: v1.7.0
|
||||||
|
|
||||||
# Configuration items to adjust browbeat results served through httpd
|
# Configuration items to adjust browbeat results served through httpd
|
||||||
browbeat_results_port: 9001
|
browbeat_results_port: 9001
|
||||||
browbeat_results_in_httpd: true
|
browbeat_results_in_httpd: true
|
||||||
supported_distro: ((ansible_distribution == "CentOS" && ansible_distribution_major_version >= "7") or
|
supported_distro: ((ansible_distribution == "CentOS" && ansible_distribution_major_version >= "7") or
|
||||||
(ansible_distribution == "RedHat" && ansible_distribution_major_version >= "7"))
|
(ansible_distribution == "RedHat" && ansible_distribution_major_version >= "7"))
|
||||||
|
|
||||||
# Login user for the remote hosts
|
# iptables file - RHEL (/etc/sysconfig/iptables) CentOS (/etc/sysconfig/iptables-config)
|
||||||
host_remote_user: heat-admin
|
iptables_file: /etc/sysconfig/iptables
|
||||||
# Login user for the local/jump machine
|
|
||||||
local_remote_user: stack
|
|
||||||
|
|
||||||
# The Overcloud RC file
|
########################################
|
||||||
overcloudrc: /home/stack/overcloudrc
|
# Other Install Configuration Items
|
||||||
|
########################################
|
||||||
# The Overcloud CA cert file
|
|
||||||
# overcloud_ca_path: /etc/pki/ca-trust/source/anchors/overcloud.crt.pem
|
|
||||||
|
|
||||||
# The default Browbeat venv
|
|
||||||
browbeat_venv: /home/stack/browbeat-venv
|
|
||||||
|
|
||||||
# The default Rally venv
|
|
||||||
rally_venv: /home/stack/rally-venv
|
|
||||||
|
|
||||||
# Rally version to install
|
|
||||||
rally_version: 0.8.1
|
|
||||||
|
|
||||||
# The default Shaker venv
|
|
||||||
shaker_venv: /home/stack/shaker-venv
|
|
||||||
|
|
||||||
# Shaker version to Install
|
|
||||||
shaker_version: 0.0.17
|
|
||||||
|
|
||||||
# PerfKitBenchmarker Settings
|
|
||||||
perfkit_venv: /home/stack/perfkit-venv
|
|
||||||
perfkit_version: v1.7.0
|
|
||||||
|
|
||||||
# Guest images for the Overcloud
|
# Guest images for the Overcloud
|
||||||
|
# Note hash key name must match intended name for image upload to
|
||||||
|
# work consistently (Ex. images['cirros'].name == 'cirros')
|
||||||
images:
|
images:
|
||||||
centos7:
|
centos7:
|
||||||
|
name: centos7
|
||||||
url: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
|
url: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
|
||||||
|
type: qcow2
|
||||||
|
convert_to_raw: true
|
||||||
cirros:
|
cirros:
|
||||||
url: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
|
name: cirros
|
||||||
|
url: http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
|
||||||
|
type: qcow2
|
||||||
|
convert_to_raw: true
|
||||||
|
|
||||||
# DNS Server to add
|
# DNS Server to add
|
||||||
dns_server: 8.8.8.8
|
dns_server: 8.8.8.8
|
||||||
|
17
ansible/install/roles/browbeat-results/handlers/main.yml
Normal file
17
ansible/install/roles/browbeat-results/handlers/main.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Browbeat Results handlers
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: start httpd
|
||||||
|
service:
|
||||||
|
name: httpd
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: restart httpd
|
||||||
|
service:
|
||||||
|
name: httpd
|
||||||
|
state: restarted
|
||||||
|
become: true
|
62
ansible/install/roles/browbeat-results/tasks/main.yml
Normal file
62
ansible/install/roles/browbeat-results/tasks/main.yml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Browbeat Results via httpd
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: Install httpd
|
||||||
|
yum:
|
||||||
|
name: httpd
|
||||||
|
state: present
|
||||||
|
become: true
|
||||||
|
notify:
|
||||||
|
- start httpd
|
||||||
|
|
||||||
|
- name: Remove welcome.conf if it exists
|
||||||
|
file:
|
||||||
|
path: /etc/httpd/conf.d/welcome.conf
|
||||||
|
state: absent
|
||||||
|
become: true
|
||||||
|
notify:
|
||||||
|
- restart httpd
|
||||||
|
|
||||||
|
- name: Setup browbeat.conf in /etc/httpd/conf.d
|
||||||
|
template:
|
||||||
|
src: 00-browbeat.conf.j2
|
||||||
|
dest: "/etc/httpd/conf.d/00-browbeat-{{browbeat_user}}.conf"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
become: true
|
||||||
|
notify:
|
||||||
|
- restart httpd
|
||||||
|
|
||||||
|
- name: Set seboolean(httpd_read_user_content)
|
||||||
|
seboolean:
|
||||||
|
name: httpd_read_user_content
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Allow httpd to serve content in "{{ home_dir }}"
|
||||||
|
file:
|
||||||
|
path: "{{ home_dir }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
# (akrzos) Port 9000 is already in use by zaqar-server with Newton and thus the fact that likely the
|
||||||
|
# user will choose a port that is not enabled by selinux to allow httpd to listen, we need to modify
|
||||||
|
# the ports enabled by selinux for httpd. If the port is already defined you will run into this
|
||||||
|
# issue if you use the "seport" ansible module:
|
||||||
|
# https://github.com/ansible/ansible-modules-extras/pull/2694
|
||||||
|
# This is not in upstream Ansible releases as of 2.1.1.0
|
||||||
|
- name: Allow httpd to listen to port ({{browbeat_results_port}})
|
||||||
|
shell: "/usr/sbin/semanage port -m -t http_port_t -p tcp {{browbeat_results_port}}"
|
||||||
|
become: true
|
||||||
|
register: seport_modified
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
# If port can not be modified, it likely has to be added (Ex. Port 9002)
|
||||||
|
- name: Allow httpd to listen to port ({{browbeat_results_port}}) via add
|
||||||
|
shell: "/usr/sbin/semanage port -a -t http_port_t -p tcp {{browbeat_results_port}}"
|
||||||
|
become: true
|
||||||
|
when: seport_modified.rc != 0
|
@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
#
|
|
||||||
# Browbeat installer handlers
|
|
||||||
#
|
|
||||||
|
|
||||||
- name: restart httpd
|
|
||||||
service: name=httpd state=restarted
|
|
||||||
become: true
|
|
@ -8,24 +8,33 @@
|
|||||||
when: not supported_distro
|
when: not supported_distro
|
||||||
|
|
||||||
- name: Install python development tools
|
- name: Install python development tools
|
||||||
yum: name=python-devel state=present
|
yum:
|
||||||
|
name: python-devel
|
||||||
|
state: present
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Install dependencies for CentOS
|
- name: Install dependencies for CentOS
|
||||||
yum: name={{ item }} state=present
|
yum:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: present
|
||||||
become: true
|
become: true
|
||||||
with_items:
|
with_items:
|
||||||
- libffi-devel
|
|
||||||
- openssl-devel
|
|
||||||
- gcc
|
- gcc
|
||||||
- gcc-c++
|
- gcc-c++
|
||||||
|
- libffi-devel
|
||||||
|
- libsemanage-python
|
||||||
|
- openssl-devel
|
||||||
|
- policycoreutils-python
|
||||||
|
|
||||||
- name: Install pip
|
- name: Install pip
|
||||||
easy_install: name=pip
|
easy_install:
|
||||||
|
name: pip
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Update virtualenv and setuptools
|
- name: Update virtualenv and setuptools
|
||||||
pip: name={{item}} state=latest
|
pip:
|
||||||
|
name: "{{item}}"
|
||||||
|
state: latest
|
||||||
become: true
|
become: true
|
||||||
with_items:
|
with_items:
|
||||||
- virtualenv
|
- virtualenv
|
||||||
@ -34,299 +43,47 @@
|
|||||||
- name: Create browbeat virtualenv
|
- name: Create browbeat virtualenv
|
||||||
command: virtualenv {{ browbeat_venv }} creates={{ browbeat_venv }}
|
command: virtualenv {{ browbeat_venv }} creates={{ browbeat_venv }}
|
||||||
|
|
||||||
- name: Create perfkit virtualenv
|
|
||||||
command: virtualenv {{ perfkit_venv }} creates={{ perfkit_venv }}
|
|
||||||
|
|
||||||
- name: Create rally virtualenv
|
|
||||||
command: virtualenv {{ rally_venv }} creates={{ rally_venv }}
|
|
||||||
|
|
||||||
- name: Create shaker virtualenv
|
|
||||||
command: virtualenv {{ shaker_venv }} creates={{ shaker_venv }}
|
|
||||||
|
|
||||||
- name: Rally Add browbeat to Python path
|
|
||||||
shell: echo 'export PYTHONPATH=$PYTHONPATH:{{ browbeat_path }}/lib' >> {{ rally_venv }}/bin/activate
|
|
||||||
|
|
||||||
- name: Setup browbeat-venv CA certificate path
|
- name: Setup browbeat-venv CA certificate path
|
||||||
lineinfile:
|
lineinfile:
|
||||||
dest: "{{ browbeat_venv }}/bin/activate"
|
dest: "{{ browbeat_venv }}/bin/activate"
|
||||||
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
||||||
when: overcloud_ca_path is defined
|
when: overcloud_ca_path is defined
|
||||||
|
|
||||||
- name: Setup perfkit-venv CA certificate path
|
|
||||||
lineinfile:
|
|
||||||
dest: "{{ perfkit_venv }}/bin/activate"
|
|
||||||
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
|
||||||
when: overcloud_ca_path is defined
|
|
||||||
|
|
||||||
- name: Setup rally-venv CA certificate path
|
|
||||||
lineinfile:
|
|
||||||
dest: "{{ rally_venv }}/bin/activate"
|
|
||||||
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
|
||||||
when: overcloud_ca_path is defined
|
|
||||||
|
|
||||||
- name: Setup shaker-venv CA certificate path
|
|
||||||
lineinfile:
|
|
||||||
dest: "{{ shaker_venv }}/bin/activate"
|
|
||||||
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
|
||||||
when: overcloud_ca_path is defined
|
|
||||||
|
|
||||||
- name: Determine if browbeat directory exists already
|
- name: Determine if browbeat directory exists already
|
||||||
stat: path={{ browbeat_path }}
|
stat:
|
||||||
|
path: "{{ browbeat_path }}"
|
||||||
register: browbeat_exists
|
register: browbeat_exists
|
||||||
|
|
||||||
- debug: msg="Browbeat directory exists already."
|
- debug: msg="Browbeat directory exists already."
|
||||||
when: browbeat_exists.stat.isdir is defined and browbeat_exists.stat.isdir
|
when: browbeat_exists.stat.isdir is defined and browbeat_exists.stat.isdir
|
||||||
|
|
||||||
- name: Clone browbeat on undercloud
|
- name: Clone browbeat on undercloud
|
||||||
git: repo=https://github.com/openstack/browbeat.git dest={{ browbeat_path }} version=master
|
git:
|
||||||
|
repo: https://github.com/openstack/browbeat.git
|
||||||
|
dest: "{{ browbeat_path }}"
|
||||||
|
version: master
|
||||||
when: browbeat_exists.stat.isdir is undefined
|
when: browbeat_exists.stat.isdir is undefined
|
||||||
|
|
||||||
- name: Generate hosts and ssh-config on undercloud
|
- name: Determine if generate_tripleo_hostfile has been run
|
||||||
shell: . {{ home_dir }}/stackrc; {{ browbeat_path }}/ansible/generate_tripleo_hostfile.sh localhost
|
stat:
|
||||||
when: tripleo
|
path: "{{ browbeat_path }}/ansible/hosts"
|
||||||
|
register: hosts_file_exists
|
||||||
|
|
||||||
|
- debug: msg="Hosts file is already generated."
|
||||||
|
when: hosts_file_exists.stat.exists and hosts_file_exists.stat.isreg
|
||||||
|
|
||||||
|
- name: Generate hosts and ssh-config on Browbeat Machine
|
||||||
|
shell: . {{ home_dir }}/stackrc; {{ browbeat_path }}/ansible/generate_tripleo_hostfile.sh -t localhost
|
||||||
|
when: "(tripleo == true and (hosts_file_exists.stat.exists == false or hosts_file_exists.stat.isreg == false))"
|
||||||
|
|
||||||
- name: Move files to correct location
|
- name: Move files to correct location
|
||||||
command: mv {{ home_dir }}/{{item}} {{ browbeat_path }}/ansible/{{item}}
|
command: mv {{ home_dir }}/{{item}} {{ browbeat_path }}/ansible/{{item}}
|
||||||
with_items:
|
with_items:
|
||||||
- hosts
|
- hosts
|
||||||
- heat-admin-id_rsa
|
- heat-admin-id_rsa
|
||||||
|
when: "(tripleo == true and (hosts_file_exists.stat.exists == false or hosts_file_exists.stat.isreg == false))"
|
||||||
|
|
||||||
- name: Install requirements.txt into browbeat-venv
|
- name: Install requirements.txt into browbeat-venv
|
||||||
pip: requirements={{ browbeat_path }}/requirements.txt virtualenv={{ browbeat_venv }}
|
|
||||||
|
|
||||||
# PerfKitBenchmarker Install
|
|
||||||
- name: Determine if PerfKitBenchmarker is already cloned
|
|
||||||
stat: path={{ perfkit_venv }}/PerfKitBenchmarker
|
|
||||||
register: perfkit_exists
|
|
||||||
|
|
||||||
- debug: msg="PerfKitBenchmarker already exists on the host"
|
|
||||||
when: perfkit_exists.stat.isdir is defined and perfkit_exists.stat.isdir
|
|
||||||
|
|
||||||
- name: Clone PerfKitBenchmarker on undercloud
|
|
||||||
git:
|
|
||||||
repo: https://github.com/GoogleCloudPlatform/PerfKitBenchmarker.git
|
|
||||||
dest: "{{perfkit_venv}}/PerfKitBenchmarker"
|
|
||||||
version: "{{perfkit_version}}"
|
|
||||||
when: perfkit_exists.stat.isdir is undefined
|
|
||||||
|
|
||||||
- name: Install PerfKitBenchmarker requirements into perfkit-venv
|
|
||||||
pip:
|
pip:
|
||||||
requirements: "{{perfkit_venv}}/PerfKitBenchmarker/requirements.txt"
|
requirements: "{{ browbeat_path }}/requirements.txt"
|
||||||
virtualenv: "{{perfkit_venv}}"
|
virtualenv: "{{ browbeat_venv }}"
|
||||||
|
|
||||||
- name: Install PerfKitBenchmarker Openstack requirements into perfkit-venv
|
|
||||||
pip:
|
|
||||||
requirements: "{{ perfkit_venv }}/PerfKitBenchmarker/perfkitbenchmarker/providers/openstack/requirements.txt"
|
|
||||||
virtualenv: "{{perfkit_venv}}"
|
|
||||||
|
|
||||||
# (akrzos) - Using 2.6 seems most stable, Using latest or >2.6 as per PerfKitBenchmarker
|
|
||||||
# openstack/requirements.txt results in an openstack cli error.
|
|
||||||
- name: Downgrade python-openstackclient inside perfkit-venv
|
|
||||||
pip:
|
|
||||||
name: python-openstackclient
|
|
||||||
version: 2.6.0
|
|
||||||
virtualenv: "{{perfkit_venv}}"
|
|
||||||
# End PerfKitBenchmarker Install
|
|
||||||
|
|
||||||
- name: Install rally into rally-venv
|
|
||||||
pip: name=rally version={{ rally_version }} virtualenv={{ rally_venv }}
|
|
||||||
|
|
||||||
- name: Install elasticsearch into rally-venv
|
|
||||||
pip: name=elasticsearch virtualenv={{ rally_venv }}
|
|
||||||
|
|
||||||
- name: Setup rally database
|
|
||||||
shell: . {{ rally_venv }}/bin/activate; rally-manage db recreate
|
|
||||||
|
|
||||||
- name: Setup rally deployment
|
|
||||||
shell: . {{ rally_venv }}/bin/activate; . {{ overcloudrc }}; rally deployment create --fromenv --name overcloud
|
|
||||||
|
|
||||||
- name: Install shaker
|
|
||||||
pip: name=pyshaker version={{ shaker_version }} virtualenv={{ shaker_venv }}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Serve results out of httpd if browbeat_results_in_httpd is set to true
|
|
||||||
#
|
|
||||||
|
|
||||||
- name: Setup browbeat.conf in /etc/httpd/conf.d
|
|
||||||
template:
|
|
||||||
src: 00-browbeat.conf.j2
|
|
||||||
dest: /etc/httpd/conf.d/00-browbeat.conf
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
mode: 0644
|
|
||||||
become: true
|
|
||||||
when: browbeat_results_in_httpd
|
|
||||||
notify:
|
|
||||||
- restart httpd
|
|
||||||
|
|
||||||
- name: Set seboolean(httpd_read_user_content)
|
|
||||||
seboolean: name=httpd_read_user_content state=yes persistent=yes
|
|
||||||
become: true
|
|
||||||
when: browbeat_results_in_httpd
|
|
||||||
|
|
||||||
- name: Allow httpd to serve content in "{{ home_dir }}"
|
|
||||||
file: path="{{ home_dir }}" state=directory mode=0755
|
|
||||||
when: browbeat_results_in_httpd
|
|
||||||
|
|
||||||
# (akrzos) Port 9000 is already in use by zaqar-server with Newton and thus the fact that likely the
|
|
||||||
# user will choose a port that is not enabled by selinux to allow httpd to listen, we need to modify
|
|
||||||
# the ports enabled by selinux for httpd. If the port is already defined you will run into this
|
|
||||||
# issue if you use the "seport" ansible module:
|
|
||||||
# https://github.com/ansible/ansible-modules-extras/pull/2694
|
|
||||||
# This is not in upstream Ansible releases as of 2.1.1.0
|
|
||||||
- name: Allow httpd to listen to port ({{browbeat_results_port}})
|
|
||||||
shell: "/usr/sbin/semanage port -m -t http_port_t -p tcp {{browbeat_results_port}}"
|
|
||||||
become: true
|
|
||||||
when: browbeat_results_in_httpd
|
|
||||||
|
|
||||||
### Begin Shaker port and browbeat_results_port firewall tasks###
|
|
||||||
# Firewalld
|
|
||||||
- name: Determine if firewalld is in use
|
|
||||||
shell: systemctl is-enabled firewalld.service | egrep -qv 'masked|disabled'
|
|
||||||
ignore_errors: true
|
|
||||||
register: firewalld_in_use
|
|
||||||
no_log: true
|
|
||||||
tags:
|
|
||||||
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
|
||||||
# Need to check if firewall is in use
|
|
||||||
- skip_ansible_lint
|
|
||||||
|
|
||||||
- name: Determine if firewalld is active
|
|
||||||
shell: systemctl is-active firewalld.service | egrep -vq 'inactive|unknown'
|
|
||||||
ignore_errors: true
|
|
||||||
register: firewalld_is_active
|
|
||||||
no_log: true
|
|
||||||
tags:
|
|
||||||
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
|
||||||
# Need to check if firewall is active
|
|
||||||
- skip_ansible_lint
|
|
||||||
|
|
||||||
- name: (shaker) Determine if TCP/{{shaker_port}} is already active
|
|
||||||
shell: firewall-cmd --list-ports | egrep -q "^{{shaker_port}}/tcp"
|
|
||||||
ignore_errors: true
|
|
||||||
register: firewalld_shaker_port_exists
|
|
||||||
no_log: true
|
|
||||||
tags:
|
|
||||||
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
|
||||||
# Need to check if port is already active
|
|
||||||
- skip_ansible_lint
|
|
||||||
|
|
||||||
- name: (browbeat_results) Determine if TCP/{{browbeat_results_port}} is already active
|
|
||||||
shell: firewall-cmd --list-ports | egrep -q "^{{browbeat_results_port}}/tcp"
|
|
||||||
when: browbeat_results_in_httpd
|
|
||||||
ignore_errors: true
|
|
||||||
register: firewalld_browbeat_results_port_exists
|
|
||||||
no_log: true
|
|
||||||
tags:
|
|
||||||
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
|
||||||
# Need to check if port is already active
|
|
||||||
- skip_ansible_lint
|
|
||||||
|
|
||||||
# add firewall rule via firewall-cmd
|
|
||||||
- name: (shaker) Add firewall rule for TCP/{{shaker_port}} (firewalld)
|
|
||||||
command: "{{ item }}"
|
|
||||||
with_items:
|
|
||||||
- firewall-cmd --zone=public --add-port={{shaker_port}}/tcp --permanent
|
|
||||||
- firewall-cmd --reload
|
|
||||||
ignore_errors: true
|
|
||||||
become: true
|
|
||||||
when: firewalld_in_use.rc == 0 and firewalld_is_active.rc == 0 and firewalld_shaker_port_exists.rc != 0
|
|
||||||
|
|
||||||
- name: (browbeat_results) Add firewall rule for TCP/{{browbeat_results_port}} (firewalld)
|
|
||||||
command: "{{ item }}"
|
|
||||||
with_items:
|
|
||||||
- firewall-cmd --zone=public --add-port={{browbeat_results_port}}/tcp --permanent
|
|
||||||
- firewall-cmd --reload
|
|
||||||
ignore_errors: true
|
|
||||||
become: true
|
|
||||||
when: browbeat_results_in_httpd and firewalld_in_use.rc == 0 and firewalld_is_active.rc == 0 and firewalld_browbeat_results_port_exists.rc != 0
|
|
||||||
|
|
||||||
# iptables-services
|
|
||||||
- name: (shaker) check firewall rules for TCP/{{shaker_port}} (iptables-services)
|
|
||||||
shell: grep "dport {{shaker_port}} \-j ACCEPT" /etc/sysconfig/iptables | wc -l
|
|
||||||
ignore_errors: true
|
|
||||||
become: true
|
|
||||||
register: iptables_shaker_port_exists
|
|
||||||
failed_when: iptables_shaker_port_exists == 127
|
|
||||||
no_log: true
|
|
||||||
tags:
|
|
||||||
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
|
||||||
# Need to check if port is already active
|
|
||||||
- skip_ansible_lint
|
|
||||||
|
|
||||||
- name: (browbeat_results) Check firewall rules for TCP/{{browbeat_results_port}} (iptables-services)
|
|
||||||
shell: grep "dport {{browbeat_results_port}} \-j ACCEPT" /etc/sysconfig/iptables | wc -l
|
|
||||||
when: browbeat_results_in_httpd
|
|
||||||
ignore_errors: true
|
|
||||||
become: true
|
|
||||||
register: iptables_browbeat_results_port_exists
|
|
||||||
failed_when: iptables_browbeat_results_port_exists == 127
|
|
||||||
no_log: true
|
|
||||||
tags:
|
|
||||||
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
|
||||||
# Need to check if port is already active
|
|
||||||
- skip_ansible_lint
|
|
||||||
|
|
||||||
- name: (shaker) Add firewall rule for TCP/{{shaker_port}} (iptables-services)
|
|
||||||
lineinfile:
|
|
||||||
dest: /etc/sysconfig/iptables
|
|
||||||
line: '-A INPUT -p tcp -m tcp --dport {{shaker_port}} -j ACCEPT'
|
|
||||||
insertbefore: '^-A INPUT -i lo'
|
|
||||||
backup: yes
|
|
||||||
become: true
|
|
||||||
when: firewalld_in_use.rc != 0 and firewalld_is_active.rc != 0 and iptables_shaker_port_exists.stdout|int == 0
|
|
||||||
register: iptables_needs_restart
|
|
||||||
|
|
||||||
- name: (browbeat_results) Add firewall rule for TCP/{{browbeat_results_port}} (iptables-services)
|
|
||||||
lineinfile:
|
|
||||||
dest: /etc/sysconfig/iptables
|
|
||||||
line: '-A INPUT -p tcp -m tcp --dport {{browbeat_results_port}} -j ACCEPT'
|
|
||||||
insertbefore: '^-A INPUT -i lo'
|
|
||||||
backup: yes
|
|
||||||
become: true
|
|
||||||
when: browbeat_results_in_httpd and firewalld_in_use.rc != 0 and firewalld_is_active.rc != 0 and iptables_browbeat_results_port_exists.stdout|int == 0
|
|
||||||
register: iptables_needs_restart
|
|
||||||
|
|
||||||
- name: Restart iptables-services (iptables-services)
|
|
||||||
command: systemctl restart iptables.service
|
|
||||||
ignore_errors: true
|
|
||||||
become: true
|
|
||||||
when: iptables_needs_restart != 0 and firewalld_in_use.rc != 0 and firewalld_is_active.rc != 0
|
|
||||||
### end firewall ###
|
|
||||||
|
|
||||||
#
|
|
||||||
# Obtain and upload images for use with browbeat
|
|
||||||
#
|
|
||||||
|
|
||||||
- name: Fetch image
|
|
||||||
get_url: url={{ images[item].url }} dest={{ home_dir }}/{{ item }}
|
|
||||||
with_items: "{{ images }}"
|
|
||||||
|
|
||||||
- name: Determine if image exists
|
|
||||||
shell: . {{ overcloudrc }}; openstack image list | grep '{{ item }}'
|
|
||||||
register: image_exists
|
|
||||||
ignore_errors: true
|
|
||||||
changed_when: false
|
|
||||||
with_items: "{{ images }}"
|
|
||||||
|
|
||||||
- name: Remove image from dictionary of images if image exists
|
|
||||||
set_fact: images="{{ images|dict_remove(item[0]) }}"
|
|
||||||
when: "'{{ item[0] }}' in '{{ item[1].stdout }}'"
|
|
||||||
with_nested:
|
|
||||||
- "{{ images }}"
|
|
||||||
- "{{ image_exists.results }}"
|
|
||||||
|
|
||||||
- name: Upload image into cloud (Newton and Ocata versions)
|
|
||||||
shell: . {{ overcloudrc }}; openstack image create --public --disk-format=qcow2 --container-format=bare {{ item }} < {{ home_dir }}/{{ item }}
|
|
||||||
ignore_errors: true
|
|
||||||
with_items: "{{ images }}"
|
|
||||||
|
|
||||||
#
|
|
||||||
# Add additional flavor to overcloud
|
|
||||||
#
|
|
||||||
|
|
||||||
# Ignore errors here incase the flavors already exist.
|
|
||||||
- name: Add flavors to overcloud
|
|
||||||
shell: . {{ overcloudrc }}; nova flavor-create {{item.name}} auto {{item.memory}} {{item.disk}} {{item.cpu}}
|
|
||||||
with_items: "{{browbeat_flavors}}"
|
|
||||||
ignore_errors: true
|
|
||||||
|
116
ansible/install/roles/firewall/tasks/main.yml
Normal file
116
ansible/install/roles/firewall/tasks/main.yml
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Setup firewalld or iptables for Browbeat
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: Determine if firewalld is in use
|
||||||
|
shell: systemctl is-enabled firewalld.service | egrep -qv 'masked|disabled'
|
||||||
|
ignore_errors: true
|
||||||
|
register: firewalld_in_use
|
||||||
|
no_log: true
|
||||||
|
tags:
|
||||||
|
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
||||||
|
# Need to check if firewall is in use
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
- name: Determine if firewalld is active
|
||||||
|
shell: systemctl is-active firewalld.service | egrep -vq 'inactive|unknown'
|
||||||
|
ignore_errors: true
|
||||||
|
register: firewalld_is_active
|
||||||
|
no_log: true
|
||||||
|
tags:
|
||||||
|
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
||||||
|
# Need to check if firewall is active
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
- name: (shaker) Determine if TCP/{{shaker_port}} is already active
|
||||||
|
shell: firewall-cmd --list-ports | egrep -q "^{{shaker_port}}/tcp"
|
||||||
|
ignore_errors: true
|
||||||
|
register: firewalld_shaker_port_exists
|
||||||
|
no_log: true
|
||||||
|
tags:
|
||||||
|
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
||||||
|
# Need to check if port is already active
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
- name: (browbeat_results) Determine if TCP/{{browbeat_results_port}} is already active
|
||||||
|
shell: firewall-cmd --list-ports | egrep -q "^{{browbeat_results_port}}/tcp"
|
||||||
|
when: browbeat_results_in_httpd
|
||||||
|
ignore_errors: true
|
||||||
|
register: firewalld_browbeat_results_port_exists
|
||||||
|
no_log: true
|
||||||
|
tags:
|
||||||
|
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
||||||
|
# Need to check if port is already active
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
# add firewall rule via firewall-cmd
|
||||||
|
- name: (shaker) Add firewall rule for TCP/{{shaker_port}} (firewalld)
|
||||||
|
command: "{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- firewall-cmd --zone=public --add-port={{shaker_port}}/tcp --permanent
|
||||||
|
- firewall-cmd --reload
|
||||||
|
ignore_errors: true
|
||||||
|
become: true
|
||||||
|
when: firewalld_in_use.rc == 0 and firewalld_is_active.rc == 0 and firewalld_shaker_port_exists.rc != 0
|
||||||
|
|
||||||
|
- name: (browbeat_results) Add firewall rule for TCP/{{browbeat_results_port}} (firewalld)
|
||||||
|
command: "{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- firewall-cmd --zone=public --add-port={{browbeat_results_port}}/tcp --permanent
|
||||||
|
- firewall-cmd --reload
|
||||||
|
ignore_errors: true
|
||||||
|
become: true
|
||||||
|
when: browbeat_results_in_httpd and firewalld_in_use.rc == 0 and firewalld_is_active.rc == 0 and firewalld_browbeat_results_port_exists.rc != 0
|
||||||
|
|
||||||
|
# iptables-services
|
||||||
|
- name: (shaker) check firewall rules for TCP/{{shaker_port}} (iptables-services)
|
||||||
|
shell: "grep \"dport {{shaker_port}} \\-j ACCEPT\" {{iptables_file}} | wc -l"
|
||||||
|
ignore_errors: true
|
||||||
|
become: true
|
||||||
|
register: iptables_shaker_port_exists
|
||||||
|
failed_when: iptables_shaker_port_exists == 127
|
||||||
|
no_log: true
|
||||||
|
tags:
|
||||||
|
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
||||||
|
# Need to check if port is already active
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
- name: (browbeat_results) Check firewall rules for TCP/{{browbeat_results_port}} (iptables-services)
|
||||||
|
shell: "grep \"dport {{browbeat_results_port}} \\-j ACCEPT\" {{iptables_file}} | wc -l"
|
||||||
|
when: browbeat_results_in_httpd
|
||||||
|
ignore_errors: true
|
||||||
|
become: true
|
||||||
|
register: iptables_browbeat_results_port_exists
|
||||||
|
failed_when: iptables_browbeat_results_port_exists == 127
|
||||||
|
no_log: true
|
||||||
|
tags:
|
||||||
|
# Skip ANSIBLE0012 Commands should not change things if nothing needs doing
|
||||||
|
# Need to check if port is already active
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
- name: (shaker) Add firewall rule for TCP/{{shaker_port}} (iptables-services)
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{iptables_file}}"
|
||||||
|
line: '-A INPUT -p tcp -m tcp --dport {{shaker_port}} -j ACCEPT'
|
||||||
|
insertbefore: '^-A INPUT -i lo'
|
||||||
|
backup: yes
|
||||||
|
become: true
|
||||||
|
when: firewalld_in_use.rc != 0 and firewalld_is_active.rc != 0 and iptables_shaker_port_exists.stdout|int == 0
|
||||||
|
register: iptables_needs_restart
|
||||||
|
|
||||||
|
- name: (browbeat_results) Add firewall rule for TCP/{{browbeat_results_port}} (iptables-services)
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{iptables_file}}"
|
||||||
|
line: '-A INPUT -p tcp -m tcp --dport {{browbeat_results_port}} -j ACCEPT'
|
||||||
|
insertbefore: '^-A INPUT -i lo'
|
||||||
|
backup: yes
|
||||||
|
become: true
|
||||||
|
when: browbeat_results_in_httpd and firewalld_in_use.rc != 0 and firewalld_is_active.rc != 0 and iptables_browbeat_results_port_exists.stdout|int == 0
|
||||||
|
register: iptables_needs_restart
|
||||||
|
|
||||||
|
- name: Restart iptables-services (iptables-services)
|
||||||
|
command: systemctl restart iptables.service
|
||||||
|
ignore_errors: true
|
||||||
|
become: true
|
||||||
|
when: iptables_needs_restart != 0 and firewalld_in_use.rc != 0 and firewalld_is_active.rc != 0
|
10
ansible/install/roles/flavors/tasks/main.yml
Normal file
10
ansible/install/roles/flavors/tasks/main.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Add flavors to OpenStack Cloud
|
||||||
|
#
|
||||||
|
|
||||||
|
# Ignore errors here incase the flavors already exist.
|
||||||
|
- name: Add flavors to overcloud
|
||||||
|
shell: . {{ browbeat_venv }}/bin/activate; . {{ overcloudrc }}; nova flavor-create {{item.name}} auto {{item.memory}} {{item.disk}} {{item.cpu}}
|
||||||
|
with_items: "{{browbeat_flavors}}"
|
||||||
|
ignore_errors: true
|
42
ansible/install/roles/images/tasks/main.yml
Normal file
42
ansible/install/roles/images/tasks/main.yml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Obtain/Upload images to OpenStack Cloud
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: Fetch image
|
||||||
|
get_url:
|
||||||
|
url: "{{ images[item].url }}"
|
||||||
|
dest: "{{ home_dir }}/{{ images[item].name }}.{{ images[item].type }}"
|
||||||
|
with_items: "{{ images }}"
|
||||||
|
|
||||||
|
- name: Determine if image exists
|
||||||
|
shell: . {{ browbeat_venv }}/bin/activate; . {{ overcloudrc }}; openstack image list | grep '{{ images[item].name }}'
|
||||||
|
register: image_exists
|
||||||
|
ignore_errors: true
|
||||||
|
changed_when: false
|
||||||
|
with_items: "{{ images }}"
|
||||||
|
|
||||||
|
- name: Remove image from dictionary of images if image exists
|
||||||
|
set_fact:
|
||||||
|
images: "{{ images|dict_remove(item[0]) }}"
|
||||||
|
when: "'{{ item[0] }}' in '{{ item[1].stdout }}'"
|
||||||
|
with_nested:
|
||||||
|
- "{{ images }}"
|
||||||
|
- "{{ image_exists.results }}"
|
||||||
|
|
||||||
|
- name: Convert images to raw
|
||||||
|
command: qemu-img convert -f {{images[item].type}} -O raw {{ home_dir }}/{{ images[item].name }}.{{ images[item].type }} {{ home_dir }}/{{ images[item].name }}.raw
|
||||||
|
when: "images[item].convert_to_raw == true"
|
||||||
|
with_items: "{{ images }}"
|
||||||
|
|
||||||
|
- name: Upload image into cloud (Newton and Ocata versions)
|
||||||
|
shell: . {{ browbeat_venv }}/bin/activate; . {{ overcloudrc }}; openstack image create --public --disk-format={{ images[item].type }} --container-format=bare {{ images[item].name }} < {{ home_dir }}/{{ images[item].name }}.{{ images[item].type }}
|
||||||
|
ignore_errors: true
|
||||||
|
when: "images[item].convert_to_raw == false"
|
||||||
|
with_items: "{{ images }}"
|
||||||
|
|
||||||
|
- name: Upload raw image into cloud (Newton and Ocata versions)
|
||||||
|
shell: . {{ browbeat_venv }}/bin/activate; . {{ overcloudrc }}; openstack image create --public --disk-format=raw --container-format=bare {{ images[item].name }} < {{ home_dir }}/{{ images[item].name }}.{{ images[item].type }}
|
||||||
|
ignore_errors: true
|
||||||
|
when: "images[item].convert_to_raw == true"
|
||||||
|
with_items: "{{ images }}"
|
46
ansible/install/roles/perfkitbenchmarker/tasks/main.yml
Normal file
46
ansible/install/roles/perfkitbenchmarker/tasks/main.yml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Browbeat's PerfKitBenchmarker Install
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: Create perfkit virtualenv
|
||||||
|
command: virtualenv {{ perfkit_venv }} creates={{ perfkit_venv }}
|
||||||
|
|
||||||
|
- name: Setup perfkit-venv CA certificate path
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{ perfkit_venv }}/bin/activate"
|
||||||
|
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
||||||
|
when: overcloud_ca_path is defined
|
||||||
|
|
||||||
|
- name: Determine if PerfKitBenchmarker is already cloned
|
||||||
|
stat:
|
||||||
|
path: "{{ perfkit_venv }}/PerfKitBenchmarker"
|
||||||
|
register: perfkit_exists
|
||||||
|
|
||||||
|
- debug: msg="PerfKitBenchmarker already exists on the host"
|
||||||
|
when: perfkit_exists.stat.isdir is defined and perfkit_exists.stat.isdir
|
||||||
|
|
||||||
|
- name: Clone PerfKitBenchmarker on undercloud
|
||||||
|
git:
|
||||||
|
repo: https://github.com/GoogleCloudPlatform/PerfKitBenchmarker.git
|
||||||
|
dest: "{{perfkit_venv}}/PerfKitBenchmarker"
|
||||||
|
version: "{{perfkit_version}}"
|
||||||
|
when: perfkit_exists.stat.isdir is undefined
|
||||||
|
|
||||||
|
- name: Install PerfKitBenchmarker requirements into perfkit-venv
|
||||||
|
pip:
|
||||||
|
requirements: "{{perfkit_venv}}/PerfKitBenchmarker/requirements.txt"
|
||||||
|
virtualenv: "{{perfkit_venv}}"
|
||||||
|
|
||||||
|
- name: Install PerfKitBenchmarker Openstack requirements into perfkit-venv
|
||||||
|
pip:
|
||||||
|
requirements: "{{ perfkit_venv }}/PerfKitBenchmarker/perfkitbenchmarker/providers/openstack/requirements.txt"
|
||||||
|
virtualenv: "{{perfkit_venv}}"
|
||||||
|
|
||||||
|
# (akrzos) - Using 2.6 seems most stable, Using latest or >2.6 as per PerfKitBenchmarker
|
||||||
|
# openstack/requirements.txt results in an openstack cli error.
|
||||||
|
- name: Downgrade python-openstackclient inside perfkit-venv
|
||||||
|
pip:
|
||||||
|
name: python-openstackclient
|
||||||
|
version: 2.6.0
|
||||||
|
virtualenv: "{{perfkit_venv}}"
|
43
ansible/install/roles/rally/tasks/main.yml
Normal file
43
ansible/install/roles/rally/tasks/main.yml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Browbeat's Rally Install
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: Create rally virtualenv
|
||||||
|
command: virtualenv {{ rally_venv }} creates={{ rally_venv }}
|
||||||
|
|
||||||
|
- name: Rally Add browbeat to Python path
|
||||||
|
shell: echo 'export PYTHONPATH=$PYTHONPATH:{{ browbeat_path }}/lib' >> {{ rally_venv }}/bin/activate
|
||||||
|
|
||||||
|
- name: Setup rally-venv CA certificate path
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{ rally_venv }}/bin/activate"
|
||||||
|
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
||||||
|
when: overcloud_ca_path is defined
|
||||||
|
|
||||||
|
- name: Install rally into rally-venv
|
||||||
|
pip:
|
||||||
|
name: rally
|
||||||
|
version: "{{ rally_version }}"
|
||||||
|
virtualenv: "{{ rally_venv }}"
|
||||||
|
|
||||||
|
- name: Install elasticsearch into rally-venv
|
||||||
|
pip:
|
||||||
|
name: elasticsearch
|
||||||
|
virtualenv: "{{ rally_venv }}"
|
||||||
|
|
||||||
|
- name: Create rally configuration directory
|
||||||
|
file:
|
||||||
|
path: "{{ rally_venv }}/etc/rally"
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Setup rally.conf
|
||||||
|
template:
|
||||||
|
src: rally.conf.j2
|
||||||
|
dest: "{{ rally_venv }}/etc/rally/rally.conf"
|
||||||
|
|
||||||
|
- name: Setup rally database
|
||||||
|
shell: . {{ rally_venv }}/bin/activate; rally-manage db recreate
|
||||||
|
|
||||||
|
- name: Setup rally deployment
|
||||||
|
shell: . {{ rally_venv }}/bin/activate; . {{ overcloudrc }}; rally deployment create --fromenv --name overcloud
|
23
ansible/install/roles/rally/templates/rally.conf.j2
Normal file
23
ansible/install/roles/rally/templates/rally.conf.j2
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
# If set to true, the logging level will be set to DEBUG instead of
|
||||||
|
# the default INFO level. (boolean value)
|
||||||
|
# Note: This option can be changed without restarting.
|
||||||
|
#debug = false
|
||||||
|
|
||||||
|
[benchmark]
|
||||||
|
|
||||||
|
# Server boot timeout (floating point value)
|
||||||
|
#nova_server_boot_timeout = 300.0
|
||||||
|
|
||||||
|
[cleanup]
|
||||||
|
# Number of cleanup threads to run (integer value)
|
||||||
|
#cleanup_threads = 20
|
||||||
|
|
||||||
|
[database]
|
||||||
|
# The SQLAlchemy connection string to use to connect to the database.
|
||||||
|
# (string value)
|
||||||
|
# Deprecated group/name - [DEFAULT]/sql_connection
|
||||||
|
# Deprecated group/name - [DATABASE]/sql_connection
|
||||||
|
# Deprecated group/name - [sql]/connection
|
||||||
|
#connection = <None>
|
||||||
|
connection=sqlite:////tmp/{{browbeat_user}}.sqlite
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
- name: Check for heat
|
- name: Check for heat
|
||||||
service: name={{ item }} state=running
|
service: name={{ item }} state=started
|
||||||
become: true
|
become: true
|
||||||
with_items:
|
with_items:
|
||||||
- openstack-heat-api
|
- openstack-heat-api
|
||||||
|
19
ansible/install/roles/shaker/tasks/main.yml
Normal file
19
ansible/install/roles/shaker/tasks/main.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Browbeat's Shaker Install
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: Create shaker virtualenv
|
||||||
|
command: virtualenv {{ shaker_venv }} creates={{ shaker_venv }}
|
||||||
|
|
||||||
|
- name: Setup shaker-venv CA certificate path
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{ shaker_venv }}/bin/activate"
|
||||||
|
line: 'export REQUESTS_CA_BUNDLE={{ overcloud_ca_path }}'
|
||||||
|
when: overcloud_ca_path is defined
|
||||||
|
|
||||||
|
- name: Install shaker
|
||||||
|
pip:
|
||||||
|
name: pyshaker
|
||||||
|
version: "{{ shaker_version }}"
|
||||||
|
virtualenv: "{{ shaker_venv }}"
|
@ -26,6 +26,13 @@
|
|||||||
roles:
|
roles:
|
||||||
- browbeat/common
|
- browbeat/common
|
||||||
- browbeat/browbeat
|
- browbeat/browbeat
|
||||||
|
- browbeat/browbeat-results
|
||||||
|
- browbeat/firewall
|
||||||
|
- browbeat/perfkitbenchmarker
|
||||||
|
- browbeat/rally
|
||||||
|
- browbeat/shaker
|
||||||
|
- browbeat/flavors
|
||||||
|
- browbeat/images
|
||||||
- browbeat/browbeat-network
|
- browbeat/browbeat-network
|
||||||
- browbeat/template-configs
|
- browbeat/template-configs
|
||||||
- browbeat/statsd-ironic
|
- browbeat/statsd-ironic
|
||||||
|
@ -15,6 +15,13 @@
|
|||||||
roles:
|
roles:
|
||||||
- browbeat/common
|
- browbeat/common
|
||||||
- browbeat/browbeat
|
- browbeat/browbeat
|
||||||
|
- browbeat/browbeat-results
|
||||||
|
- browbeat/firewall
|
||||||
|
- browbeat/perfkitbenchmarker
|
||||||
|
- browbeat/rally
|
||||||
|
- browbeat/shaker
|
||||||
|
- browbeat/flavors
|
||||||
|
- browbeat/images
|
||||||
- browbeat/browbeat-network
|
- browbeat/browbeat-network
|
||||||
- browbeat/template-configs
|
- browbeat/template-configs
|
||||||
|
|
||||||
|
@ -2,136 +2,376 @@
|
|||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
Installing Browbeat and running the Overcloud checks can be performed
|
Browbeat is currently installed via an ansible playbook. In a Tripleo
|
||||||
either from your local machine or from the undercloud. The local machine
|
environment it can be installed directly on the Undercloud or a separate
|
||||||
install/check assumes you have ansible installed already.
|
machine. The installation can be run from either your local machine or
|
||||||
|
directly on the machine you want Browbeat installed on.
|
||||||
|
|
||||||
Before running Browbeat
|
Install Browbeat on Undercloud
|
||||||
-----------------------
|
------------------------------
|
||||||
|
|
||||||
- Execute the ansible/generate_tripleo_hostfile.sh script (builds ssh-config file)
|
This is usually the easiest installation due to many requirements are satified
|
||||||
- Configure browbeat-config.yaml to match your tests
|
on the Undercloud. In some cases it may not be desired to install Browbeat on
|
||||||
- (Optional) Set your Openstack version metadata in metadata/version.json
|
the Undercloud (Ex. Limited Resource requirements or Non-Tripleo installed
|
||||||
|
cloud)
|
||||||
|
|
||||||
Currently Keystone Dashboards only depend on osp_series but may be extended to show
|
Requirements
|
||||||
build date in the future, thus build is also provided but not required. You can
|
~~~~~~~~~~~~
|
||||||
add whatever other version related metadata you would like to metadata/version.json.
|
|
||||||
Typically, whatever automation you have to produce builds should provide this file.
|
|
||||||
|
|
||||||
What is necessary
|
Hardware
|
||||||
-----------------
|
|
||||||
|
|
||||||
- Ansible
|
* Undercloud Machine (Baremetal or Virtual Machine)
|
||||||
|
|
||||||
Why? We started with using bash to make changes to the Overcloud,
|
Networking
|
||||||
creating complex sed/awks that we get for free with Ansible (for the
|
|
||||||
most part). Other monitoring and stress test tools are installed by
|
|
||||||
the respective playbooks when run.
|
|
||||||
|
|
||||||
Install Browbeat from your local machine
|
* Access to Public API endpoints
|
||||||
----------------------------------------
|
* Access to Keystone Admin Endpoint
|
||||||
|
|
||||||
From your local machine
|
.. note:: For tripleo, public API endpoints are located on the External
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
Network by default. The Keystone Admin Endpoint is deployed on the ctlplane
|
||||||
|
network by default. These networking requirements should be validated before
|
||||||
|
attempting an installation.
|
||||||
|
|
||||||
|
On the Undercloud
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ ssh-copy-id stack@<undercloud-ip>
|
$ ssh undercloud-root
|
||||||
$ git clone https://github.com/openstack/browbeat.git
|
[root@undercloud ~]# su - stack
|
||||||
$ cd browbeat/ansible
|
[stack@undercloud ~]$ git clone https://github.com/openstack/browbeat.git
|
||||||
$ ./generate_tripleo_hostfile.sh <undercloud-ip>
|
[stack@undercloud ~]$ cd browbeat/ansible
|
||||||
$ vi install/group_vars/all.yml # Make sure to edit the dns_server to the correct ip address
|
[stack@undercloud ansible]$ ./generate_tripleo_hostfile.sh -t localhost
|
||||||
$ ansible-playbook -i hosts install/browbeat.yml
|
[stack@undercloud ansible]$ sudo easy_install pip
|
||||||
$ vi install/group_vars/all.yml # Edit Browbeat network settings
|
[stack@undercloud ansible]$ sudo pip install ansible
|
||||||
$ ansible-playbook -i hosts install/browbeat_network.yml # For external access(required to build Shaker image)
|
[stack@undercloud ansible]$ vi hosts # Uncomment undercloud in first group
|
||||||
$ ansible-playbook -i hosts install/shaker_build.yml
|
[stack@undercloud ansible]$ vi install/group_vars/all.yml # Make sure to edit the dns_server to the correct ip address
|
||||||
|
[stack@undercloud ansible]$ ansible-playbook -i hosts install/browbeat.yml
|
||||||
|
[stack@undercloud ansible]$ vi install/group_vars/all.yml # Edit Browbeat network settings
|
||||||
|
[stack@undercloud ansible]$ ansible-playbook -i hosts install/browbeat_network.yml # For external access(required to build Shakerimage)
|
||||||
|
[stack@undercloud ansible]$ ansible-playbook -i hosts install/shaker_build.yml
|
||||||
|
|
||||||
.. note:: ``browbeat-network.yml`` might not work for you depending on your
|
.. note:: ``browbeat-network.yml`` might not work for you depending on your
|
||||||
underlay/overlay network setup. In such cases, user needs to create
|
underlay/overlay network setup. In such cases, user needs to create
|
||||||
appropriate networks for instances to allow them to reach the
|
appropriate networks for instances to allow them to reach the
|
||||||
internet. Some useful documentation can be found at:
|
internet. Some useful documentation can be found at:
|
||||||
https://access.redhat.com/documentation/en/red-hat-openstack-platform/10/\
|
https://access.redhat.com/documentation/en/red-hat-openstack-platform/11/single/networking-guide/
|
||||||
single/networking-guide/
|
|
||||||
|
|
||||||
(Optional) Install collectd
|
|
||||||
|
(Optional) Install Collectd
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ ansible-playbook -i hosts install/collectd-openstack.yml
|
[stack@ospd ansible]$ ansible-playbook -i hosts install/collectd-openstack.yml
|
||||||
|
|
||||||
(Optional) Install collectd->graphite dashboards
|
(Optional) Install Browbeat Grafana dashboards
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
$ ansible-playbook -i hosts install/grafana-dashboards.yml
|
[stack@ospd ansible]$ ansible-playbook -i hosts install/dashboards-openstack.yml
|
||||||
|
|
||||||
(Optional) Install connmon
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ ansible-playbook -i hosts install/connmon.yml
|
|
||||||
|
|
||||||
|
|
||||||
Install Browbeat directly on undercloud
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
From your undercloud
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ ssh undercloud-root
|
|
||||||
[root@ospd ~]# su - stack
|
|
||||||
[stack@ospd ~]$ git clone https://github.com/openstack/browbeat.git
|
|
||||||
[stack@ospd ~]$ cd browbeat/ansible
|
|
||||||
[stack@ospd ansible]$ ./generate_tripleo_hostfile.sh localhost
|
|
||||||
[stack@ospd ansible]$ sudo easy_install pip
|
|
||||||
[stack@ospd ansible]$ sudo pip install ansible
|
|
||||||
[stack@ospd ansible]$ vi install/group_vars/all.yml # Make sure to edit the dns_server to the correct ip address
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts install/browbeat.yml
|
|
||||||
[stack@ospd ansible]$ vi install/group_vars/all.yml # Edit Browbeat network settings
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts install/browbeat_network.yml # For external access(required to build Shakerimage)
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts install/shaker_build.yml
|
|
||||||
|
|
||||||
.. note:: ``browbeat-network.yml`` might not work for you depending on your
|
|
||||||
underlay/overlay network setup. In such cases, user needs to create
|
|
||||||
appropriate networks for instances to allow them to reach the
|
|
||||||
internet. Some useful documentation can be found at:
|
|
||||||
https://access.redhat.com/documentation/en/red-hat-openstack-platform/10/\
|
|
||||||
single/networking-guide/
|
|
||||||
|
|
||||||
|
|
||||||
(Optional) Install collectd
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts install/collectd-openstack.yml
|
|
||||||
|
|
||||||
(Optional) Install collectd->graphite dashboards
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts install/dashboards-openstack.yml
|
|
||||||
|
|
||||||
(Optional) Install connmon
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts install/connmon.yml
|
|
||||||
|
|
||||||
Run Overcloud checks
|
Run Overcloud checks
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
[stack@ospd ansible]$ ansible-playbook -i hosts check/site.yml
|
[stack@ospd ansible]$ ansible-playbook -i hosts check/site.yml
|
||||||
|
|
||||||
Your Overcloud check output is located in results/bug_report.log
|
Your Overcloud check output is located in results/bug_report.log
|
||||||
|
|
||||||
|
Install Browbeat from your local machine
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
This installs Browbeat onto your Undercloud but the playbook is run from your
|
||||||
|
local machine rather than directly on the Undercloud machine.
|
||||||
|
|
||||||
|
From your local machine
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ ssh-copy-id stack@<undercloud-ip>
|
||||||
|
$ git clone https://github.com/openstack/browbeat.git
|
||||||
|
$ cd browbeat/ansible
|
||||||
|
$ ./generate_tripleo_hostfile.sh -t <undercloud-ip>
|
||||||
|
$ vi hosts # Uncomment undercloud in first group
|
||||||
|
$ vi install/group_vars/all.yml # Review and edit configuration items
|
||||||
|
$ ansible-playbook -i hosts install/browbeat.yml
|
||||||
|
$ vi install/group_vars/all.yml # Edit Browbeat network settings
|
||||||
|
$ ansible-playbook -i hosts install/browbeat_network.yml # For external access(required to build Shaker image)
|
||||||
|
$ ansible-playbook -i hosts install/shaker_build.yml
|
||||||
|
|
||||||
|
|
||||||
|
.. note:: ``browbeat-network.yml`` might not work for you depending on your
|
||||||
|
underlay/overlay network setup. In such cases, user needs to create
|
||||||
|
appropriate networks for instances to allow them to reach the
|
||||||
|
internet. Some useful documentation can be found at:
|
||||||
|
https://access.redhat.com/documentation/en/red-hat-openstack-platform/11/single/networking-guide/
|
||||||
|
|
||||||
|
(Optional) Install collectd
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ ansible-playbook -i hosts install/collectd-openstack.yml
|
||||||
|
|
||||||
|
(Optional) Install Browbeat Grafana dashboards
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ ansible-playbook -i hosts install/grafana-dashboards.yml
|
||||||
|
|
||||||
|
Install/Setup Browbeat Machine
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
This setup is used when running Browbeat on a separate machine than the
|
||||||
|
Undercloud. Using this method, you can create multiple users on the machine
|
||||||
|
and each user can be pointed at a different cloud or the same cloud.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Hardware
|
||||||
|
|
||||||
|
* Baremetal or Virtual Machine
|
||||||
|
|
||||||
|
Networking
|
||||||
|
|
||||||
|
* Access to Public API endpoints
|
||||||
|
* Access to Keystone Admin Endpoint
|
||||||
|
|
||||||
|
RPM
|
||||||
|
|
||||||
|
* epel-release
|
||||||
|
* ansible
|
||||||
|
* git
|
||||||
|
|
||||||
|
OpenStack
|
||||||
|
|
||||||
|
* overcloudrc file placed in browbeat user home directory
|
||||||
|
|
||||||
|
.. note:: For tripleo, public API endpoints are located on the External
|
||||||
|
Network by default. The Keystone Admin Endpoint is deployed on the ctlplane
|
||||||
|
network by default. These networking requirements should be validated before
|
||||||
|
attempting an installation.
|
||||||
|
|
||||||
|
Preparing the Machine (CentOS 7)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
1. Install Machine either from Image, ISO, or PXE
|
||||||
|
2. Check for Required Network Connectivity
|
||||||
|
|
||||||
|
Determine Overcloud Keystone endpoints
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[stack@undercloud-1 ~]$ . overcloudrc
|
||||||
|
[stack@undercloud-1 ~]$ openstack catalog show identity
|
||||||
|
+-----------+----------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-----------+----------------------------------------+
|
||||||
|
| endpoints | regionOne |
|
||||||
|
| | publicURL: http://172.21.0.10:5000 |
|
||||||
|
| | internalURL: http://172.16.0.16:5000 |
|
||||||
|
| | adminURL: http://192.168.24.61:35357 |
|
||||||
|
| | |
|
||||||
|
| name | keystone |
|
||||||
|
| type | identity |
|
||||||
|
+-----------+----------------------------------------+
|
||||||
|
|
||||||
|
Check network connectivity
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ ssh root@browbeatvm
|
||||||
|
[root@browbeatvm ~]$ # Ping Keystone Admin API IP Address
|
||||||
|
[root@browbeatvm ~]# ping -c 2 192.168.24.61
|
||||||
|
PING 192.168.24.61 (192.168.24.61) 56(84) bytes of data.
|
||||||
|
64 bytes from 192.168.24.61: icmp_seq=1 ttl=64 time=1.60 ms
|
||||||
|
64 bytes from 192.168.24.61: icmp_seq=2 ttl=64 time=0.312 ms
|
||||||
|
|
||||||
|
--- 192.168.24.61 ping statistics ---
|
||||||
|
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
|
||||||
|
rtt min/avg/max/mdev = 0.312/0.957/1.603/0.646 ms
|
||||||
|
[root@browbeatvm ~]$ # Ping Keystone Public API IP Address
|
||||||
|
[root@browbeatvm ~]# ping -c 2 172.21.0.10
|
||||||
|
PING 172.21.0.10 (172.21.0.10) 56(84) bytes of data.
|
||||||
|
64 bytes from 172.21.0.10: icmp_seq=1 ttl=64 time=0.947 ms
|
||||||
|
64 bytes from 172.21.0.10: icmp_seq=2 ttl=64 time=0.304 ms
|
||||||
|
|
||||||
|
--- 172.21.0.10 ping statistics ---
|
||||||
|
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
|
||||||
|
rtt min/avg/max/mdev = 0.304/0.625/0.947/0.322 ms
|
||||||
|
|
||||||
|
3. Create user for Browbeat and generate SSH key
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[root@browbeatvm ~]# useradd browbeat1
|
||||||
|
[root@browbeatvm ~]# passwd browbeat1
|
||||||
|
Changing password for user browbeat1.
|
||||||
|
New password:
|
||||||
|
Retype new password:
|
||||||
|
passwd: all authentication tokens updated successfully.
|
||||||
|
[root@browbeatvm ~]# echo "browbeat1 ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/browbeat1; chmod 0440 /etc/sudoers.d/browbeat1
|
||||||
|
browbeat1 ALL=(root) NOPASSWD:ALL
|
||||||
|
[root@browbeatvm ~]# su - browbeat1
|
||||||
|
[browbeat1@browbeatvm ~]$ ssh-keygen
|
||||||
|
Generating public/private rsa key pair.
|
||||||
|
Enter file in which to save the key (/home/browbeat1/.ssh/id_rsa):
|
||||||
|
Enter passphrase (empty for no passphrase):
|
||||||
|
Enter same passphrase again:
|
||||||
|
Your identification has been saved in /home/browbeat1/.ssh/id_rsa.
|
||||||
|
Your public key has been saved in /home/browbeat1/.ssh/id_rsa.pub.
|
||||||
|
The key fingerprint is:
|
||||||
|
c2:b2:f0:cd:ef:d2:2b:a8:9a:5a:bb:ca:ce:c1:8c:3b browbeat1@browbeatvm
|
||||||
|
The key's randomart image is:
|
||||||
|
+--[ RSA 2048]----+
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| . |
|
||||||
|
| . . o S |
|
||||||
|
|+ o = . |
|
||||||
|
|.+. o.o. |
|
||||||
|
|E+... o.. |
|
||||||
|
|OB+o ++. |
|
||||||
|
+-----------------+
|
||||||
|
|
||||||
|
|
||||||
|
4. Enable passwordless SSH into localhost and Undercloud then copy overcloudrc over to Browbeat VM
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ansible]$ ssh-copy-id browbeat1@localhost
|
||||||
|
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
|
||||||
|
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
|
||||||
|
browbeat1@localhost's password:
|
||||||
|
|
||||||
|
Number of key(s) added: 1
|
||||||
|
|
||||||
|
Now try logging into the machine, with: "ssh 'browbeat1@localhost'"
|
||||||
|
and check to make sure that only the key(s) you wanted were added.
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ~]$ ssh-copy-id stack@undercloud-1
|
||||||
|
The authenticity of host 'undercloud-1 (undercloud-1)' can't be established.
|
||||||
|
ECDSA key fingerprint is fa:3a:02:e8:8e:92:4d:a7:9c:90:68:6a:c2:eb:fe:e1.
|
||||||
|
Are you sure you want to continue connecting (yes/no)? yes
|
||||||
|
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
|
||||||
|
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
|
||||||
|
stack@undercloud-1's password:
|
||||||
|
|
||||||
|
Number of key(s) added: 1
|
||||||
|
|
||||||
|
Now try logging into the machine, with: "ssh 'stack@undercloud-1'"
|
||||||
|
and check to make sure that only the key(s) you wanted were added.
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ~]$ scp stack@undercloud-1:/home/stack/overcloudrc .
|
||||||
|
overcloudrc 100% 553 0.5KB/s 00:00
|
||||||
|
|
||||||
|
5. Install RPM requirements
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ~]$ sudo yum install -y epel-release
|
||||||
|
[browbeat1@browbeatvm ~]$ sudo yum install -y ansible git
|
||||||
|
|
||||||
|
6. Clone Browbeat
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeatuser1@browbeat-vm ~]$ git clone https://github.com/openstack/browbeat.git
|
||||||
|
Cloning into 'browbeat'...
|
||||||
|
remote: Counting objects: 7425, done.
|
||||||
|
remote: Compressing objects: 100% (15/15), done.
|
||||||
|
remote: Total 7425 (delta 14), reused 12 (delta 12), pack-reused 7398
|
||||||
|
Receiving objects: 100% (7425/7425), 5.23 MiB | 0 bytes/s, done.
|
||||||
|
Resolving deltas: 100% (4280/4280), done.
|
||||||
|
|
||||||
|
7. Generate hosts, ssh-config, and retrieve heat-admin-id_rsa. Then uncomment
|
||||||
|
"localhost" under Browbeat Hosts Group
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ~]$ cd browbeat/ansible/
|
||||||
|
[browbeat1@browbeatvm ansible]$ ./generate_tripleo_hostfile.sh -t undercloud-1 --localhost
|
||||||
|
...
|
||||||
|
[browbeat1@browbeatvm ansible]$ ls ssh-config hosts heat-admin-id_rsa
|
||||||
|
heat-admin-id_rsa hosts ssh-config
|
||||||
|
|
||||||
|
Note use of "--localhost" to indicate the desire to install browbeat on the
|
||||||
|
localhost rather than the undercloud.
|
||||||
|
|
||||||
|
8. Edit installation variables
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ansible]$ vi install/group_vars/all.yml
|
||||||
|
|
||||||
|
In this case, adjust browbeat_user, iptables_file and dns_server. Each
|
||||||
|
environment is different and thus your configuration options will vary.
|
||||||
|
|
||||||
|
9. Run Browbeat install playbook
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ansible]$ ansible-playbook -i hosts install/browbeat.yml
|
||||||
|
|
||||||
|
10. Setup browbeat-config.yaml and test run Rally against cloud
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeat1@browbeatvm ansible]$ cd ..
|
||||||
|
[browbeat1@browbeatvm browbeat]$ vi browbeat-config.yaml
|
||||||
|
[browbeat1@browbeatvm browbeat]$ . ../browbeat-venv/bin/activate
|
||||||
|
(browbeat-venv) [browbeat1@browbeatvm browbeat]$ python browbeat.py rally
|
||||||
|
|
||||||
|
Make sure to modify the venv settings for Rally to match the directory in which
|
||||||
|
Rally was installed in. You will have to do so for other workload providers as
|
||||||
|
well.
|
||||||
|
|
||||||
|
11. Setup network for Shaker+PerfKitBenchmarker and build Shaker image
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeatuser1@browbeat-vm ~]$ vi install/group_vars/all.yml # Edit Browbeat network settings
|
||||||
|
[browbeatuser1@browbeat-vm ~]$ ansible-playbook -i hosts install/browbeat_network.yml # For external access(required to build Shaker image)
|
||||||
|
[browbeatuser1@browbeat-vm ~]$ ansible-playbook -i hosts install/shaker_build.yml
|
||||||
|
|
||||||
|
.. note:: ``browbeat-network.yml`` might not work for you depending on your
|
||||||
|
underlay/overlay network setup. In such cases, user needs to create
|
||||||
|
appropriate networks for instances to allow them to reach the
|
||||||
|
internet. Some useful documentation can be found at:
|
||||||
|
https://access.redhat.com/documentation/en/red-hat-openstack-platform/11/single/networking-guide/
|
||||||
|
|
||||||
|
(Optional) Install collectd
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeatuser1@browbeat-vm ~]$ ansible-playbook -i hosts install/collectd-openstack.yml
|
||||||
|
|
||||||
|
(Optional) Install Browbeat Grafana dashboards
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
[browbeatuser1@browbeat-vm ~]$ ansible-playbook -i hosts install/grafana-dashboards.yml
|
||||||
|
|
||||||
|
|
||||||
|
Considerations for additional Browbeat Installs
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If it is desired to run Browbeat against multiple clouds from the same machine.
|
||||||
|
It is recommended to create a second user (Ex. browbeat2) and repeat above
|
||||||
|
instructions. In order to expose the second user's Browbeat results via httpd,
|
||||||
|
change the port (Variable browbeat_results_port) and thus each user's results
|
||||||
|
will be available via http on different ports.
|
||||||
|
|
||||||
|
.. note:: Keep in mind that running multiple sets of control plane workloads
|
||||||
|
from multiple Browbeat users at the same time will introduce variation into
|
||||||
|
resulting performance data if the machine on which Browbeat is installed is
|
||||||
|
resource constrained.
|
||||||
|
@ -174,7 +174,7 @@ per-cloud and clone Browbeat into that specific directory:
|
|||||||
[browbeat@laptop cloud01]$ git clone git@github.com:openstack/browbeat.git
|
[browbeat@laptop cloud01]$ git clone git@github.com:openstack/browbeat.git
|
||||||
...
|
...
|
||||||
[browbeat@laptop cloud01]$ cd browbeat/ansible
|
[browbeat@laptop cloud01]$ cd browbeat/ansible
|
||||||
[browbeat@laptop ansible]$ ./generate_tripleo_hostfile.sh <cloud01-ip-address>
|
[browbeat@laptop ansible]$ ./generate_tripleo_hostfile.sh -t <cloud01-ip-address>
|
||||||
[browbeat@laptop ansible]$ ansible-playbook -i hosts (Your playbook you wish to run...)
|
[browbeat@laptop ansible]$ ansible-playbook -i hosts (Your playbook you wish to run...)
|
||||||
[browbeat@laptop ansible]$ ssh -F ssh-config overcloud-controller-0 # Takes you to first controller
|
[browbeat@laptop ansible]$ ssh -F ssh-config overcloud-controller-0 # Takes you to first controller
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"osp_series": "newton",
|
"osp_series": "ocata",
|
||||||
"build": "2016-09-01.1"
|
"build": "2017-XX-XX.X"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
ansible==2.2.0.0
|
ansible==2.2.0.0
|
||||||
python-dateutil==2.4.2
|
|
||||||
pykwalify
|
|
||||||
elasticsearch
|
elasticsearch
|
||||||
|
python-dateutil==2.4.2
|
||||||
|
python-openstackclient==3.11.0
|
||||||
|
pykwalify
|
||||||
|
Loading…
Reference in New Issue
Block a user