Skip to content

Commit

Permalink
Add support for Pbench agent installation
Browse files Browse the repository at this point in the history
To install Pbench agent on the compute nodes and vm's (i.e client and server),you have to follow the below steps and set the below params install/group_vars/all.yml

`pbench_key_url: <pbench_key_url>
 pbench_config_url: <pbench_config_url>
 pbench_configuration_environment: <pbench_configuration_environment>`

`cd  {{ ansible_user_dir}}/jetpack/install`

1) To create the client and server
     `ansible-playbook boot.yml`
2) Install Pbench agent bootstrapping
     `ansible-playbook pbench_agent_bootstrap.yml -e "repos=<perf-dept-repo>" `
3) Install Pbench agent install
     `ansible-playbook pbench_agent_install.yml`
  • Loading branch information
asyedham committed Dec 22, 2020
1 parent c8e9729 commit 8f598e0
Show file tree
Hide file tree
Showing 17 changed files with 508 additions and 0 deletions.
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,3 +163,20 @@ Requirements
Example:
controller_count = 3, then it will consider the first node in instackenv.json as undercloud and the next three nodes as controllers
2) set composable_roles: true true in group_vars/all.yml

## Pbench agent Installations
To install Pbench agent on the compute nodes and vm's (i.e client and server),you have to follow the below steps and set the below params install/group_vars/all.yml

`pbench_key_url: <pbench_key_url>
pbench_config_url: <pbench_config_url>
pbench_configuration_environment: <pbench_configuration_environment>`

`cd {{ ansible_user_dir}}/jetpack/install`

1) To create the client and server
`ansible-playbook boot_vms.yml`
2) Install Pbench agent bootstrapping
`ansible-playbook pbench_agent_bootstrap.yml -e "repos=<perf-dept-repo>" `
3) Install Pbench agent install
`ansible-playbook pbench_agent_install.yml`

4 changes: 4 additions & 0 deletions install/ansible.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[defaults]
host_key_checking = false
inventory = ~/.infrared/.workspaces/active/hosts
timeout = 120
108 changes: 108 additions & 0 deletions install/boot_vms.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---

# Playbook to create client and server vm on Openstack
#
# ansible-playbook boot_vms.yml

- hosts: undercloud
gather_facts: yes
become: true
vars:
vm_password: centos
external_network: public
pre_tasks:
- name: generate pass_auth.sh
template:
src: pass_auth.sh.j2
dest: "{{ user_dir }}/pass_auth.sh"
mode: a+rwx

- name: install packages
package:
name: "{{ item }}"
state: present
loop:
- wget
- libguestfs-tools
- sshpass
- libvirt

- name: restart libvirt service
service:
name: libvirtd
state: restarted

roles:
- images
- flavors
- network
- create_vm

post_tasks:
- name: check router exists
shell: |
. {{ overcloudrc }}
openstack router list | grep 'r1'
register: router_exists
ignore_errors: yes

- name: router
shell: |
. {{ overcloudrc }}
openstack router create r1
cidr=10.0.0.0
subnet_id=`openstack subnet list -c ID -c Subnet -f value | grep $cidr | cut -d' ' -f1`
neutron router-interface-add r1 $subnet_id
neutron router-gateway-set r1 {{ external_network }}
when: router_exists.stdout == ""

- name: create floating ip for client and server
shell: |
. {{ overcloudrc }}
client_port_id=`openstack port show {{ ports[0] }} -c id -f value`
server_port_id=`openstack port show {{ ports[1] }} -c id -f value`
neutron floatingip-create --port-id $client_port_id {{ external_network }}
neutron floatingip-create --port-id $server_port_id {{ external_network }}
ignore_errors: yes

- name: get floating ip of server and client
shell: |
. {{ overcloudrc }}
openstack server list | grep {{ item }} | cut -d \| -f 5 | cut -d \, -f 2 | awk '{$1=$1;print}'
register: vms_fip
with_items:
- "{{ vm_names }}"

- name: get computes ip
shell: |
. {{ stackrc }}
nova list | grep {{ item }} | cut -d \| -f 7 |cut -d \= -f 2 | awk '{$1=$1;print}'
register: computes_ip
with_items:
- "{{ compute_names }}"

