Rework the lampstack workload to enable provision parallel
Change-Id: Ic5047a1fd0e9d158f33f86ab013a445aa334da2a
This commit is contained in:
parent
791fbe78d1
commit
a58bab3adf
|
@ -1,5 +1,6 @@
|
||||||
*.out
|
*.out
|
||||||
vars/*
|
vars/*
|
||||||
|
run/*
|
||||||
*/**/*.log
|
*/**/*.log
|
||||||
*/**/.DS_Store
|
*/**/.DS_Store
|
||||||
*/**/._
|
*/**/._
|
||||||
|
|
|
@ -1,193 +0,0 @@
|
||||||
---
|
|
||||||
- name: Get start timestamp
|
|
||||||
set_fact: starttime="{{ ansible_date_time }}"
|
|
||||||
|
|
||||||
- name: Retrieve specified flavor
|
|
||||||
os_flavor_facts:
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: "{{ app_env.flavor_name }}"
|
|
||||||
|
|
||||||
- name: Create a key-pair
|
|
||||||
os_keypair:
|
|
||||||
state: "present"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: "lampstack"
|
|
||||||
public_key_file: "{{ app_env.public_key_file }}"
|
|
||||||
|
|
||||||
- name: Create volume
|
|
||||||
os_volume:
|
|
||||||
state: present
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
size: "{{ app_env.volume_size }}"
|
|
||||||
wait: yes
|
|
||||||
display_name: db_volume
|
|
||||||
|
|
||||||
- name: Create security group
|
|
||||||
os_security_group:
|
|
||||||
state: present
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: lampstack_sg
|
|
||||||
description: security group for lampstack
|
|
||||||
|
|
||||||
- name: Add security rules
|
|
||||||
os_security_group_rule:
|
|
||||||
state: present
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
security_group: lampstack_sg
|
|
||||||
protocol: "{{ item.protocol }}"
|
|
||||||
direction: "{{ item.dir }}"
|
|
||||||
port_range_min: "{{ item.p_min }}"
|
|
||||||
port_range_max: "{{ item.p_max }}"
|
|
||||||
remote_ip_prefix: 0.0.0.0/0
|
|
||||||
with_items:
|
|
||||||
- { p_min: 22, p_max: 22, dir: ingress, protocol: tcp }
|
|
||||||
- { p_min: 80, p_max: 80, dir: ingress, protocol: tcp }
|
|
||||||
- { p_min: 2049, p_max: 2049, dir: ingress, protocol: tcp }
|
|
||||||
- { p_min: 2049, p_max: 2049, dir: egress, protocol: tcp }
|
|
||||||
- { p_min: 3306, p_max: 3306, dir: ingress, protocol: tcp }
|
|
||||||
- { p_min: -1, p_max: -1, dir: ingress, protocol: icmp }
|
|
||||||
- { p_min: -1, p_max: -1, dir: egress, protocol: icmp }
|
|
||||||
|
|
||||||
- name: Create database node
|
|
||||||
os_server:
|
|
||||||
state: "present"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: database
|
|
||||||
image: "{{ app_env.image_name }}"
|
|
||||||
key_name: "lampstack"
|
|
||||||
timeout: 200
|
|
||||||
flavor: "{{ app_env.flavor_name }}"
|
|
||||||
network: "{{ app_env.private_net_name }}"
|
|
||||||
userdata: "{{ lookup('template', 'templates/userdata.j2') }}"
|
|
||||||
config_drive: "{{ app_env.config_drive | default('no') }}"
|
|
||||||
security_groups: lampstack_sg
|
|
||||||
floating_ip_pools: "{{ app_env.public_net_name | default(omit) }}"
|
|
||||||
meta:
|
|
||||||
hostname: database
|
|
||||||
register: database
|
|
||||||
|
|
||||||
- name: Add database node to the dbservers host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ database.openstack.public_v4 }}"
|
|
||||||
groups: dbservers
|
|
||||||
when: database.openstack.public_v4 != ""
|
|
||||||
|
|
||||||
- name: Add database node to the dbservers host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ database.openstack.private_v4 }}"
|
|
||||||
groups: dbservers
|
|
||||||
when: database.openstack.public_v4 == ""
|
|
||||||
|
|
||||||
- name: Create balancer node
|
|
||||||
os_server:
|
|
||||||
state: "present"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: balancer
|
|
||||||
image: "{{ app_env.image_name }}"
|
|
||||||
key_name: "lampstack"
|
|
||||||
timeout: 200
|
|
||||||
flavor: "{{ app_env.flavor_name }}"
|
|
||||||
network: "{{ app_env.private_net_name }}"
|
|
||||||
userdata: "{{ lookup('template', 'templates/userdata.j2') }}"
|
|
||||||
config_drive: "{{ app_env.config_drive | default('no') }}"
|
|
||||||
security_groups: lampstack_sg
|
|
||||||
floating_ip_pools: "{{ app_env.public_net_name | default(omit) }}"
|
|
||||||
meta:
|
|
||||||
hostname: balancer
|
|
||||||
register: balancer
|
|
||||||
|
|
||||||
- name: Add balancer node to the balancers host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ balancer.openstack.public_v4 }}"
|
|
||||||
groups: balancers
|
|
||||||
when: balancer.openstack.public_v4 != ""
|
|
||||||
|
|
||||||
- name: Add balancer node to the balancers host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ balancer.openstack.private_v4 }}"
|
|
||||||
groups: balancers
|
|
||||||
when: balancer.openstack.public_v4 == ""
|
|
||||||
|
|
||||||
- name: Create a volume for database to save data
|
|
||||||
os_server_volume:
|
|
||||||
state: present
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
server: database
|
|
||||||
volume: db_volume
|
|
||||||
device: "{{ app_env.block_device_name }}"
|
|
||||||
|
|
||||||
- name: Create web server nodes to host application
|
|
||||||
os_server:
|
|
||||||
state: "present"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: apache-{{ item }}
|
|
||||||
image: "{{ app_env.image_name }}"
|
|
||||||
key_name: "lampstack"
|
|
||||||
timeout: 200
|
|
||||||
flavor: "{{ app_env.flavor_name }}"
|
|
||||||
network: "{{ app_env.private_net_name }}"
|
|
||||||
floating_ip_pools: "{{ app_env.public_net_name | default(omit) }}"
|
|
||||||
userdata: "{{ lookup('template', 'templates/userdata.j2') }}"
|
|
||||||
config_drive: "{{ app_env.config_drive | default('no') }}"
|
|
||||||
security_groups: lampstack_sg
|
|
||||||
meta:
|
|
||||||
hostname: apache-{{ item }}
|
|
||||||
with_sequence: count={{ app_env.stack_size - 2 }}
|
|
||||||
register: webserver
|
|
||||||
|
|
||||||
- name: Add web servers to webservers host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ item.openstack.public_v4 }}"
|
|
||||||
groups: webservers
|
|
||||||
when: item.openstack.public_v4 != ""
|
|
||||||
with_items: "{{ webserver.results }}"
|
|
||||||
no_log: True
|
|
||||||
|
|
||||||
- name: Add web servers to webservers host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ item.openstack.private_v4 }}"
|
|
||||||
groups: webservers
|
|
||||||
when: item.openstack.public_v4 == ""
|
|
||||||
with_items: "{{ webserver.results }}"
|
|
||||||
no_log: True
|
|
||||||
|
|
||||||
- name: Add one web servers to wps host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ webserver.results[0].openstack.public_v4 }}"
|
|
||||||
groups: wps
|
|
||||||
when: webserver.results[0].openstack.public_v4 != ""
|
|
||||||
no_log: True
|
|
||||||
|
|
||||||
- name: Add one web servers to wps host group
|
|
||||||
add_host:
|
|
||||||
name: "{{ webserver.results[0].openstack.private_v4 }}"
|
|
||||||
groups: wps
|
|
||||||
when: webserver.results[0].openstack.public_v4 == ""
|
|
||||||
no_log: True
|
|
|
@ -1,4 +1,8 @@
|
||||||
---
|
---
|
||||||
|
- name: update apt cache
|
||||||
|
apt: update_cache=yes
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
- name: Haproxy install
|
- name: Haproxy install
|
||||||
package:
|
package:
|
||||||
name: haproxy
|
name: haproxy
|
||||||
|
@ -28,11 +32,9 @@
|
||||||
- name: Add web servers to the haproxy
|
- name: Add web servers to the haproxy
|
||||||
lineinfile:
|
lineinfile:
|
||||||
dest: /etc/haproxy/haproxy.cfg
|
dest: /etc/haproxy/haproxy.cfg
|
||||||
line: " server ws{{ item[0].openstack[item[1]] }} {{ item[0].openstack[item[1]] }}:80 check"
|
line: " server ws{{ hostvars[item].inter_ip }} {{ hostvars[item].inter_ip }}:80 check"
|
||||||
with_nested:
|
with_flattened:
|
||||||
- "{{ hostvars.cloud.webserver.results }}"
|
- "{{ groups['webservers'] }}"
|
||||||
- ["private_v4", "public_v4"]
|
|
||||||
when: item[0].openstack[item[1]] != ''
|
|
||||||
no_log: True
|
no_log: True
|
||||||
|
|
||||||
- service: name=haproxy state=restarted enabled=yes
|
- service: name=haproxy state=restarted enabled=yes
|
||||||
|
|
|
@ -5,19 +5,10 @@
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
state: absent
|
state: absent
|
||||||
floating_ip_address: "{{ database.openstack.public_v4 }}"
|
floating_ip_address: "{{ item }}"
|
||||||
server: "{{ database.openstack.name }}"
|
purge: True
|
||||||
when: database.openstack.private_v4 != ""
|
server: "{{ hostvars[item].inter_name }}"
|
||||||
|
with_flattened:
|
||||||
|
- "{{ groups['webservers'] }}"
|
||||||
|
- "{{ groups['dbservers'] }}"
|
||||||
no_log: True
|
no_log: True
|
||||||
|
|
||||||
- os_floating_ip:
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
state: absent
|
|
||||||
floating_ip_address: "{{ item.openstack.public_v4 }}"
|
|
||||||
server: "{{ item.openstack.name }}"
|
|
||||||
with_items: "{{ webserver.results }}"
|
|
||||||
when: item.openstack.private_v4 != ""
|
|
||||||
no_log: True
|
|
|
@ -1,8 +1,4 @@
|
||||||
---
|
---
|
||||||
- name: Wait until server is up and runnning
|
|
||||||
local_action: wait_for port=22 host="{{ ansible_ssh_host | default(inventory_hostname) }}" search_regex=OpenSSH delay=10
|
|
||||||
become: no
|
|
||||||
|
|
||||||
- name: Install python2 for Ansible
|
- name: Install python2 for Ansible
|
||||||
raw: dnf install -y python2 python2-dnf libselinux-python
|
raw: dnf install -y python2 python2-dnf libselinux-python
|
||||||
register: result
|
register: result
|
||||||
|
@ -10,3 +6,10 @@
|
||||||
|
|
||||||
- name: Set SELinux to permisive
|
- name: Set SELinux to permisive
|
||||||
selinux: policy=targeted state=permissive
|
selinux: policy=targeted state=permissive
|
||||||
|
|
||||||
|
- name: Setup /etc/hosts on every node
|
||||||
|
lineinfile:
|
||||||
|
dest: /etc/hosts
|
||||||
|
line: "{{ item }}"
|
||||||
|
state: present
|
||||||
|
with_lines: cat "{{ playbook_dir }}/run/lampstackhosts"
|
|
@ -1,4 +1,11 @@
|
||||||
---
|
---
|
||||||
- name: Wait until server is up and runnning
|
- name: Setup /etc/hosts on every node
|
||||||
local_action: wait_for port=22 host="{{ ansible_ssh_host | default(inventory_hostname) }}" search_regex=OpenSSH delay=10
|
lineinfile:
|
||||||
become: no
|
dest: /etc/hosts
|
||||||
|
line: "{{ item }}"
|
||||||
|
state: present
|
||||||
|
with_lines: cat "{{ playbook_dir }}/run/lampstackhosts"
|
||||||
|
|
||||||
|
- name: Make sure that cloud-init script has completed
|
||||||
|
wait_for:
|
||||||
|
path: "/run/cloud-init/result.json"
|
||||||
|
|
|
@ -62,11 +62,9 @@
|
||||||
- name: Setup NFS webserver access
|
- name: Setup NFS webserver access
|
||||||
lineinfile:
|
lineinfile:
|
||||||
dest: /etc/exports
|
dest: /etc/exports
|
||||||
line: "/storage/wpcontent {{ item[0].openstack[item[1]] }}/32(rw,sync,no_root_squash,no_subtree_check)"
|
line: "/storage/wpcontent {{ hostvars[item].inter_ip }}/32(rw,sync,no_root_squash,no_subtree_check)"
|
||||||
with_nested:
|
with_flattened:
|
||||||
- "{{ hostvars.cloud.webserver.results }}"
|
- "{{ groups['webservers'] }}"
|
||||||
- ["private_v4", "public_v4"]
|
|
||||||
when: item[0].openstack[item[1]] != ''
|
|
||||||
no_log: True
|
no_log: True
|
||||||
|
|
||||||
- name: nfs export
|
- name: nfs export
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
---
|
|
||||||
- name: Get start timestamp
|
|
||||||
set_fact: starttime="{{ ansible_date_time }}"
|
|
||||||
|
|
||||||
- name: Delete key pairs
|
|
||||||
os_keypair:
|
|
||||||
state: "absent"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: "lampstack"
|
|
||||||
public_key_file: "{{ app_env.public_key_file }}"
|
|
||||||
|
|
||||||
- name: Delete database node
|
|
||||||
os_server:
|
|
||||||
state: "absent"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: database
|
|
||||||
image: "{{ app_env.image_name }}"
|
|
||||||
key_name: "lampstack"
|
|
||||||
timeout: 200
|
|
||||||
network: "{{ app_env.private_net_name }}"
|
|
||||||
meta:
|
|
||||||
hostname: database
|
|
||||||
|
|
||||||
- name: Delete balancer node
|
|
||||||
os_server:
|
|
||||||
state: "absent"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: balancer
|
|
||||||
image: "{{ app_env.image_name }}"
|
|
||||||
key_name: "lampstack"
|
|
||||||
timeout: 200
|
|
||||||
network: "{{ app_env.private_net_name }}"
|
|
||||||
meta:
|
|
||||||
hostname: balancer
|
|
||||||
|
|
||||||
- name: Delete web server nodes
|
|
||||||
os_server:
|
|
||||||
state: "absent"
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: apache-{{ item }}
|
|
||||||
image: "{{ app_env.image_name }}"
|
|
||||||
key_name: "lampstack"
|
|
||||||
timeout: 200
|
|
||||||
network: "{{ app_env.private_net_name }}"
|
|
||||||
meta:
|
|
||||||
hostname: apache-{{ item }}
|
|
||||||
with_sequence: count={{ app_env.stack_size - 2 }}
|
|
||||||
|
|
||||||
- name: Delete security group
|
|
||||||
os_security_group:
|
|
||||||
state: absent
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
name: lampstack_sg
|
|
||||||
description: secuirty group for lampstack
|
|
||||||
|
|
||||||
- name: Delete cinder volume
|
|
||||||
os_volume:
|
|
||||||
state: absent
|
|
||||||
auth: "{{ auth }}"
|
|
||||||
region_name: "{{ app_env.region_name }}"
|
|
||||||
availability_zone: "{{ app_env.availability_zone }}"
|
|
||||||
validate_certs: "{{ app_env.validate_certs }}"
|
|
||||||
wait: yes
|
|
||||||
display_name: db_volume
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
---
|
||||||
|
- name: Add the node to host group with private IP
|
||||||
|
add_host:
|
||||||
|
name: "{{ hostvars[item].public_ip }}"
|
||||||
|
inter_ip: "{{ hostvars[item].private_ip }}"
|
||||||
|
inter_name: "{{ item }}"
|
||||||
|
groups: "{{ hostvars[item].targetgroup }}"
|
||||||
|
with_items: "{{ groups['prohosts'] }}"
|
||||||
|
|
||||||
|
- name: Add one web server to wps host group
|
||||||
|
add_host:
|
||||||
|
name: "{{ groups['webservers'][0] }}"
|
||||||
|
groups: wps
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Remove the lampstackhosts file
|
||||||
|
file:
|
||||||
|
path: "{{ playbook_dir }}/run/lampstackhosts"
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Build up hosts file
|
||||||
|
lineinfile:
|
||||||
|
dest: "{{ playbook_dir }}/run/lampstackhosts"
|
||||||
|
line: "{{ hostvars[item].inter_ip }} {{ hostvars[item].inter_name }}"
|
||||||
|
state: present
|
||||||
|
create: yes
|
||||||
|
with_flattened:
|
||||||
|
- '{{ groups["dbservers"] }}'
|
||||||
|
- '{{ groups["balancers"] }}'
|
||||||
|
- '{{ groups["webservers"] }}'
|
||||||
|
|
||||||
|
- name: Wait until servers are up and runnning
|
||||||
|
wait_for:
|
||||||
|
host: "{{ item }}"
|
||||||
|
port: 22
|
||||||
|
state: started
|
||||||
|
delay: 15
|
||||||
|
connect_timeout: 20
|
||||||
|
timeout: 300
|
||||||
|
with_items:
|
||||||
|
- '{{ groups["dbservers"] }}'
|
||||||
|
- '{{ groups["balancers"] }}'
|
||||||
|
- '{{ groups["webservers"] }}'
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
- name: Delete key pairs
|
||||||
|
os_keypair:
|
||||||
|
state: "absent"
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: "lampstack"
|
||||||
|
public_key_file: "{{ app_env.public_key_file }}"
|
||||||
|
|
||||||
|
- name: Delete security group
|
||||||
|
os_security_group:
|
||||||
|
state: absent
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: lampstack_sg
|
||||||
|
description: secuirty group for lampstack
|
||||||
|
|
||||||
|
- name: Delete cinder volume
|
||||||
|
os_volume:
|
||||||
|
state: absent
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
wait: yes
|
||||||
|
display_name: db_volume
|
|
@ -0,0 +1,100 @@
|
||||||
|
---
|
||||||
|
- name: Ensure we have a working directory to save runtime files
|
||||||
|
file: "path={{ playbook_dir }}/run state=directory"
|
||||||
|
|
||||||
|
- name: Retrieve specified flavor
|
||||||
|
os_flavor_facts:
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: "{{ app_env.flavor_name }}"
|
||||||
|
|
||||||
|
- name: Create a key-pair
|
||||||
|
os_keypair:
|
||||||
|
state: "present"
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: "lampstack"
|
||||||
|
public_key_file: "{{ app_env.public_key_file }}"
|
||||||
|
|
||||||
|
- name: Create volume
|
||||||
|
os_volume:
|
||||||
|
state: present
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
size: "{{ app_env.volume_size }}"
|
||||||
|
wait: yes
|
||||||
|
display_name: db_volume
|
||||||
|
|
||||||
|
- name: Create security group
|
||||||
|
os_security_group:
|
||||||
|
state: present
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: lampstack_sg
|
||||||
|
description: security group for lampstack
|
||||||
|
|
||||||
|
- name: Add security rules
|
||||||
|
os_security_group_rule:
|
||||||
|
state: present
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
security_group: lampstack_sg
|
||||||
|
protocol: "{{ item.protocol }}"
|
||||||
|
direction: "{{ item.dir }}"
|
||||||
|
port_range_min: "{{ item.p_min }}"
|
||||||
|
port_range_max: "{{ item.p_max }}"
|
||||||
|
remote_ip_prefix: 0.0.0.0/0
|
||||||
|
with_items:
|
||||||
|
- { p_min: 22, p_max: 22, dir: ingress, protocol: tcp }
|
||||||
|
- { p_min: 80, p_max: 80, dir: ingress, protocol: tcp }
|
||||||
|
- { p_min: 2049, p_max: 2049, dir: ingress, protocol: tcp }
|
||||||
|
- { p_min: 2049, p_max: 2049, dir: egress, protocol: tcp }
|
||||||
|
- { p_min: 3306, p_max: 3306, dir: ingress, protocol: tcp }
|
||||||
|
- { p_min: -1, p_max: -1, dir: ingress, protocol: icmp }
|
||||||
|
- { p_min: -1, p_max: -1, dir: egress, protocol: icmp }
|
||||||
|
|
||||||
|
- name: Create volume
|
||||||
|
os_volume:
|
||||||
|
state: present
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
size: "{{ app_env.volume_size }}"
|
||||||
|
wait: yes
|
||||||
|
display_name: db_volume
|
||||||
|
|
||||||
|
- name: Add database node to provisioning host group
|
||||||
|
add_host:
|
||||||
|
name: "database"
|
||||||
|
targetgroup: "dbservers"
|
||||||
|
ansible_host: "127.0.0.1"
|
||||||
|
groups: "prohosts"
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Add balancer node to provisioning host group
|
||||||
|
add_host:
|
||||||
|
name: "balancer"
|
||||||
|
targetgroup: "balancers"
|
||||||
|
ansible_host: "127.0.0.1"
|
||||||
|
groups: "prohosts"
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Add apache nodes to provisioning host group
|
||||||
|
add_host:
|
||||||
|
name: "apache-{{ item }}"
|
||||||
|
targetgroup: "webservers"
|
||||||
|
ansible_host: "127.0.0.1"
|
||||||
|
groups: "prohosts"
|
||||||
|
with_sequence: count={{ app_env.stack_size - 2 }}
|
||||||
|
no_log: True
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
- name: Add database node to provisioning host group
|
||||||
|
add_host:
|
||||||
|
name: "database"
|
||||||
|
targetgroup: "dbservers"
|
||||||
|
ansible_host: "127.0.0.1"
|
||||||
|
groups: "prohosts"
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Add balancer node to provisioning host group
|
||||||
|
add_host:
|
||||||
|
name: "balancer"
|
||||||
|
targetgroup: "balancers"
|
||||||
|
ansible_host: "127.0.0.1"
|
||||||
|
groups: "prohosts"
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Add apache nodes to provisioning host group
|
||||||
|
add_host:
|
||||||
|
name: "apache-{{ item }}"
|
||||||
|
targetgroup: "webservers"
|
||||||
|
ansible_host: "127.0.0.1"
|
||||||
|
groups: "prohosts"
|
||||||
|
with_sequence: count={{ app_env.stack_size - 2 }}
|
||||||
|
no_log: True
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
- name: Create an OpenStack virtual machine
|
||||||
|
os_server:
|
||||||
|
state: "present"
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
image: "{{ app_env.image_name }}"
|
||||||
|
key_name: "lampstack"
|
||||||
|
timeout: 200
|
||||||
|
flavor: "{{ app_env.flavor_name }}"
|
||||||
|
network: "{{ app_env.private_net_name }}"
|
||||||
|
userdata: "{{ lookup('template', 'roles/provision/templates/userdata.j2') }}"
|
||||||
|
config_drive: "{{ app_env.config_drive | default('no') }}"
|
||||||
|
security_groups: lampstack_sg
|
||||||
|
floating_ip_pools: "{{ app_env.public_net_name | default(omit) }}"
|
||||||
|
meta:
|
||||||
|
hostname: "{{ inventory_hostname }}"
|
||||||
|
register: osvm
|
||||||
|
|
||||||
|
- name: Setup variables for generating host groups
|
||||||
|
set_fact:
|
||||||
|
inter_name: "{{ osvm.openstack.name }}"
|
||||||
|
public_ip: "{{ osvm.openstack.public_v4 }}"
|
||||||
|
private_ip: "{{ osvm.openstack.private_v4 }}"
|
||||||
|
|
||||||
|
- name: Use public ip address when private ip is empty
|
||||||
|
set_fact:
|
||||||
|
private_ip: "{{ osvm.openstack.public_v4 }}"
|
||||||
|
when: osvm.openstack.private_v4 == ""
|
||||||
|
|
||||||
|
- name: Use private ip address when public ip is empty
|
||||||
|
set_fact:
|
||||||
|
public_ip: "{{ osvm.openstack.private_v4 }}"
|
||||||
|
when: osvm.openstack.public_v4 == ""
|
||||||
|
|
||||||
|
- name: Attach a volume to the node
|
||||||
|
os_server_volume:
|
||||||
|
state: present
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
server: "{{ inventory_hostname }}"
|
||||||
|
volume: "db_volume"
|
||||||
|
device: "{{ app_env.block_device_name }}"
|
||||||
|
when: inventory_hostname == "database"
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
- name: Destroy an OpenStack virtual machine
|
||||||
|
os_server:
|
||||||
|
state: "absent"
|
||||||
|
auth: "{{ auth }}"
|
||||||
|
region_name: "{{ app_env.region_name }}"
|
||||||
|
availability_zone: "{{ app_env.availability_zone }}"
|
||||||
|
validate_certs: "{{ app_env.validate_certs }}"
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
image: "{{ app_env.image_name }}"
|
||||||
|
timeout: 200
|
||||||
|
network: "{{ app_env.private_net_name }}"
|
||||||
|
meta:
|
||||||
|
hostname: "{{ inventory_hostname }}"
|
|
@ -89,18 +89,9 @@
|
||||||
- name: Mount the directory using private IP
|
- name: Mount the directory using private IP
|
||||||
mount:
|
mount:
|
||||||
name: /var/www/html/wp-content
|
name: /var/www/html/wp-content
|
||||||
src: "{{ hostvars.cloud.database.openstack.private_v4 }}:/storage/wpcontent"
|
src: "{{ hostvars[groups['dbservers'][0]].inter_ip }}:/storage/wpcontent"
|
||||||
state: mounted
|
state: mounted
|
||||||
fstype: nfs
|
fstype: nfs
|
||||||
when: hostvars.cloud.database.openstack.private_v4 != ""
|
|
||||||
|
|
||||||
- name: Mount the directory using public IP
|
|
||||||
mount:
|
|
||||||
name: /var/www/html/wp-content
|
|
||||||
src: "{{ hostvars.cloud.database.openstack.public_v4 }}:/storage/wpcontent"
|
|
||||||
state: mounted
|
|
||||||
fstype: nfs
|
|
||||||
when: hostvars.cloud.database.openstack.private_v4 == ""
|
|
||||||
|
|
||||||
- lineinfile: dest=/etc/apache2/apache2.conf line="ServerName localhost"
|
- lineinfile: dest=/etc/apache2/apache2.conf line="ServerName localhost"
|
||||||
when: ansible_distribution == 'Ubuntu'
|
when: ansible_distribution == 'Ubuntu'
|
||||||
|
@ -134,22 +125,14 @@
|
||||||
- { then: 'database_name_here', now: 'decision2016' }
|
- { then: 'database_name_here', now: 'decision2016' }
|
||||||
- { then: 'username_here', now: "{{ db_user }}" }
|
- { then: 'username_here', now: "{{ db_user }}" }
|
||||||
- { then: 'password_here', now: "{{ db_pass }}" }
|
- { then: 'password_here', now: "{{ db_pass }}" }
|
||||||
|
no_log: True
|
||||||
|
|
||||||
- name: Configure wordpress network access using private IP
|
- name: Configure wordpress network access using private IP
|
||||||
replace:
|
replace:
|
||||||
dest: /var/www/html/wp-config.php
|
dest: /var/www/html/wp-config.php
|
||||||
regexp: "'localhost'"
|
regexp: "'localhost'"
|
||||||
replace: "'{{ hostvars.cloud.database.openstack.private_v4 }}'"
|
replace: "'{{ hostvars[groups['dbservers'][0]].inter_ip }}'"
|
||||||
backup: no
|
backup: no
|
||||||
when: hostvars.cloud.database.openstack.private_v4 != ""
|
|
||||||
|
|
||||||
- name: Configure wordpress network access using public IP
|
|
||||||
replace:
|
|
||||||
dest: /var/www/html/wp-config.php
|
|
||||||
regexp: "'localhost'"
|
|
||||||
replace: "'{{ hostvars.cloud.database.openstack.public_v4 }}'"
|
|
||||||
backup: no
|
|
||||||
when: hostvars.cloud.database.openstack.private_v4 == ""
|
|
||||||
|
|
||||||
- name: Change ownership of wordpress
|
- name: Change ownership of wordpress
|
||||||
shell: chown -R www-data:www-data /var/www/html
|
shell: chown -R www-data:www-data /var/www/html
|
||||||
|
|
|
@ -13,22 +13,11 @@
|
||||||
- name: Install wordpress
|
- name: Install wordpress
|
||||||
command: >
|
command: >
|
||||||
wp core install --path=/var/www/html
|
wp core install --path=/var/www/html
|
||||||
--url="http://{{ hostvars.cloud.balancer.openstack.public_v4 }}"
|
--url="http://{{ groups['balancers'][0] }}"
|
||||||
--title='OpenStack Interop Challenge'
|
--title='OpenStack Interop Challenge'
|
||||||
--admin_user=wpuser
|
--admin_user=wpuser
|
||||||
--admin_password="{{ db_pass }}"
|
--admin_password="{{ db_pass }}"
|
||||||
--admin_email='interop@openstack.org'
|
--admin_email='interop@openstack.org'
|
||||||
when: hostvars.cloud.balancer.openstack.public_v4 != ""
|
|
||||||
|
|
||||||
- name: Install wordpress
|
|
||||||
command: >
|
|
||||||
wp core install --path=/var/www/html
|
|
||||||
--url="http://{{ hostvars.cloud.balancer.openstack.private_v4 }}"
|
|
||||||
--title='OpenStack Interop Challenge'
|
|
||||||
--admin_user=wpuser
|
|
||||||
--admin_password="{{ db_pass }}"
|
|
||||||
--admin_email='interop@openstack.org'
|
|
||||||
when: hostvars.cloud.balancer.openstack.public_v4 == ""
|
|
||||||
|
|
||||||
- name: Install package for automated plugin activation
|
- name: Install package for automated plugin activation
|
||||||
shell: >
|
shell: >
|
||||||
|
|
|
@ -13,28 +13,12 @@
|
||||||
- name: Install wordpress
|
- name: Install wordpress
|
||||||
command: >
|
command: >
|
||||||
wp core install --path=/var/www/html
|
wp core install --path=/var/www/html
|
||||||
--url="http://{{ hostvars.cloud.balancer.openstack.public_v4 }}"
|
--url="http://{{ groups['balancers'][0] }}"
|
||||||
--title='OpenStack Interop Challenge'
|
--title='OpenStack Interop Challenge'
|
||||||
--admin_user=wpuser
|
--admin_user=wpuser
|
||||||
--admin_password="{{ db_pass }}"
|
--admin_password="{{ db_pass }}"
|
||||||
--admin_email='interop@openstack.org'
|
--admin_email='interop@openstack.org'
|
||||||
--allow-root
|
--allow-root
|
||||||
when: hostvars.cloud.balancer.openstack.public_v4 != ""
|
|
||||||
|
|
||||||
- name: Install wordpress
|
|
||||||
command: >
|
|
||||||
wp core install --path=/var/www/html
|
|
||||||
--url="http://{{ hostvars.cloud.balancer.openstack.private_v4 }}"
|
|
||||||
--title='OpenStack Interop Challenge'
|
|
||||||
--admin_user=wpuser
|
|
||||||
--admin_password="{{ db_pass }}"
|
|
||||||
--admin_email='interop@openstack.org'
|
|
||||||
--allow-root
|
|
||||||
when: hostvars.cloud.balancer.openstack.public_v4 == ""
|
|
||||||
|
|
||||||
- name: Install package for automated plugin activation
|
|
||||||
shell: >
|
|
||||||
wp package install itspriddle/wp-cli-tgmpa-plugin --allow-root
|
|
||||||
|
|
||||||
- name: Make an initial request, so that later switch-theme hooks work.
|
- name: Make an initial request, so that later switch-theme hooks work.
|
||||||
shell: >
|
shell: >
|
||||||
|
@ -47,8 +31,16 @@
|
||||||
|
|
||||||
- name: Install and activate required plugins
|
- name: Install and activate required plugins
|
||||||
shell: >
|
shell: >
|
||||||
sudo -u www-data wp --path=/var/www/html
|
sudo -u www-data wp --path=/var/www/html plugin install {{ item }} --activate
|
||||||
tgmpa-plugin install --all-required --activate
|
with_items:
|
||||||
|
- advanced-custom-fields
|
||||||
|
- cforms2
|
||||||
|
- co-authors-plus
|
||||||
|
- disable-comments
|
||||||
|
- pmzez-page-loader
|
||||||
|
- responsive-lightbox
|
||||||
|
- /var/www/html/wp-content/themes/superuser/src/plugins/pbd-ajax-load-posts.zip
|
||||||
|
- /var/www/html/wp-content/themes/superuser/src/plugins/share-links.zip
|
||||||
args:
|
args:
|
||||||
warn: no
|
warn: no
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,47 @@
|
||||||
---
|
---
|
||||||
- name: provision servers
|
- name: Get start timestamp
|
||||||
|
hosts: cloud
|
||||||
|
connection: local
|
||||||
|
tasks:
|
||||||
|
- set_fact:
|
||||||
|
starttime: "{{ ansible_date_time }}"
|
||||||
|
tags: "info"
|
||||||
|
|
||||||
|
- name: Prepare to run the workload
|
||||||
hosts: cloud
|
hosts: cloud
|
||||||
connection: local
|
connection: local
|
||||||
vars_files:
|
vars_files:
|
||||||
- "vars/{{ env }}.yml"
|
- "vars/{{ env }}.yml"
|
||||||
|
tasks:
|
||||||
|
- include: "roles/prepare/tasks/{{ action }}.yml"
|
||||||
roles:
|
roles:
|
||||||
- "{{ action }}"
|
- prepare
|
||||||
tags: "{{ action }}"
|
tags: "{{ action }}"
|
||||||
|
|
||||||
- name: Install python2 for ansible to work
|
- name: provision servers
|
||||||
|
hosts: prohosts
|
||||||
|
connection: local
|
||||||
|
strategy: free
|
||||||
|
vars_files:
|
||||||
|
- "vars/{{ env }}.yml"
|
||||||
|
tasks:
|
||||||
|
- include: "roles/provision/tasks/{{ action }}.yml"
|
||||||
|
roles:
|
||||||
|
- provision
|
||||||
|
tags: "{{ action }}"
|
||||||
|
|
||||||
|
- name: Post provision process
|
||||||
|
hosts: cloud
|
||||||
|
connection: local
|
||||||
|
vars_files:
|
||||||
|
- "vars/{{ env }}.yml"
|
||||||
|
tasks:
|
||||||
|
- include: "roles/postprovision/tasks/{{ action }}.yml"
|
||||||
|
roles:
|
||||||
|
- postprovision
|
||||||
|
tags: "{{ action }}"
|
||||||
|
|
||||||
|
- name: Performe common tasks on all servers
|
||||||
hosts: dbservers, webservers, balancers
|
hosts: dbservers, webservers, balancers
|
||||||
gather_facts: false
|
gather_facts: false
|
||||||
user: "{{ app_env.ssh_user }}"
|
user: "{{ app_env.ssh_user }}"
|
||||||
|
@ -91,17 +124,9 @@
|
||||||
- debug:
|
- debug:
|
||||||
msg: >-
|
msg: >-
|
||||||
Access wordpress at
|
Access wordpress at
|
||||||
http://{{ hostvars.cloud.balancer.openstack.public_v4 }}.
|
http://{{ groups['balancers'][0] }}.
|
||||||
wordpress userid is wpuser, password is {{ db_pass }}
|
wordpress userid is wpuser, password is {{ db_pass }}
|
||||||
when: hostvars.cloud.balancer is defined and
|
when: groups['balancers'] is defined
|
||||||
hostvars.cloud.balancer.openstack.public_v4 != ""
|
|
||||||
- debug:
|
|
||||||
msg: >-
|
|
||||||
Access wordpress at
|
|
||||||
http://{{ hostvars.cloud.balancer.openstack.private_v4 }}.
|
|
||||||
wordpress userid is wpuser, password is {{ db_pass }}
|
|
||||||
when: hostvars.cloud.balancer is defined and
|
|
||||||
hostvars.cloud.balancer.openstack.public_v4 == ""
|
|
||||||
- debug:
|
- debug:
|
||||||
msg: >-
|
msg: >-
|
||||||
The work load test started at {{ hostvars.cloud.starttime.time }},
|
The work load test started at {{ hostvars.cloud.starttime.time }},
|
||||||
|
|
|
@ -11,16 +11,16 @@ auth: {
|
||||||
app_env: {
|
app_env: {
|
||||||
target_os: "ubuntu",
|
target_os: "ubuntu",
|
||||||
ssh_user: "ubuntu",
|
ssh_user: "ubuntu",
|
||||||
image_name: "ubuntu-16.10",
|
image_name: "Ubuntu 16.04",
|
||||||
region_name: "",
|
region_name: "",
|
||||||
availability_zone: "",
|
availability_zone: "",
|
||||||
validate_certs: True,
|
validate_certs: False,
|
||||||
private_net_name: "interopnet",
|
private_net_name: "demonet",
|
||||||
flavor_name: "m1.small",
|
flavor_name: "m1.small",
|
||||||
public_key_file: "/home/ubuntu/.ssh/id_rsa.pub",
|
public_key_file: "/home/ubuntu/.ssh/interop.pub",
|
||||||
stack_size: 4,
|
stack_size: 4,
|
||||||
volume_size: 10,
|
volume_size: 4,
|
||||||
block_device_name: "/dev/vdb",
|
block_device_name: "/dev/vdb",
|
||||||
wp_latest: "https://wordpress.org/wordpress-4.6.1.tar.gz",
|
wp_latest: "http://10.0.10.41/lampstack/wordpress-4.6.1.tar.gz",
|
||||||
wp_importer: "http://downloads.wordpress.org/plugin/wordpress-importer.0.6.3.zip"
|
wp_importer: "http://10.0.10.41/lampstack/wordpress-importer.0.6.3.zip"
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,16 +11,17 @@ auth: {
|
||||||
|
|
||||||
app_env: {
|
app_env: {
|
||||||
target_os: "ubuntu",
|
target_os: "ubuntu",
|
||||||
image_name: "ubuntu-14.04",
|
image_name: "ubuntu-16.04",
|
||||||
region_name: "RegionOne",
|
region_name: "RegionOne",
|
||||||
availability_zone: "nova",
|
availability_zone: "nova",
|
||||||
validate_certs: False,
|
validate_certs: False,
|
||||||
ssh_user: "ubuntu",
|
ssh_user: "ubuntu",
|
||||||
private_net_name: "demonet",
|
private_net_name: "demonet",
|
||||||
flavor_name: "m1.large",
|
flavor_name: "m1.large",
|
||||||
public_key_file: "/home/ubuntu/.ssh/id_rsa.pub",
|
public_key_file: "/home/ubuntu/.ssh/interop.pub",
|
||||||
stack_size: 4,
|
stack_size: 4,
|
||||||
volume_size: 2,
|
volume_size: 2,
|
||||||
block_device_name: "/dev/vdb",
|
block_device_name: "/dev/vdb",
|
||||||
wp_latest: "https://wordpress.org/wordpress-4.6.tar.gz"
|
wp_latest: "http://10.0.10.12/lampstack/wordpress-4.6.1.tar.gz",
|
||||||
|
wp_importer: "http://10.0.10.12/lampstack/wordpress-importer.0.6.3.zip"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue