Moving HAProxy-based LBaaS package to open-paas

Change-Id: If64d72a9a3d54b47d373a7e89ca4fc4e1bb84d93
This commit is contained in:
Nikolay Mahotkin 2016-03-04 12:05:18 +03:00
parent 4f8def5ca9
commit 6f18d58b35
9 changed files with 355 additions and 0 deletions

View File

@ -0,0 +1,53 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
Namespaces:
=: io.murano.apps.lbaas
std: io.murano
sys: io.murano.system
Name: HAProxy
Extends: =:LoadBalancer
Properties:
name:
Contract: $.string().notNull()
implementation:
Contract: $.string()
Default: haproxy
Methods:
installLoadBalancer:
Body:
- $resources: new(sys:Resources)
- $template: $resources.yaml('DeployHAProxy.template')
- $.environment.reporter.report($this, 'Installing HAProxy')
- $.instance.agent.call($template, $resources)
- $.environment.reporter.report($this, 'HAProxy is installed.')
installLBaaS:
Body:
- $resources: new(sys:Resources)
- $template: $resources.yaml('DeployLBaaS.template').bind(dict(
impl => $.implementation
))
- $.environment.reporter.report($this, 'Installing LBaaS...')
- $.instance.agent.call($template, $resources)
- $.environment.reporter.report($this, 'LBaaS is installed and started.')
- Return:
port: 8993
path: /v1

View File

@ -0,0 +1,75 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
Namespaces:
=: io.murano.apps.lbaas
std: io.murano
res: io.murano.resources
sys: io.murano.system
Name: LoadBalancer
Extends: std:Application
Properties:
name:
Contract: $.string().notNull()
instance:
Contract: $.class(res:Instance).notNull()
implementation:
Contract: $.string()
Default: null
Usage: Runtime
environment:
Contract: $.class(std:Environment)
Usage: Runtime
Methods:
initialize:
Body:
- $.environment: $.find(std:Environment).require()
deploy:
Body:
- If: $.getAttr(deployed, false)
Then:
Return: 0
- $.environment.reporter.report($this, 'Creating security groups...')
- $securityGroupIngress:
- ToPort: 65535
FromPort: 1
IpProtocol: tcp
External: true
- $.environment.securityGroupManager.addGroupIngress($securityGroupIngress)
- $.environment.reporter.report($this, 'Creating instance for load balancer...')
- $.instance.deploy()
- $.environment.reporter.report($this, 'Instance is created.')
- $resources: new(sys:Resources)
- $.installLoadBalancer()
- $lbaas: $.installLBaaS()
- If: $.instance.assignFloatingIp
Then:
- $host: $.instance.floatingIpAddress
Else:
- $host: $.instance.ipAddresses[0]
- $.environment.reporter.report($this, format('LBaaS is available at http://{0}:{1}{2}', $host, $lbaas.port, $lbaas.path))
- $.setAttr(deployed, true)
installLoadBalancer:
installLBaaS:

View File

@ -0,0 +1,16 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy HAProxy
Body: |
return HAProxyDeploy().stdout
Scripts:
HAProxyDeploy:
Type: Application
Version: 1.0.0
EntryPoint: deployHAProxy.sh
Files: []
Options:
captureStdout: true
captureStderr: true

View File

@ -0,0 +1,19 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy LBaaS
Parameters:
impl: $impl
Body: |
return LBaasDeploy('{0}'.format(args.impl)).stdout
Scripts:
LBaasDeploy:
Type: Application
Version: 1.0.0
EntryPoint: deployLBaaS.sh
Files: []
Options:
captureStdout: true
captureStderr: true

View File

@ -0,0 +1,13 @@
sudo add-apt-repository ppa:vbernat/haproxy-1.5 -y
sudo apt-get update
sudo apt-get install -y haproxy
# Enabling HAProxy.
sudo sed -i 's/^ENABLED=.*/ENABLED=1/' /etc/default/haproxy
sudo chown -R $USER:$USER /etc/haproxy
# Starting HAProxy.
#sudo service haproxy restart

View File