- name: update user to root
lineinfile:
path: "{{ user_dir}}/.ssh/config"
regexp: ' User heat-admin'
line: ' User root'

- name: copy the ssh keys
shell: |
. {{ overcloudrc }}
echo '{{ vm_password }}' | sshpass ssh-copy-id -i {{ user_dir }}/.ssh/id_rsa -o 'StrictHostKeyChecking no' -f root@{{ item.stdout }}
with_items: "{{ vms_fip.results }}"
changed_when: false

- name: get default route
shell: |
ip r | grep default | cut -d ' ' -f5
register: default_route

- name: flush iptables on undercloud and add masquerade rule
become: true
shell: |
iptables -F
iptables -t nat -L --line-numbers
iptables -t nat -A POSTROUTING -o {{ default_route.stdout }} -j MASQUERADE
iptables -t nat -A POSTROUTING -o br-ctlplane -j MASQUERADE
10 changes: 10 additions & 0 deletions install/filter_plugins/install_filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
def dict_remove_item( dict, item):
"""Remove an item from a dictionary."""
del dict[item]
return dict

class FilterModule(object):
def filters(self):
return {
'dict_remove_item': dict_remove_item,
}
34 changes: 34 additions & 0 deletions install/group_vars/all.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
guest_image_name: pbench_image
# user can add the guest_image url required below
guest_images:
pbench_image:
name: pbench_image
url_centos8: http://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.2.2004-20200611.2.x86_64.qcow2
url_centos7: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
type: qcow2
convert_to_raw: false

# rhel 8
epel_repo:
el8: https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
el7: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

pbench_image_rhel: false

compute_names: ['compute-0', 'compute-1' ]

#name for the client and server
vm_names: [ client, server ]

user_dir: /home/stack
overcloudrc: /home/stack/overcloudrc
stackrc: /home/stack/stackrc
# port names
ports: [ 'client_port', 'server_port']
timeout: 30

# update the values to install pbench agent
#pbench_key_url:
#pbench_config_url:
#pbench_configuration_environment: "production"
59 changes: 59 additions & 0 deletions install/pbench_agent_bootstrap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
#
# Playbook for installing pbench_bootstrap
#
# Usage:
# ansible-playbook pbench_agent_bootstrap.yml -e "repos=<perf-dept-repo>"

- hosts: compute
tasks:
- name: copy the keys
shell: |
sudo cp -r ~/.ssh /root/
- hosts: undercloud
gather_facts: yes
tasks:
- name: clone perf-dept
shell: |
GIT_SSL_NO_VERIFY=true git clone {{ repos }}
ignore_errors: yes

- name: get computes ip
shell: |
. {{ stackrc }}
nova list | grep {{ item }} | cut -d \| -f 7 |cut -d \= -f 2 | awk '{$1=$1;print}'
register: computes_ip
with_items:
- "{{ compute_names }}"

- name: get floating ip of server and client
shell: |
. {{ overcloudrc }}
openstack server list | grep {{ item }} | cut -d \| -f 5 | cut -d \, -f 2 | awk '{$1=$1;print}'
register: vms_fip
with_items:
- "{{ vm_names }}"

- name: copy the keys
shell: |
sudo cp -r ~/.ssh /root/
- name: create inventories
file:
path: "{{ user_dir }}/.config/Inventories/"
state: directory

- name: generate a inventory
template:
src: repo_bootstrap.hosts.j2
dest: "{{ user_dir }}/.config/Inventories/repo-bootstrap.hosts"

- name: run repo-bootstrap.yml
shell: |
ansible-playbook --user=root -i "{{ user_dir}}/.config/Inventories/repo-bootstrap.hosts" repo-bootstrap.yml
register: repo_bootstrap
args:
chdir: "{{ user_dir }}/perf-dept/sysadmin/Ansible"
- debug:
msg: "{{ repo_bootstrap }}"
96 changes: 96 additions & 0 deletions install/pbench_agent_install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
#
# Playbook for pbench agent installations
# Usage:
# ansible-playbook pbench_agent_install.yml

- hosts: compute
gather_facts: yes
tasks:
- name: install latest epel-release
yum:
name: "{{ epel_repo.el7 }}"
state: present
become: yes
loop:
- "{{ epel_repo.el7 }}"
- perl-Data-UUID
when: ansible_distribution_major_version < '8'

- name: install perl-Data-UUID on Compute nodes
become: true
dnf:
name: perl-Data-UUID
state: present
when: ansible_distribution_major_version == '8'

- hosts: undercloud
vars:
pbench_agent_install: true

tasks:
- block:
- name: remove old epel-release
yum:
name: "{{item }}"
state: absent
become: yes
ignore_errors: yes
loop:
- epel-release
- ansible

- name: install latest epel-release
yum:
name: "{{ epel_repo.el7 }}"
state: present
become: yes

- name: install ansible 2.9
yum:
name: ansible
state: present
become: yes

when: ansible_distribution_major_version < '8'


- name: Install the pbench-agent roles from Galaxy
shell: |
ansible-galaxy collection install pbench.agent
export ANSIBLE_ROLES_PATH=$HOME/.ansible/collections/ansible_collections/pbench/agent/roles:$ANSIBLE_ROLES_PATH
- name: generate pbench agent playbook
template:
src: pbench_agent_install.yml.j2
dest: "{{ user_dir }}/.ansible/collections/ansible_collections/pbench/agent/roles/pbench_agent_install.yml"

- name: get computes ip
shell: |
. {{ stackrc }}
nova list | grep {{ item }} | cut -d \| -f 7 |cut -d \= -f 2 | awk '{$1=$1;print}'
register: computes_ip
with_items:
- "{{ compute_names }}"

- name: get floating ip of server and client
shell: |
. {{ overcloudrc }}
openstack server list | grep {{ item }} | cut -d \| -f 5 | cut -d \, -f 2 | awk '{$1=$1;print}'
register: vms_fip
with_items:
- "{{ vm_names }}"

- name: create a inventory file
template:
src: repo_bootstrap.hosts.j2
dest: "{{ user_dir }}/.config/myhosts.inv"

- name: run the playbook pbench_agent_install.yml
shell: |
ansible-playbook -i ~/.config/myhosts.inv pbench_agent_install.yml
register: agent_install
args:
chdir: "{{ user_dir }}/.ansible/collections/ansible_collections/pbench/agent/roles/"
- debug:
msg: "{{ agent_install }}"
19 changes: 19 additions & 0 deletions install/roles/create_vm/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
- name: create a vm's
shell: . {{ overcloudrc }}; openstack server create --flavor pbench_flavor --image {{ guest_image_name }} --nic port-id={{ item[0].stdout }} --user-data {{ user_dir }}/pass_auth.sh {{ item[1] }}
with_together:
- "{{ port_ids.results }}"
- "{{ vm_names }}"
ignore_errors: yes

- name: create a vm's
shell: . {{ overcloudrc }}; openstack server create --flavor pbench_flavor --image {{ guest_image_name }} --nic port-id={{ item[0].stdout }} --user-data {{ user_dir }}/pass_auth.sh {{ item[1] }}
with_together:
- "{{ get_port_ids.results }}"
- "{{ vm_names }}"
ignore_errors: yes


- name: wait for vm to boot
wait_for:
timeout: "{{ timeout }}"
8 changes: 8 additions & 0 deletions install/roles/flavors/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
# Add flavors to OpenStack Cloud
# Ignore errors here incase the flavors already exist.

- name: Add flavors to overcloud
shell: . {{ overcloudrc }}; openstack flavor create --public {{ item.name }} --id auto --ram {{ item.ram }} --disk {{ item.disk }} --vcpus {{ item.cpu }}
with_items: "{{ pbench_flavors }}"
ignore_errors: true
7 changes: 7 additions & 0 deletions install/roles/flavors/vars/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
pbench_flavors:
- name: pbench_flavor
cpu: 8
disk: 160
ram: 16384

Loading

0 comments on commit 8f598e0

Please sign in to comment.