Add browbeat installation support for RHOSO
Change-Id: Ibbe80770445a59ff76a58715190e2f4daed1fec0
This commit is contained in:
parent
2324b47cac
commit
f7a91aeca0
@ -1,26 +1,15 @@
|
|||||||
---
|
---
|
||||||
#
|
- hosts: localhost
|
||||||
# Playbook to install Browbeat (Rally + Shaker) on undercloud
|
tasks:
|
||||||
#
|
- debug:
|
||||||
|
msg: "redirecting to browbeat installation based on deployment type"
|
||||||
|
|
||||||
- hosts: Browbeat
|
- name: Install browbeat
|
||||||
remote_user: "{{ browbeat_user }}"
|
import_playbook: browbeat_rhoso.yaml
|
||||||
roles:
|
vars:
|
||||||
- common
|
rally_undercloud_enabled: false
|
||||||
- osp_version
|
when: is_rhoso_deployment
|
||||||
- browbeat
|
|
||||||
- stockpile
|
|
||||||
- { role: browbeat-results, when: browbeat_results_in_httpd|bool}
|
|
||||||
- firewall
|
|
||||||
- rally
|
|
||||||
- shaker
|
|
||||||
- { role: flavors, when: browbeat_create_flavors|bool}
|
|
||||||
- { role: images, when: browbeat_upload_guest_images|bool}
|
|
||||||
- { role: workloads, when: install_browbeat_workloads|bool}
|
|
||||||
- { role: e2e-benchmarking, when: install_e2e_benchmarking|bool}
|
|
||||||
environment: "{{proxy_env}}"
|
|
||||||
|
|
||||||
- hosts: Controller*, Compute*
|
- name: Install browbeat
|
||||||
remote_user: "{{ host_remote_user }}"
|
import_playbook: browbeat_rhosp.yaml
|
||||||
roles:
|
when: not is_rhoso_deployment
|
||||||
- no-sshd-dns
|
|
||||||
|
19
ansible/install/browbeat_rhoso.yaml
Normal file
19
ansible/install/browbeat_rhoso.yaml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Playbook to install Browbeat(Rally) for RHOSO
|
||||||
|
#
|
||||||
|
|
||||||
|
- hosts: localhost
|
||||||
|
gather_facts: true
|
||||||
|
vars:
|
||||||
|
ansible_user: "{{ browbeat_user }}"
|
||||||
|
ansible_python_interpreter: "{{ python_interpreter }}"
|
||||||
|
roles:
|
||||||
|
- browbeat-rhoso-prep
|
||||||
|
- browbeat
|
||||||
|
- { role: browbeat-results, when: browbeat_results_in_httpd|bool}
|
||||||
|
- firewall
|
||||||
|
- rally
|
||||||
|
- { role: flavors, when: browbeat_create_flavors|bool}
|
||||||
|
- { role: images, when: browbeat_upload_guest_images|bool}
|
||||||
|
environment: "{{proxy_env}}"
|
26
ansible/install/browbeat_rhosp.yaml
Normal file
26
ansible/install/browbeat_rhosp.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# Playbook to install Browbeat (Rally + Shaker) on undercloud
|
||||||
|
#
|
||||||
|
|
||||||
|
- hosts: Browbeat
|
||||||
|
remote_user: "{{ browbeat_user }}"
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
- osp_version
|
||||||
|
- browbeat
|
||||||
|
- stockpile
|
||||||
|
- { role: browbeat-results, when: browbeat_results_in_httpd|bool}
|
||||||
|
- firewall
|
||||||
|
- rally
|
||||||
|
- shaker
|
||||||
|
- { role: flavors, when: browbeat_create_flavors|bool}
|
||||||
|
- { role: images, when: browbeat_upload_guest_images|bool}
|
||||||
|
- { role: workloads, when: install_browbeat_workloads|bool}
|
||||||
|
- { role: e2e-benchmarking, when: install_e2e_benchmarking|bool}
|
||||||
|
environment: "{{proxy_env}}"
|
||||||
|
|
||||||
|
- hosts: Controller*, Compute*
|
||||||
|
remote_user: "{{ host_remote_user }}"
|
||||||
|
roles:
|
||||||
|
- no-sshd-dns
|
@ -4,8 +4,9 @@
|
|||||||
# Browbeat Install Configuration
|
# Browbeat Install Configuration
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
# Adjust Browbeat user if you are deploying Browbeat on a different machine than the Undercloud
|
# Adjust Browbeat user if you are deploying Browbeat on a different machine
|
||||||
browbeat_user: stack
|
# other than kni provisoner host. use 'stack' if you deploying in undercloud
|
||||||
|
browbeat_user: kni
|
||||||
# Login user for the local/jump machine (Typically Undercloud)
|
# Login user for the local/jump machine (Typically Undercloud)
|
||||||
local_remote_user: stack
|
local_remote_user: stack
|
||||||
# Login user for the Overcloud hosts
|
# Login user for the Overcloud hosts
|
||||||
|
85
ansible/install/roles/browbeat-rhoso-prep/tasks/main.yml
Normal file
85
ansible/install/roles/browbeat-rhoso-prep/tasks/main.yml
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
---
|
||||||
|
#
|
||||||
|
# we will be fixing all the gaps to run the browbeat from the provisioner host
|
||||||
|
# just preparing the provosioner host to run browbeat for rhoso
|
||||||
|
#
|
||||||
|
|
||||||
|
- name: copy the clouds.yaml from the ospclient pod
|
||||||
|
block:
|
||||||
|
- name: create the target folder for the clouds.yaml
|
||||||
|
file:
|
||||||
|
path: "{{home_dir}}/.config/openstack"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: copy the clouds.yaml
|
||||||
|
shell: |
|
||||||
|
oc cp openstack/openstackclient:/home/cloud-admin/.config/openstack/{{item}} {{home_dir}}/.config/openstack/{{item}}
|
||||||
|
with_items:
|
||||||
|
- clouds.yaml
|
||||||
|
- secure.yaml
|
||||||
|
environment:
|
||||||
|
KUBECONFIG: "{{ kubeconfig_path }}"
|
||||||
|
|
||||||
|
- name: read the cloud yaml files
|
||||||
|
set_fact:
|
||||||
|
clouds_yaml: "{{ lookup('file', '{{home_dir}}/.config/openstack/clouds.yaml') | from_yaml }}"
|
||||||
|
secure_yaml: "{{ lookup('file', '{{home_dir}}/.config/openstack/secure.yaml') | from_yaml }}"
|
||||||
|
|
||||||
|
- name: create the environment file
|
||||||
|
copy:
|
||||||
|
dest: "{{ overcloudrc }}"
|
||||||
|
content: |
|
||||||
|
export OS_CLOUD=default
|
||||||
|
|
||||||
|
- name: update clouds.yaml content
|
||||||
|
set_fact:
|
||||||
|
clouds_yaml: >-
|
||||||
|
{{
|
||||||
|
clouds_yaml | combine({
|
||||||
|
'clouds': clouds_yaml.clouds | combine({
|
||||||
|
'default': clouds_yaml.clouds.default | combine({
|
||||||
|
'auth': clouds_yaml.clouds.default.auth | combine({'password': secure_yaml.clouds.default.auth.password}),
|
||||||
|
'insecure': True,
|
||||||
|
'identity_api_version': '3'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
|
||||||
|
- name: update clouds.yaml
|
||||||
|
copy:
|
||||||
|
dest: "{{home_dir}}/.config/openstack/clouds.yaml"
|
||||||
|
content: "{{ clouds_yaml | to_nice_yaml }}"
|
||||||
|
|
||||||
|
- name: create JSON content for keystone
|
||||||
|
set_fact:
|
||||||
|
keystone_content: |
|
||||||
|
{
|
||||||
|
"openstack": {
|
||||||
|
"auth_url": "{{ clouds_yaml.clouds.default.auth.auth_url }}",
|
||||||
|
"region_name": "{{ clouds_yaml.clouds.default.region_name }}",
|
||||||
|
"endpoint_type": "public",
|
||||||
|
"admin": {
|
||||||
|
"username": "{{ clouds_yaml.clouds.default.auth.username }}",
|
||||||
|
"password": "{{ clouds_yaml.clouds.default.auth.password }}",
|
||||||
|
"user_domain_name": "{{ clouds_yaml.clouds.default.auth.user_domain_name }}",
|
||||||
|
"project_name": "{{ clouds_yaml.clouds.default.auth.project_name }}",
|
||||||
|
"project_domain_name": "{{ clouds_yaml.clouds.default.auth.project_domain_name }}"
|
||||||
|
},
|
||||||
|
"https_insecure": {{ clouds_yaml.clouds.default.insecure | default(false) }}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: create keystone config file from clouds.yaml
|
||||||
|
copy:
|
||||||
|
dest: "{{home_dir}}/.config/openstack/keystone-v3.json"
|
||||||
|
content: "{{ keystone_content | to_nice_json }}"
|
||||||
|
|
||||||
|
- name: install openstack client
|
||||||
|
shell: |
|
||||||
|
sudo yum install "http://download.eng.bos.redhat.com/rcm-guest/puddles/OpenStack/rhos-release/rhos-release-latest.noarch.rpm" -y
|
||||||
|
sudo rhos-release 16.2
|
||||||
|
sudo yum install python3-openstackclient -y
|
||||||
|
ignore_errors: true
|
||||||
|
become: true
|
@ -117,37 +117,40 @@
|
|||||||
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: Determine if generate_tripleo_hostfile has been run
|
- block:
|
||||||
stat:
|
- name: Determine if generate_tripleo_hostfile has been run
|
||||||
path: "{{ browbeat_path }}/ansible/hosts"
|
stat:
|
||||||
register: hosts_file_exists
|
path: "{{ browbeat_path }}/ansible/hosts"
|
||||||
|
register: hosts_file_exists
|
||||||
|
|
||||||
- name: Determine if generate_tripleo_inventory has been run
|
- name: Determine if generate_tripleo_inventory has been run
|
||||||
stat:
|
stat:
|
||||||
path: "{{ browbeat_path }}/ansible/hosts.yml"
|
path: "{{ browbeat_path }}/ansible/hosts.yml"
|
||||||
register: hosts_yml_file_exists
|
register: hosts_yml_file_exists
|
||||||
|
|
||||||
- name: set either of inventory file exists
|
- name: set either of inventory file exists
|
||||||
set_fact:
|
set_fact:
|
||||||
inventry_file: "{{ (hosts_file_exists.stat.exists and hosts_file_exists.stat.isreg) or (hosts_yml_file_exists.stat.exists and hosts_yml_file_exists.stat.isreg) }}"
|
inventry_file: "{{ (hosts_file_exists.stat.exists and hosts_file_exists.stat.isreg) or (hosts_yml_file_exists.stat.exists and hosts_yml_file_exists.stat.isreg) }}"
|
||||||
|
|
||||||
- debug: msg="Hosts file is already generated. {{ inventry_file }}"
|
- debug:
|
||||||
when: inventry_file
|
msg: "Hosts file is already generated. {{ inventry_file }}"
|
||||||
|
when: inventry_file
|
||||||
|
|
||||||
- name: Generate hosts and ssh-config on Browbeat Machine - Default(stack)
|
- name: Generate hosts and ssh-config on Browbeat Machine - Default(stack)
|
||||||
shell: . {{ home_dir }}/stackrc; {{ browbeat_path }}/ansible/generate_tripleo_inventory.sh -l --user stack
|
shell: . {{ home_dir }}/stackrc; {{ browbeat_path }}/ansible/generate_tripleo_inventory.sh -l --user stack
|
||||||
when: tripleo and (not inventry_file) and ansible_user!= "zuul"
|
when: tripleo and (not inventry_file) and ansible_user != "zuul"
|
||||||
|
|
||||||
- name: Generate hosts and ssh-config on Browbeat Machine - Zuul
|
- name: Generate hosts and ssh-config on Browbeat Machine - Zuul
|
||||||
shell: . {{ home_dir }}/stackrc; {{ browbeat_path }}/ansible/generate_tripleo_inventory.sh -l --user zuul
|
shell: . {{ home_dir }}/stackrc; {{ browbeat_path }}/ansible/generate_tripleo_inventory.sh -l --user zuul
|
||||||
when: tripleo and (not inventry_file) and ansible_user== "zuul"
|
when: tripleo and (not inventry_file) and ansible_user == "zuul"
|
||||||
|
|
||||||
- name: Move files to correct location
|
- name: Move files to correct location
|
||||||
command: mv {{item}} {{ browbeat_path }}/ansible/{{item}}
|
command: mv {{ item }} {{ browbeat_path }}/ansible/{{ item }}
|
||||||
with_items:
|
with_items:
|
||||||
- hosts.yml
|
- hosts.yml
|
||||||
- heat-admin-id_rsa
|
- heat-admin-id_rsa
|
||||||
when: "(tripleo and (not inventry_file))"
|
when: tripleo and (not inventry_file)
|
||||||
|
when: not is_rhoso_deployment
|
||||||
|
|
||||||
- name: Install requirements.txt into browbeat-venv
|
- name: Install requirements.txt into browbeat-venv
|
||||||
pip:
|
pip:
|
||||||
@ -180,4 +183,4 @@
|
|||||||
insertafter: "hide"
|
insertafter: "hide"
|
||||||
line: " v.Optional('regex',default=''): v.All(str),"
|
line: " v.Optional('regex',default=''): v.All(str),"
|
||||||
|
|
||||||
when: collectd_prometheus
|
when: collectd_prometheus and not is_rhoso_deployment
|
||||||
|
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
# Ignore errors here incase the flavors already exist.
|
# Ignore errors here incase the flavors already exist.
|
||||||
- name: Add flavors to overcloud
|
- name: Add flavors to overcloud
|
||||||
shell: . {{ overcloudrc }}; nova flavor-create {{item.name}} auto {{item.memory}} {{item.disk}} {{item.cpu}}
|
shell: . {{ overcloudrc }}; openstack flavor create --ram {{item.memory}} --disk {{item.disk}} --vcpus {{item.cpu}} {{item.name}}
|
||||||
with_items: "{{browbeat_flavors}}"
|
with_items: "{{browbeat_flavors}}"
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
@ -32,13 +32,17 @@
|
|||||||
with_items: "{{ browbeat_guest_images }}"
|
with_items: "{{ browbeat_guest_images }}"
|
||||||
|
|
||||||
- name: Upload image into cloud (Newton and Ocata versions)
|
- name: Upload image into cloud (Newton and Ocata versions)
|
||||||
shell: . {{ overcloudrc }}; openstack image create --public --disk-format={{ browbeat_guest_images[item].type }} --container-format=bare {{ browbeat_guest_images[item].name }} < {{ home_dir }}/{{ browbeat_guest_images[item].name }}.{{ browbeat_guest_images[item].type }}
|
shell: |
|
||||||
|
. {{ overcloudrc }}
|
||||||
|
openstack image create --public --disk-format={{ browbeat_guest_images[item].type }} --container-format=bare {{ browbeat_guest_images[item].name }} < {{ home_dir }}/{{ browbeat_guest_images[item].name }}.{{ browbeat_guest_images[item].type }}
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
when: "not browbeat_guest_images[item].convert_to_raw"
|
when: "not browbeat_guest_images[item].convert_to_raw"
|
||||||
with_items: "{{ browbeat_guest_images }}"
|
with_items: "{{ browbeat_guest_images }}"
|
||||||
|
|
||||||
- name: Upload raw image into cloud (Newton and Ocata versions)
|
- name: Upload raw image into cloud (Newton and Ocata versions)
|
||||||
shell: . {{ overcloudrc }}; openstack image create --public --disk-format=raw --container-format=bare {{ browbeat_guest_images[item].name }} < {{ home_dir }}/{{ browbeat_guest_images[item].name }}.raw
|
shell: |
|
||||||
|
. {{ overcloudrc }}
|
||||||
|
openstack image create --public --disk-format=raw --container-format=bare {{ browbeat_guest_images[item].name }} < {{ home_dir }}/{{ browbeat_guest_images[item].name }}.raw
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
when: "browbeat_guest_images[item].convert_to_raw"
|
when: "browbeat_guest_images[item].convert_to_raw"
|
||||||
with_items: "{{ browbeat_guest_images }}"
|
with_items: "{{ browbeat_guest_images }}"
|
||||||
|
@ -15,13 +15,16 @@ from oslo_db import options as db_options
|
|||||||
from browbeat_rally.db import models
|
from browbeat_rally.db import models
|
||||||
from rally.common import cfg
|
from rally.common import cfg
|
||||||
from oslo_db.sqlalchemy import session as db_session
|
from oslo_db.sqlalchemy import session as db_session
|
||||||
|
import os
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
|
|
||||||
# rally.conf always uses stack.sqlite database
|
username = os.getenv('USER')
|
||||||
|
|
||||||
|
# rally.conf always uses <username>.sqlite database
|
||||||
|
db_connection = "sqlite:///%s/%s.sqlite" % (tempfile.gettempdir(), username)
|
||||||
db_options.set_defaults(
|
db_options.set_defaults(
|
||||||
CONF, connection="sqlite:///%s/stack.sqlite" % tempfile.gettempdir())
|
CONF, connection=db_connection)
|
||||||
|
|
||||||
|
|
||||||
def _create_facade_lazily():
|
def _create_facade_lazily():
|
||||||
@ -35,7 +38,7 @@ def get_engine():
|
|||||||
|
|
||||||
# alternate way to create engine is
|
# alternate way to create engine is
|
||||||
# from oslo_db.sqlalchemy import engines
|
# from oslo_db.sqlalchemy import engines
|
||||||
# engine = engines.create_engine("sqlite:///%s/stack.sqlite" % tempfile.gettempdir())
|
# engine = engines.create_engine(db_connection)
|
||||||
def schema_create():
|
def schema_create():
|
||||||
engine = get_engine()
|
engine = get_engine()
|
||||||
metadata = schema.MetaData()
|
metadata = schema.MetaData()
|
||||||
|
@ -84,20 +84,20 @@
|
|||||||
# as python package. This code can be used in browbeat rally plugins.
|
# as python package. This code can be used in browbeat rally plugins.
|
||||||
# Sqlalchemy giving errors when we run this extra DB code as rally plugin
|
# Sqlalchemy giving errors when we run this extra DB code as rally plugin
|
||||||
# so we came up with this python package approach.
|
# so we came up with this python package approach.
|
||||||
- name: install rally browbeat code
|
- block:
|
||||||
shell: |
|
- name: Install rally browbeat code
|
||||||
source {{ rally_venv }}/bin/activate
|
shell: |
|
||||||
pip install .
|
source {{ rally_venv }}/bin/activate
|
||||||
args:
|
pip install .
|
||||||
executable: /bin/bash
|
args:
|
||||||
chdir: "{{ role_path }}/files/browbeat-rally"
|
executable: /bin/bash
|
||||||
when: rhosp_version is version('13.0', '>=')
|
chdir: "{{ role_path }}/files/browbeat-rally"
|
||||||
|
|
||||||
- name: create lock table in rally db for dynamic workloads
|
- name: Create lock table in rally db for dynamic workloads
|
||||||
shell: |
|
shell: |
|
||||||
source {{ rally_venv }}/bin/activate
|
source {{ rally_venv }}/bin/activate
|
||||||
python {{ role_path }}/files/create_lock_table.py
|
python {{ role_path }}/files/create_lock_table.py
|
||||||
when: rhosp_version is version('13.0', '>=')
|
when: is_rhoso_deployment or rhosp_version is version('13.0', '>=')
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: copy of stackrc
|
- name: copy of stackrc
|
||||||
@ -140,13 +140,17 @@
|
|||||||
|
|
||||||
- name: Setup rally deployment for overcloud
|
- name: Setup rally deployment for overcloud
|
||||||
shell: . {{ rally_venv }}/bin/activate; . {{ overcloudrc }}; rally deployment create --fromenv --name overcloud
|
shell: . {{ rally_venv }}/bin/activate; . {{ overcloudrc }}; rally deployment create --fromenv --name overcloud
|
||||||
|
when: not is_rhoso_deployment
|
||||||
|
|
||||||
|
- name: Setup rally deployment for overcloud
|
||||||
|
shell: . {{ rally_venv }}/bin/activate; rally deployment create --file={{home_dir}}/.config/openstack/keystone-v3.json --name overcloud
|
||||||
|
when: is_rhoso_deployment
|
||||||
|
|
||||||
- name: Check Rally deployment for overcloud
|
- name: Check Rally deployment for overcloud
|
||||||
shell: . {{ rally_venv }}/bin/activate; . {{ overcloudrc }}; rally deployment check
|
shell: . {{ rally_venv }}/bin/activate; . {{ overcloudrc }}; rally deployment check
|
||||||
register: rally_deployment_check_overcloud
|
register: rally_deployment_check_overcloud
|
||||||
|
|
||||||
- name: Fail if Rally deployment cannot be verfied for overcloud
|
- name: Fail if Rally deployment cannot be verified for overcloud
|
||||||
fail:
|
fail:
|
||||||
msg: "Failed to verify that your deployment is ready to benchmark"
|
msg: "Failed to verify that your deployment is ready to benchmark"
|
||||||
when: rally_deployment_check_overcloud.rc != 0
|
when: rally_deployment_check_overcloud.rc != 0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user