@ -0,0 +1,56 @@
#!/bin/bash
impl=$1
sudo apt-get update
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password root'
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password root'
sudo apt-get install -y python-dev python-pip git;
sudo apt-get install -y -q mysql-server libmysqlclient-dev
# Installing LBaaS API.
git clone https://github.com/nmakhotkin/lbaas_api.git
cd lbaas_api
sudo pip install .
sudo pip install mysql-python
# Configure LBaaS.
cp etc/lbaas.conf.sample etc/lbaas.conf
sudo chmod -R a+rw /var/log
# Configure lbaas logging.
sed -i 's/#verbose = false/verbose = true/g' etc/lbaas.conf
sed -i 's/#default_log_levels/default_log_levels/g' etc/lbaas.conf
sed -i 's/#log_file = <None>/log_file = \/var\/log\/lbaas.log/g' etc/lbaas.conf
# Configure lbaas impl.
sed -i "s/#impl = haproxy/impl = $impl/g" etc/lbaas.conf
# Configure database connection.
mysql --user=root --password=root -e "CREATE DATABASE lbaas;"
mysql --user=root --password=root -e "GRANT ALL ON lbaas.* TO 'root'@'localhost';"
sed -i 's/#connection = <None>/connection = mysql:\/\/root:root@localhost:3306\/lbaas/g' etc/lbaas.conf
sed -i 's/#max_overflow = <None>/max_overflow = -1/g' etc/lbaas.conf
sed -i 's/#max_pool_size = <None>/max_pool_size = 1000/g' etc/lbaas.conf
# Upgrade database.
lbaas-db-manage --config-file etc/lbaas.conf upgrade head
# Moving config to another place.
sudo mkdir /etc/lbaas
sudo chown -R $USER:$USER /etc/lbaas
sudo chown /var/log/lbaas.log
mv etc/lbaas.conf /etc/lbaas/lbaas.conf
cd ~
# Start lbaas.
lbaas-server --config-file /etc/lbaas/lbaas.conf >> lbaas.log 2>&1 &

View File

@ -0,0 +1,98 @@
Version: 2
Application:
?:
type: io.murano.apps.lbaas.HAProxy
name: $.appConfiguration.name
implementation: $.appConfiguration.LBaasImpl
instance:
?:
type: io.murano.resources.LinuxMuranoInstance
name: generateHostname($.instanceConfiguration.unitNamingPattern, 1)
flavor: $.instanceConfiguration.flavor
image: $.instanceConfiguration.osImage
keyname: $.instanceConfiguration.keyPair
availabilityZone: $.instanceConfiguration.availabilityZone
assignFloatingIp: $.appConfiguration.assignFloatingIP
Forms:
- appConfiguration:
fields:
- name: name
type: string
label: Application Name
initial: 'HAProxy based LBaaS'
description: >-
Enter a desired name for the application. Just A-Z, a-z, 0-9, dash and
underline are allowed
- name: LBaasImpl
label: Load Balancer implementation.
type: string
description: >-
Specify Load balancer implementation for this current LBaaS. Only 'haproxy' is available now.
initial: haproxy
regexpValidator: '^haproxy$'
errorMessages:
invalid: Only 'haproxy' is available now.
required: true
- name: assignFloatingIP
type: boolean
label: Assign Floating IP
description: >-
Select to true to assign floating IP automatically
initial: false
required: false
widgetMedia:
css: {all: ['muranodashboard/css/checkbox.css']}
- instanceConfiguration:
fields:
- name: title
type: string
required: false
hidden: true
description: Specify some instance parameters on which the application would be created
- name: flavor
type: flavor
label: Instance flavor
description: >-
Select registered in Openstack flavor. Consider that application performance
depends on this parameter.
required: false
- name: osImage
type: image
imageType: linux
label: Instance image
description: >-
Select valid image for the application. Image should already be prepared and
registered in glance.
- name: keyPair
type: keypair
label: Key Pair
description: >-
Select the Key Pair to control access to instances. You can login to
instances using this KeyPair after the deployment of application.
required: false
- name: availabilityZone
type: azone
label: Availability zone
description: Select availability zone where application would be installed.
required: false
- name: network
type: network
label: Network
description: Select a network to join. 'Auto' corresponds to a default environment's network.
required: false
murano_networks: translate
- name: unitNamingPattern
type: string
label: Instance Naming Pattern
required: false
maxLength: 64
regexpValidator: '^[a-zA-z][-_\w]*$'
errorMessages:
invalid: Just letters, numbers, underscores and hyphens are allowed.
helpText: Just letters, numbers, underscores and hyphens are allowed.
description: >-
Specify a string, that will be used in instance hostname.
Just A-Z, a-z, 0-9, dash and underline are allowed.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,25 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
Format: 1.0
Type: Application
FullName: io.murano.apps.lbaas.HAProxy
Name: HAProxy based LBaaS
Description: |
HAProxy is a free, very fast and reliable solution offering high
availability, load balancing, and proxying for TCP and HTTP-based
applications.
Author: 'Mirantis, Inc'
Tags: [HTTP, TCP, Load Balancing as a Service, HAProxy]
Classes:
io.murano.apps.lbaas.HAProxy: HAProxy.yaml
io.murano.apps.lbaas.LoadBalancer: LoadBalancer.yaml