tox verification and tarball venv packaging support.
Optionally run tox on each git repo (-t) and package resultant venv into a tarball on success (-p) tarball filename includes the short-sha1 of the repo. If tarball is created, screen is not run. if the -d option is given the cmdline incantation for kicking off the ansible deploy playbook will be provided. Later, this could be automated. A mysql role playbook is also included for single node db. stv3-api role is also included. Change-Id: Ib9f97a0035c228d4a163d7794ab7ce60043d572b
This commit is contained in:
parent
678d1449ac
commit
24f118f9ac
36
ansible/README.md
Normal file
36
ansible/README.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
stv3-config
|
||||||
|
==============
|
||||||
|
|
||||||
|
Configuration playbooks for StackTach.v3 deployments
|
||||||
|
|
||||||
|
Assumes an inventory value that has nodes or groups that start with "stv3-api" or "stv3-workers".
|
||||||
|
|
||||||
|
Execution would look like:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook workers.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Assumes a stv3-db setup already exists.
|
||||||
|
|
||||||
|
There are also roles for database and api. The `common` role is responsible for installing the tarball and creating the necessary user/group accounts. Both the API and workers depend on the common role since they both require the codebase and winchester configuration files.
|
||||||
|
|
||||||
|
What it does
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Creates `stv3` user and `stv3` group
|
||||||
|
* Creates `/etc/stv3` directory for configuration data
|
||||||
|
* Creates `/var/run/stv3` directory for pid files
|
||||||
|
* Creates `/var/log/stv3` directory for log files
|
||||||
|
* Copies config files to `/etc/stv3`
|
||||||
|
* Copies init.d files to `/etc/init.d` for yagi-events and pipeline-worker
|
||||||
|
* Copies and expands the StackTach.v3 tarball to `/opt/stv3`
|
||||||
|
* Starts the yagi worker daemon and the winchester worker
|
||||||
|
(yagi-events and pipeline-worker respectively)
|
||||||
|
|
||||||
|
The init.d files handle the .pid file creation and running as stv3 user.
|
||||||
|
|
||||||
|
While yagi-events and pipeline-worker are capable to running daemonized, we don't use that code.
|
||||||
|
Instead, we let the init.d scripts handle the backgrounding and process management.
|
||||||
|
|
||||||
|
The connection from the host machine to the target machine has to have a secure account already created for anisble to run. Currently it assumes an account called `stacktach` and it has root capabilities. When the daemons run, they run as `stv3` ... which is just a service account.
|
21
ansible/api.yaml
Normal file
21
ansible/api.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
## Main entry point for the StackTach.v3 worker deployments
|
||||||
|
##
|
||||||
|
## Assumes an inventory value that has nodes or groups that start with
|
||||||
|
## "stv3-api"
|
||||||
|
##
|
||||||
|
## Execution would look like:
|
||||||
|
## ansible-playbook api.yaml -vv
|
||||||
|
##
|
||||||
|
## Assumes a stv3-db setup already exists.
|
||||||
|
---
|
||||||
|
- name: StackTach API Configuration
|
||||||
|
hosts: stv3-api
|
||||||
|
remote_user: stacktach
|
||||||
|
sudo: yes
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- ["vars/local_settings.yaml"]
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
- stv3-api
|
19
ansible/database.yaml
Normal file
19
ansible/database.yaml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
## Main entry point for the StackTach.v3 db master deployments
|
||||||
|
##
|
||||||
|
## Assumes an inventory value that has nodes or groups that start with
|
||||||
|
## "stv3-db"
|
||||||
|
##
|
||||||
|
## Execution would look like:
|
||||||
|
## ansible-playbook database.yaml
|
||||||
|
##
|
||||||
|
---
|
||||||
|
- name: StackTach DB Master Configurations
|
||||||
|
hosts: stv3-db
|
||||||
|
remote_user: stacktach
|
||||||
|
sudo: yes
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- ["vars/local_settings.yaml"]
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- stv3-db
|
31
ansible/roles/common/defaults/main.yaml
Normal file
31
ansible/roles/common/defaults/main.yaml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
## Lowest level config defaults for the common role
|
||||||
|
|
||||||
|
# used in winchester.yaml
|
||||||
|
config_path:
|
||||||
|
- /etc/stv3
|
||||||
|
|
||||||
|
# used in logging.conf
|
||||||
|
root_log_level: WARNING
|
||||||
|
yagi_log_level: INFO
|
||||||
|
winchester_log_level: DEBUG
|
||||||
|
amqp_log_level: WARNING
|
||||||
|
|
||||||
|
# "level = INFO" logs SQL queries.
|
||||||
|
# "level = DEBUG" logs SQL queries and results.
|
||||||
|
# "level = WARNING" logs neither. Recommended for production systems
|
||||||
|
sqlalchemy_log_level: WARNING
|
||||||
|
|
||||||
|
database_url: mysql://winchester:testpasswd@localhost/winchester
|
||||||
|
|
||||||
|
statistics_period: 10
|
||||||
|
pipeline_worker_batch_size: 1000
|
||||||
|
pipeline_worker_delay: 10
|
||||||
|
|
||||||
|
#stackdistiller_plugins:
|
||||||
|
# - my_plugin_1
|
||||||
|
# - my_plugin_2
|
||||||
|
|
||||||
|
catch_all_notifications: false
|
||||||
|
|
||||||
|
pipeline_handlers:
|
||||||
|
logger: winchester.pipeline_handler:LoggingHandler
|
36
ansible/roles/common/files/distiller.conf
Normal file
36
ansible/roles/common/files/distiller.conf
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
- event_type: compute.*
|
||||||
|
traits: &instance_traits
|
||||||
|
tenant_id:
|
||||||
|
fields: payload.tenant_id
|
||||||
|
user_id:
|
||||||
|
fields: payload.user_id
|
||||||
|
instance_id:
|
||||||
|
fields: payload.instance_id
|
||||||
|
host:
|
||||||
|
fields: publisher_id
|
||||||
|
plugin:
|
||||||
|
name: split
|
||||||
|
parameters:
|
||||||
|
segment: 1
|
||||||
|
max_split: 1
|
||||||
|
service:
|
||||||
|
fields: publisher_id
|
||||||
|
plugin: split
|
||||||
|
state:
|
||||||
|
fields: payload.state
|
||||||
|
launched_at:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.launched_at
|
||||||
|
deleted_at:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.deleted_at
|
||||||
|
- event_type: compute.instance.exists
|
||||||
|
traits:
|
||||||
|
<<: *instance_traits
|
||||||
|
audit_period_beginning:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.audit_period_beginning
|
||||||
|
audit_period_ending:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.audit_period_ending
|
89
ansible/roles/common/files/event_definitions.yaml
Normal file
89
ansible/roles/common/files/event_definitions.yaml
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
- event_type: compute.instance.*
|
||||||
|
traits: &instance_traits
|
||||||
|
tenant_id:
|
||||||
|
fields:
|
||||||
|
- payload.tenant_id
|
||||||
|
- _context_project_id
|
||||||
|
user_id:
|
||||||
|
fields: payload.user_id
|
||||||
|
request_id:
|
||||||
|
fields: _context_request_id
|
||||||
|
message:
|
||||||
|
fields: payload.message
|
||||||
|
instance_id:
|
||||||
|
fields:
|
||||||
|
- payload.instance_uuid
|
||||||
|
- payload.instance_id
|
||||||
|
- exception.kwargs.uuid
|
||||||
|
- instance.uuid
|
||||||
|
host:
|
||||||
|
fields: publisher_id
|
||||||
|
plugin:
|
||||||
|
name: split
|
||||||
|
parameters:
|
||||||
|
segment: 1
|
||||||
|
max_split: 1
|
||||||
|
service:
|
||||||
|
fields: publisher_id
|
||||||
|
plugin: split
|
||||||
|
instance_flavor:
|
||||||
|
fields:
|
||||||
|
- payload.instance_type
|
||||||
|
- payload.image_meta.instance_type_name
|
||||||
|
- payload.image_meta.instance_type_flavorid
|
||||||
|
instance_flavor_id:
|
||||||
|
type: int
|
||||||
|
fields:
|
||||||
|
- payload.instance_flavor_id
|
||||||
|
memory_mb:
|
||||||
|
type: int
|
||||||
|
fields: payload.memory_mb
|
||||||
|
disk_gb:
|
||||||
|
type: int
|
||||||
|
fields: payload.disk_gb
|
||||||
|
root_gb:
|
||||||
|
type: int
|
||||||
|
fields: payload.root_gb
|
||||||
|
ephemeral_gb:
|
||||||
|
type: int
|
||||||
|
fields: payload.ephemeral_gb
|
||||||
|
vcpus:
|
||||||
|
type: int
|
||||||
|
fields: payload.vcpus
|
||||||
|
state:
|
||||||
|
fields: payload.state
|
||||||
|
os_architecture:
|
||||||
|
fields: payload.image_meta.'org.openstack__1__architecture'
|
||||||
|
os_version:
|
||||||
|
fields: payload.image_meta.'org.openstack__1__os_version'
|
||||||
|
os_distro:
|
||||||
|
fields: payload.image_meta.'org.openstack__1__os_distro'
|
||||||
|
launched_at:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.launched_at
|
||||||
|
deleted_at:
|
||||||
|
type: datetime
|
||||||
|
fields:
|
||||||
|
- payload.deleted_at
|
||||||
|
- payload.terminated_at
|
||||||
|
- event_type: compute.instance.exists
|
||||||
|
traits:
|
||||||
|
<<: *instance_traits
|
||||||
|
audit_period_beginning:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.audit_period_beginning
|
||||||
|
audit_period_ending:
|
||||||
|
type: datetime
|
||||||
|
fields: payload.audit_period_ending
|
||||||
|
- event_type: snapshot_instance
|
||||||
|
traits:
|
||||||
|
<<: *instance_traits
|
||||||
|
- event_type: scheduler.run_instance.*
|
||||||
|
traits:
|
||||||
|
<<: *instance_traits
|
||||||
|
- event_type: keypair.import.*
|
||||||
|
traits:
|
||||||
|
<<: *instance_traits
|
||||||
|
- event_type: rebuild_instance
|
||||||
|
traits:
|
||||||
|
<<: *instance_traits
|
5
ansible/roles/common/files/pipelines.yaml
Normal file
5
ansible/roles/common/files/pipelines.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
test_pipeline:
|
||||||
|
- logger
|
||||||
|
test_expire_pipeline:
|
||||||
|
- logger
|
23
ansible/roles/common/files/triggers.yaml
Normal file
23
ansible/roles/common/files/triggers.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
- name: test_trigger
|
||||||
|
debug_level: 2
|
||||||
|
distinguished_by:
|
||||||
|
- instance_id
|
||||||
|
- timestamp: "day"
|
||||||
|
expiration: "$last + 1h"
|
||||||
|
fire_pipeline: "test_pipeline"
|
||||||
|
expire_pipeline: "test_expire_pipeline"
|
||||||
|
match_criteria:
|
||||||
|
- event_type:
|
||||||
|
- compute.instance.*
|
||||||
|
- "!compute.instance.exists"
|
||||||
|
#### Traits are optional.
|
||||||
|
# traits:
|
||||||
|
# os_distro: ubuntu
|
||||||
|
# memory_mb:
|
||||||
|
# numeric: "> 4096"
|
||||||
|
- event_type: compute.instance.exists
|
||||||
|
map_distingushed_trait:
|
||||||
|
timestamp: audit_period_beginning
|
||||||
|
fire_criteria:
|
||||||
|
- event_type: compute.instance.exists
|
76
ansible/roles/common/tasks/main.yaml
Normal file
76
ansible/roles/common/tasks/main.yaml
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
## Main task file for common role
|
||||||
|
---
|
||||||
|
- name: stv3 group
|
||||||
|
group: name=stv3 system=yes state=present
|
||||||
|
|
||||||
|
- name: stv3 user
|
||||||
|
user: name=stv3 group=stv3 createhome=no system=yes state=present
|
||||||
|
|
||||||
|
- name: stv3 config directory
|
||||||
|
file: path=/etc/stv3 state=directory owner=stv3 group=stv3
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
- name: stv3 /var/run directory for pid
|
||||||
|
file: path=/var/run/stv3 state=directory owner=stv3 group=stv3
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
- name: stv3 /var/log directory for logfiles
|
||||||
|
file: path=/var/log/stv3 state=directory owner=stv3 group=stv3
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
- name: install unzip
|
||||||
|
apt: name=unzip update_cache=yes
|
||||||
|
|
||||||
|
- name: install mysql-client
|
||||||
|
apt: name=mysql-client update_cache=yes
|
||||||
|
|
||||||
|
- name: move tarball
|
||||||
|
unarchive: src={{tarball_absolute_path}} dest=/opt
|
||||||
|
owner=stv3 group=stv3
|
||||||
|
|
||||||
|
- name: fix source code ownership
|
||||||
|
file: path=/opt/stv3 owner=stv3 group=stv3 recurse=yes
|
||||||
|
|
||||||
|
- name: winchester.yaml
|
||||||
|
template: src=winchester.yaml.j2 dest=/etc/stv3/winchester.yaml owner=stv3
|
||||||
|
group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
- restart pipeline-worker
|
||||||
|
- restart stv3-api
|
||||||
|
|
||||||
|
- name: distiller.conf
|
||||||
|
copy: src=distiller.conf dest=/etc/stv3/distiller.conf
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
- restart pipeline-worker
|
||||||
|
|
||||||
|
- name: pipelines.yaml
|
||||||
|
copy: src=pipelines.yaml dest=/etc/stv3/pipelines.yaml
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
- restart pipeline-worker
|
||||||
|
|
||||||
|
- name: triggers.yaml
|
||||||
|
copy: src=triggers.yaml dest=/etc/stv3/triggers.yaml
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
- restart pipeline-worker
|
||||||
|
|
||||||
|
- name: event_definitions.yaml
|
||||||
|
copy: src=event_definitions.yaml dest=/etc/stv3/event_definitions.yaml
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
- restart pipeline-worker
|
||||||
|
|
||||||
|
- name: logging.conf
|
||||||
|
template: src=logging.conf.j2 dest=/etc/stv3/logging.conf owner=stv3
|
||||||
|
group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
- restart pipeline-worker
|
||||||
|
|
68
ansible/roles/common/templates/logging.conf.j2
Normal file
68
ansible/roles/common/templates/logging.conf.j2
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Machine-generated by ansible - do not edit!
|
||||||
|
|
||||||
|
[loggers]
|
||||||
|
keys = root, yagi, winchester
|
||||||
|
|
||||||
|
[handlers]
|
||||||
|
keys = stderr, stdout, null
|
||||||
|
|
||||||
|
[formatters]
|
||||||
|
keys = yagi, default
|
||||||
|
|
||||||
|
[logger_root]
|
||||||
|
level = {{ root_log_level }}
|
||||||
|
handlers = null
|
||||||
|
|
||||||
|
[logger_yagi]
|
||||||
|
level = {{ yagi_log_level }}
|
||||||
|
handlers = stderr
|
||||||
|
qualname = yagi
|
||||||
|
|
||||||
|
[logger_winchester]
|
||||||
|
level = {{ winchester_log_level }}
|
||||||
|
handlers = stderr
|
||||||
|
qualname = winchester
|
||||||
|
|
||||||
|
[logger_amqplib]
|
||||||
|
level = {{ amqp_log_level }}
|
||||||
|
handlers = stderr
|
||||||
|
qualname = amqplib
|
||||||
|
|
||||||
|
[logger_sqlalchemy]
|
||||||
|
# yagi does not use sqlalchemy... yet. -mdragon
|
||||||
|
level = {{ sqlalchemy_log_level }}
|
||||||
|
handlers = stderr
|
||||||
|
qualname = sqlalchemy
|
||||||
|
|
||||||
|
[handler_stderr]
|
||||||
|
class = StreamHandler
|
||||||
|
args = (sys.stderr,)
|
||||||
|
formatter = yagi
|
||||||
|
|
||||||
|
[handler_stdout]
|
||||||
|
class = StreamHandler
|
||||||
|
args = (sys.stdout,)
|
||||||
|
formatter = yagi
|
||||||
|
|
||||||
|
[handler_watchedfile]
|
||||||
|
class = handlers.WatchedFileHandler
|
||||||
|
args = ()
|
||||||
|
formatter = yagi
|
||||||
|
|
||||||
|
[handler_syslog]
|
||||||
|
class = handlers.SysLogHandler
|
||||||
|
args = ('/var/log/stv3', handlers.SysLogHandler.LOG_USER)
|
||||||
|
formatter = yagi
|
||||||
|
|
||||||
|
[handler_null]
|
||||||
|
class = NullHandler
|
||||||
|
formatter = default
|
||||||
|
args = ()
|
||||||
|
|
||||||
|
[formatter_yagi]
|
||||||
|
# substitutions available for formats are documented at:
|
||||||
|
# https://docs.python.org/2/library/logging.html#logrecord-attributes
|
||||||
|
format = %(name)s[%(levelname)s at %(asctime)s line: %(lineno)d] %(message)s
|
||||||
|
|
||||||
|
[formatter_default]
|
||||||
|
format = %(message)s
|
38
ansible/roles/common/templates/winchester.yaml.j2
Normal file
38
ansible/roles/common/templates/winchester.yaml.j2
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
# Machine generated via ansible - do not edit!
|
||||||
|
|
||||||
|
###### This adds directories to the search path for other configfiles.
|
||||||
|
config_path:
|
||||||
|
{% for path in config_path %}
|
||||||
|
- {{ path }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
###### logging
|
||||||
|
logging_config: /etc/stv3/logging.conf
|
||||||
|
|
||||||
|
###### How often to log stats
|
||||||
|
statistics_period: {{ statistics_period }}
|
||||||
|
|
||||||
|
pipeline_worker_batch_size: {{ pipeline_worker_batch_size }}
|
||||||
|
pipeline_worker_delay: {{ pipeline_worker_delay }}
|
||||||
|
|
||||||
|
{% if stackdistiller_plugins is defined %}
|
||||||
|
distiller_trait_plugins:
|
||||||
|
{% for plugin in stackdistiller_plugins %}
|
||||||
|
- {{ plugin }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
catch_all_notifications: {{ catch_all_notifications }}
|
||||||
|
|
||||||
|
database:
|
||||||
|
url: {{ database_url }}
|
||||||
|
|
||||||
|
distiller_config: /etc/stv3/event_definitions.yaml
|
||||||
|
trigger_definitions: /etc/stv3/triggers.yaml
|
||||||
|
pipeline_config: /etc/stv3/pipelines.yaml
|
||||||
|
|
||||||
|
pipeline_handlers:
|
||||||
|
{% for key, value in pipeline_handlers.iteritems() %}
|
||||||
|
{{ key }}: {{value}}
|
||||||
|
{% endfor %}
|
7
ansible/roles/stv3-api/files/quincy.conf
Normal file
7
ansible/roles/stv3-api/files/quincy.conf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[global]
|
||||||
|
enabled_versions=1,2
|
||||||
|
v1_impl=quince.v1_impl:Impl
|
||||||
|
v2_impl=quince.v2_impl:Impl
|
||||||
|
|
||||||
|
[quince]
|
||||||
|
winchester_config=/etc/stv3/winchester.yaml
|
99
ansible/roles/stv3-api/files/stv3-api.debian.init.d
Normal file
99
ansible/roles/stv3-api/files/stv3-api.debian.init.d
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: Gunicorn HTTP service
|
||||||
|
# Required-Start: $remote_fs $syslog
|
||||||
|
# Required-Stop: $remote_fs $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: Gunicorn HTTP service.
|
||||||
|
# Description: Gunicorn HTTP service.
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# Author: Sandy Walsh <sandy.walsh@rackspace.com>
|
||||||
|
|
||||||
|
# Do NOT "set -e"
|
||||||
|
|
||||||
|
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||||
|
PATH=/opt/stv3/bin:/sbin:/usr/sbin:/bin:/usr/bin
|
||||||
|
DESC="Gunicorn service control"
|
||||||
|
NAME=gunicorn
|
||||||
|
DAEMON=/opt/stv3/bin/$NAME
|
||||||
|
DAEMON_ARGS="--log-file=/var/log/stv3/gunicorn.log quincy.api:get_api(config_location=\"/etc/stv3/quincy.conf\")"
|
||||||
|
PIDFILE=/var/run/stv3/$NAME.pid
|
||||||
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
USER=stv3
|
||||||
|
GROUP=stv3
|
||||||
|
|
||||||
|
# Exit if the package is not installed
|
||||||
|
[ -x "$DAEMON" ] || exit 0
|
||||||
|
|
||||||
|
# Read configuration variable file if it is present
|
||||||
|
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||||
|
|
||||||
|
# Load the VERBOSE setting and other rcS variables
|
||||||
|
. /lib/init/vars.sh
|
||||||
|
|
||||||
|
VERBOSE=yes
|
||||||
|
|
||||||
|
# Define LSB log_* functions.
|
||||||
|
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
||||||
|
# and status_of_proc is working.
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that starts the daemon/service
|
||||||
|
#
|
||||||
|
do_start()
|
||||||
|
{
|
||||||
|
. /opt/stv3/bin/activate
|
||||||
|
start-stop-daemon --start --name ${NAME} --chdir /var/run/stv3 \
|
||||||
|
--chuid ${USER}:${GROUP} --background \
|
||||||
|
--make-pidfile --pidfile ${PIDFILE} \
|
||||||
|
--exec ${DAEMON} -- ${DAEMON_ARGS}
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that stops the daemon/service
|
||||||
|
#
|
||||||
|
do_stop()
|
||||||
|
{
|
||||||
|
. /opt/stv3/bin/activate
|
||||||
|
log_daemon_msg "Stopping ${DAEMON}... " ${DAEMON}
|
||||||
|
start-stop-daemon --stop --oknodo --pidfile ${PIDFILE} --retry=TERM/30/KILL/5
|
||||||
|
log_end_msg $?
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||||
|
do_start
|
||||||
|
case "$?" in
|
||||||
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||||
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
case "$?" in
|
||||||
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||||
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||||
|
;;
|
||||||
|
restart|force-reload)
|
||||||
|
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
do_start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
||||||
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
:
|
||||||
|
|
3
ansible/roles/stv3-api/handlers/main.yaml
Normal file
3
ansible/roles/stv3-api/handlers/main.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
- name: restart stv3-api
|
||||||
|
service: name=stv3-api state=restarted
|
||||||
|
when: not stv3-api|changed
|
19
ansible/roles/stv3-api/tasks/main.yaml
Normal file
19
ansible/roles/stv3-api/tasks/main.yaml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
## Main task file for stv3-api role
|
||||||
|
# All the users, groups, directories and code are
|
||||||
|
# set up by the common role.
|
||||||
|
|
||||||
|
---
|
||||||
|
- name: quincy.conf
|
||||||
|
copy: src=quincy.conf dest=/etc/stv3/quincy.conf
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart stv3-api
|
||||||
|
|
||||||
|
- name: stv3-api-initd
|
||||||
|
copy: src=stv3-api.debian.init.d dest=/etc/init.d/stv3-api
|
||||||
|
owner=stv3 group=stv3 mode=0755
|
||||||
|
|
||||||
|
- name: stv3-api
|
||||||
|
debug: msg="Starting stv3-api"
|
||||||
|
notify:
|
||||||
|
- restart stv3-api
|
2
ansible/roles/stv3-db/defaults/main.yaml
Normal file
2
ansible/roles/stv3-db/defaults/main.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
root_db_password: password
|
||||||
|
winchester_db_password: testpasswd
|
25
ansible/roles/stv3-db/tasks/main.yaml
Normal file
25
ansible/roles/stv3-db/tasks/main.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
## Main task file for stv3-db role
|
||||||
|
---
|
||||||
|
- name: install mysql-server
|
||||||
|
apt: name=mysql-server update_cache=yes
|
||||||
|
|
||||||
|
- name: install python mysql lib
|
||||||
|
apt: name=python-mysqldb
|
||||||
|
|
||||||
|
- name: ensure mysql is running and starts on boot
|
||||||
|
service: name=mysql state=started enabled=true
|
||||||
|
# Need to do this for idempotency, see
|
||||||
|
# http://ansible.cc/docs/modules.html#mysql-user
|
||||||
|
- name: update mysql root password for all root accounts
|
||||||
|
mysql_user: name=root host=localhost password={{ root_db_password }}
|
||||||
|
# tricky ... could have already been change from a previous run?
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: copy .my.cnf file with root password credentials
|
||||||
|
template: src=my.cnf.j2 dest=/root/.my.cnf owner=root mode=0600
|
||||||
|
|
||||||
|
- mysql_db: name=winchester state=present login_user=root login_password={{ root_db_password }}
|
||||||
|
|
||||||
|
- name: create winchester db user
|
||||||
|
mysql_user: name=winchester host=localhost password={{ winchester_db_password }} priv=*.*:ALL \
|
||||||
|
login_user=root login_password={{ root_db_password}}
|
127
ansible/roles/stv3-db/templates/my.cnf.j2
Normal file
127
ansible/roles/stv3-db/templates/my.cnf.j2
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#
|
||||||
|
# The MySQL database server configuration file.
|
||||||
|
#
|
||||||
|
# You can copy this to one of:
|
||||||
|
# - "/etc/mysql/my.cnf" to set global options,
|
||||||
|
# - "~/.my.cnf" to set user-specific options.
|
||||||
|
#
|
||||||
|
# One can use all long options that the program supports.
|
||||||
|
# Run program with --help to get a list of available options and with
|
||||||
|
# --print-defaults to see which it would actually understand and use.
|
||||||
|
#
|
||||||
|
# For explanations see
|
||||||
|
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
|
||||||
|
|
||||||
|
# This will be passed to all mysql clients
|
||||||
|
# It has been reported that passwords should be enclosed with ticks/quotes
|
||||||
|
# escpecially if they contain "#" chars...
|
||||||
|
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
|
||||||
|
[client]
|
||||||
|
port = 3306
|
||||||
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
|
||||||
|
# Here is entries for some specific programs
|
||||||
|
# The following values assume you have at least 32M ram
|
||||||
|
|
||||||
|
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
|
||||||
|
[mysqld_safe]
|
||||||
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
nice = 0
|
||||||
|
|
||||||
|
[mysqld]
|
||||||
|
#
|
||||||
|
# * Basic Settings
|
||||||
|
#
|
||||||
|
user = mysql
|
||||||
|
pid-file = /var/run/mysqld/mysqld.pid
|
||||||
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
port = 3306
|
||||||
|
basedir = /usr
|
||||||
|
datadir = /var/lib/mysql
|
||||||
|
tmpdir = /tmp
|
||||||
|
lc-messages-dir = /usr/share/mysql
|
||||||
|
skip-external-locking
|
||||||
|
#
|
||||||
|
# Instead of skip-networking the default is now to listen only on
|
||||||
|
# localhost which is more compatible and is not less secure.
|
||||||
|
bind-address = 127.0.0.1
|
||||||
|
#
|
||||||
|
# * Fine Tuning
|
||||||
|
#
|
||||||
|
key_buffer = 16M
|
||||||
|
max_allowed_packet = 16M
|
||||||
|
thread_stack = 192K
|
||||||
|
thread_cache_size = 8
|
||||||
|
# This replaces the startup script and checks MyISAM tables if needed
|
||||||
|
# the first time they are touched
|
||||||
|
myisam-recover = BACKUP
|
||||||
|
#max_connections = 100
|
||||||
|
#table_cache = 64
|
||||||
|
#thread_concurrency = 10
|
||||||
|
#
|
||||||
|
# * Query Cache Configuration
|
||||||
|
#
|
||||||
|
query_cache_limit = 1M
|
||||||
|
query_cache_size = 16M
|
||||||
|
#
|
||||||
|
# * Logging and Replication
|
||||||
|
#
|
||||||
|
# Both location gets rotated by the cronjob.
|
||||||
|
# Be aware that this log type is a performance killer.
|
||||||
|
# As of 5.1 you can enable the log at runtime!
|
||||||
|
#general_log_file = /var/log/mysql/mysql.log
|
||||||
|
#general_log = 1
|
||||||
|
#
|
||||||
|
# Error log - should be very few entries.
|
||||||
|
#
|
||||||
|
log_error = /var/log/mysql/error.log
|
||||||
|
#
|
||||||
|
# Here you can see queries with especially long duration
|
||||||
|
log_slow_queries = /var/log/mysql/mysql-slow.log
|
||||||
|
long_query_time = 2
|
||||||
|
log-queries-not-using-indexes
|
||||||
|
#
|
||||||
|
# The following can be used as easy to replay backup logs or for replication.
|
||||||
|
# note: if you are setting up a replication slave, see README.Debian about
|
||||||
|
# other settings you may need to change.
|
||||||
|
#server-id = 1
|
||||||
|
#log_bin = /var/log/mysql/mysql-bin.log
|
||||||
|
expire_logs_days = 10
|
||||||
|
max_binlog_size = 100M
|
||||||
|
#binlog_do_db = include_database_name
|
||||||
|
#binlog_ignore_db = include_database_name
|
||||||
|
#
|
||||||
|
# * InnoDB
|
||||||
|
#
|
||||||
|
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
|
||||||
|
# Read the manual for more InnoDB related options. There are many!
|
||||||
|
#
|
||||||
|
# * Security Features
|
||||||
|
#
|
||||||
|
# Read the manual, too, if you want chroot!
|
||||||
|
# chroot = /var/lib/mysql/
|
||||||
|
#
|
||||||
|
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
|
||||||
|
#
|
||||||
|
# ssl-ca=/etc/mysql/cacert.pem
|
||||||
|
# ssl-cert=/etc/mysql/server-cert.pem
|
||||||
|
# ssl-key=/etc/mysql/server-key.pem
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[mysqldump]
|
||||||
|
quick
|
||||||
|
quote-names
|
||||||
|
max_allowed_packet = 16M
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
#no-auto-rehash # faster start of mysql but no tab completition
|
||||||
|
|
||||||
|
[isamchk]
|
||||||
|
key_buffer = 16M
|
||||||
|
|
||||||
|
#
|
||||||
|
# * IMPORTANT: Additional settings that can override those from this file!
|
||||||
|
# The files must end with '.cnf', otherwise they'll be ignored.
|
||||||
|
#
|
||||||
|
!includedir /etc/mysql/conf.d/
|
14
ansible/roles/stv3-workers/defaults/main.yaml
Normal file
14
ansible/roles/stv3-workers/defaults/main.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
## Lowest level config defaults for the stv3-worker role
|
||||||
|
|
||||||
|
# used in yagi.conf
|
||||||
|
rabbit_host: localhost
|
||||||
|
rabbit_user: guest
|
||||||
|
rabbit_password: password
|
||||||
|
rabbit_port: 5672
|
||||||
|
rabbit_vhost: /
|
||||||
|
rabbit_exchange: nova
|
||||||
|
|
||||||
|
# shoebox credentials ...
|
||||||
|
swift_region: DFW
|
||||||
|
swift_username: my_username
|
||||||
|
rax_api_key: my_api_key
|
100
ansible/roles/stv3-workers/files/pipeline-worker.debian.init.d
Normal file
100
ansible/roles/stv3-workers/files/pipeline-worker.debian.init.d
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: Winchester pipeline worker service
|
||||||
|
# Required-Start: $remote_fs $syslog
|
||||||
|
# Required-Stop: $remote_fs $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: Winchester pipeline worker daemon control.
|
||||||
|
# Description: Winchester pipeline worker daemon control.
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# Author: Sandy Walsh <sandy.walsh@rackspace.com>
|
||||||
|
|
||||||
|
# Do NOT "set -e"
|
||||||
|
|
||||||
|
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||||
|
PATH=/opt/stv3/bin:/sbin:/usr/sbin:/bin:/usr/bin
|
||||||
|
DESC="Winchester pipeline worker control"
|
||||||
|
NAME=pipeline_worker
|
||||||
|
DAEMON=/opt/stv3/bin/$NAME
|
||||||
|
DAEMON_ARGS="--config /etc/stv3/winchester.yaml"
|
||||||
|
PIDFILE=/var/run/stv3/$NAME.pid
|
||||||
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
USER=stv3
|
||||||
|
GROUP=stv3
|
||||||
|
|
||||||
|
# Exit if the package is not installed
|
||||||
|
[ -x "$DAEMON" ] || exit 0
|
||||||
|
|
||||||
|
# Read configuration variable file if it is present
|
||||||
|
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||||
|
|
||||||
|
# Load the VERBOSE setting and other rcS variables
|
||||||
|
. /lib/init/vars.sh
|
||||||
|
|
||||||
|
VERBOSE=yes
|
||||||
|
|
||||||
|
# Define LSB log_* functions.
|
||||||
|
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
||||||
|
# and status_of_proc is working.
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that starts the daemon/service
|
||||||
|
#
|
||||||
|
do_start()
|
||||||
|
{
|
||||||
|
. /opt/stv3/bin/activate
|
||||||
|
winchester_db -c /etc/stv3/winchester.yaml upgrade head
|
||||||
|
start-stop-daemon --start --name ${NAME} --chdir /var/run/stv3 \
|
||||||
|
--chuid ${USER}:${GROUP} --background \
|
||||||
|
--make-pidfile --pidfile ${PIDFILE} \
|
||||||
|
--exec ${DAEMON} -- ${DAEMON_ARGS}
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that stops the daemon/service
|
||||||
|
#
|
||||||
|
do_stop()
|
||||||
|
{
|
||||||
|
. /opt/stv3/bin/activate
|
||||||
|
log_daemon_msg "Stopping ${DAEMON}... " ${DAEMON}
|
||||||
|
start-stop-daemon --stop --oknodo --pidfile ${PIDFILE} --retry=TERM/30/KILL/5
|
||||||
|
log_end_msg $?
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||||
|
do_start
|
||||||
|
case "$?" in
|
||||||
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||||
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
case "$?" in
|
||||||
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||||
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||||
|
;;
|
||||||
|
restart|force-reload)
|
||||||
|
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
do_start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
||||||
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
:
|
||||||
|
|
100
ansible/roles/stv3-workers/files/yagi-event.debian.init.d
Normal file
100
ansible/roles/stv3-workers/files/yagi-event.debian.init.d
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: YAGI worker service
|
||||||
|
# Required-Start: $remote_fs $syslog
|
||||||
|
# Required-Stop: $remote_fs $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: YAGI worker daemon control.
|
||||||
|
# Description: YAGI worker daemon control.
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# Author: Sandy Walsh <sandy.walsh@rackspace.com>
|
||||||
|
|
||||||
|
# Do NOT "set -e"
|
||||||
|
|
||||||
|
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||||
|
PATH=/opt/stv3/bin:/sbin:/usr/sbin:/bin:/usr/bin
|
||||||
|
DESC="YAGI worker control"
|
||||||
|
NAME=yagi-event
|
||||||
|
DAEMON=/opt/stv3/bin/$NAME
|
||||||
|
DAEMON_ARGS="--config /etc/stv3/yagi.conf"
|
||||||
|
PIDFILE=/var/run/stv3/$NAME.pid
|
||||||
|
SCRIPTNAME=/etc/init.d/$NAME
|
||||||
|
USER=stv3
|
||||||
|
GROUP=stv3
|
||||||
|
|
||||||
|
# Exit if the package is not installed
|
||||||
|
[ -x "$DAEMON" ] || exit 0
|
||||||
|
|
||||||
|
# Read configuration variable file if it is present
|
||||||
|
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||||
|
|
||||||
|
# Load the VERBOSE setting and other rcS variables
|
||||||
|
. /lib/init/vars.sh
|
||||||
|
|
||||||
|
VERBOSE=yes
|
||||||
|
|
||||||
|
# Define LSB log_* functions.
|
||||||
|
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
||||||
|
# and status_of_proc is working.
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that starts the daemon/service
|
||||||
|
#
|
||||||
|
do_start()
|
||||||
|
{
|
||||||
|
. /opt/stv3/bin/activate
|
||||||
|
winchester_db -c /etc/stv3/winchester.yaml upgrade head
|
||||||
|
start-stop-daemon --start --name ${NAME} --chdir /var/run/stv3 \
|
||||||
|
--chuid ${USER}:${GROUP} --background \
|
||||||
|
--make-pidfile --pidfile ${PIDFILE} \
|
||||||
|
--exec ${DAEMON} -- ${DAEMON_ARGS}
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Function that stops the daemon/service
|
||||||
|
#
|
||||||
|
do_stop()
|
||||||
|
{
|
||||||
|
. /opt/stv3/bin/activate
|
||||||
|
log_daemon_msg "Stopping ${DAEMON}... " ${DAEMON}
|
||||||
|
start-stop-daemon --stop --oknodo --pidfile ${PIDFILE} --retry=TERM/30/KILL/5
|
||||||
|
log_end_msg $?
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||||
|
do_start
|
||||||
|
case "$?" in
|
||||||
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||||
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
case "$?" in
|
||||||
|
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||||
|
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||||
|
;;
|
||||||
|
restart|force-reload)
|
||||||
|
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||||
|
do_stop
|
||||||
|
do_start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
||||||
|
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
:
|
||||||
|
|
9
ansible/roles/stv3-workers/handlers/main.yaml
Normal file
9
ansible/roles/stv3-workers/handlers/main.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Only restart stv3-worker if we didn't already go from stopped
|
||||||
|
# to started by the stv3 worker process task
|
||||||
|
- name: restart yagi-event
|
||||||
|
service: name=yagi-event state=restarted
|
||||||
|
when: not yagi-event|changed
|
||||||
|
|
||||||
|
- name: restart pipeline-worker
|
||||||
|
service: name=pipeline_worker state=restarted
|
||||||
|
when: not pipeline_worker|changed
|
35
ansible/roles/stv3-workers/tasks/main.yaml
Normal file
35
ansible/roles/stv3-workers/tasks/main.yaml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
## Main task file for stv3-workers role
|
||||||
|
# All the users, groups, directories and code are
|
||||||
|
# set up by the common role.
|
||||||
|
|
||||||
|
---
|
||||||
|
- name: yagi.conf
|
||||||
|
template: src=yagi.conf.j2 dest=/etc/stv3/yagi.conf
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
|
||||||
|
- name: swift_credentials.conf
|
||||||
|
template: src=swift_credentials.conf.j2 dest=/etc/stv3/swift_credentials.conf
|
||||||
|
owner=stv3 group=stv3 mode=0644
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
|
||||||
|
- name: yagi-event-initd
|
||||||
|
copy: src=yagi-event.debian.init.d dest=/etc/init.d/yagi-event
|
||||||
|
owner=stv3 group=stv3 mode=0755
|
||||||
|
|
||||||
|
- name: pipeline-worker-initd
|
||||||
|
copy: src=pipeline-worker.debian.init.d
|
||||||
|
dest=/etc/init.d/pipeline_worker
|
||||||
|
owner=stv3 group=stv3 mode=0755
|
||||||
|
|
||||||
|
- name: yagi-event
|
||||||
|
debug: msg="Starting yagi-event"
|
||||||
|
notify:
|
||||||
|
- restart yagi-event
|
||||||
|
|
||||||
|
- name: pipeline-worker
|
||||||
|
debug: msg="Starting pipeline-worker"
|
||||||
|
notify:
|
||||||
|
- restart pipeline-worker
|
@ -0,0 +1,4 @@
|
|||||||
|
[rackspace_cloud]
|
||||||
|
username = {{ swift_username }}
|
||||||
|
api_key = {{ rax_api_key }}
|
||||||
|
|
75
ansible/roles/stv3-workers/templates/yagi.conf.j2
Normal file
75
ansible/roles/stv3-workers/templates/yagi.conf.j2
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
[global]
|
||||||
|
verbose = True
|
||||||
|
debug = True
|
||||||
|
update_timer = 10
|
||||||
|
|
||||||
|
[event_worker]
|
||||||
|
pidfile = yagi_event_worker.pid
|
||||||
|
daemonize = False
|
||||||
|
event_driver = yagi.broker.rabbit.Broker
|
||||||
|
|
||||||
|
[rabbit_broker]
|
||||||
|
host = {{ rabbit_host }}
|
||||||
|
user = {{ rabbit_user }}
|
||||||
|
password = {{ rabbit_password }}
|
||||||
|
port = {{ rabbit_port }}
|
||||||
|
vhost = {{ rabbit_vhost }}
|
||||||
|
poll_delay = 1
|
||||||
|
exchange_name = "{{ rabbit_exchange }}"
|
||||||
|
|
||||||
|
[logging]
|
||||||
|
logfile = /var/log/stv3/yagi.log
|
||||||
|
default_level = {{ yagi_log_level }}
|
||||||
|
#config_file = /etc/stv3/logging.conf
|
||||||
|
|
||||||
|
[consumers]
|
||||||
|
queues = monitor.info
|
||||||
|
|
||||||
|
[consumer:monitor.info]
|
||||||
|
#apps = yagi.handler.shoebox_handler.ShoeboxHandler
|
||||||
|
apps = winchester.yagi_handler.WinchesterHandler
|
||||||
|
exchange = monitor
|
||||||
|
exchange_type = topic
|
||||||
|
routing_key = monitor.info
|
||||||
|
durable = True
|
||||||
|
max_messages = 100
|
||||||
|
|
||||||
|
[filters]
|
||||||
|
cufpub = compute.instance.exists.verified,compute.instance.exists
|
||||||
|
|
||||||
|
[nova]
|
||||||
|
nova_flavor_field_name = instance_type_id
|
||||||
|
|
||||||
|
[oahu]
|
||||||
|
config_class = .|oahu_config:Config
|
||||||
|
|
||||||
|
[winchester]
|
||||||
|
config_file = /etc/stv3/winchester.yaml
|
||||||
|
|
||||||
|
[shoebox]
|
||||||
|
# Store in-process files in ./working
|
||||||
|
# Move them to ./archive when full via the MoveFileCallback
|
||||||
|
# Roll files every 1mb
|
||||||
|
|
||||||
|
working_directory=data/working
|
||||||
|
destination_folder=data/archive
|
||||||
|
|
||||||
|
filename_template=events_%Y_%m_%d_%X_%f.dat
|
||||||
|
roll_checker=shoebox.roll_checker:SizeRollChecker
|
||||||
|
roll_size_mb=1
|
||||||
|
|
||||||
|
distiller_conf=distiller.conf
|
||||||
|
|
||||||
|
# Swift upload support
|
||||||
|
# create a credentials file (see shoebox/bin/sample_credentials.conf)
|
||||||
|
callback=shoebox.handlers:CallbackList
|
||||||
|
callback_list=shoebox.handlers:MoveFileCallback, shoebox.handlers:SwiftUploadCallback, shoebox.handlers:DeleteFileCallback
|
||||||
|
container=sandbox
|
||||||
|
credentials_file=swift_credentials.conf
|
||||||
|
auth_method=rackspace
|
||||||
|
region={{ swift_region }}
|
||||||
|
|
||||||
|
# If you don't want Swift support, comment the above callback=
|
||||||
|
# entry and uncomment this one:
|
||||||
|
#callback=shoebox.handlers:MoveFileCallback
|
||||||
|
# which will just move the file into the archive directory.
|
0
ansible/vars/local_settings.yaml
Normal file
0
ansible/vars/local_settings.yaml
Normal file
21
ansible/workers.yaml
Normal file
21
ansible/workers.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
## Main entry point for the StackTach.v3 worker deployments
|
||||||
|
##
|
||||||
|
## Assumes an inventory value that has nodes or groups that start with
|
||||||
|
## "stv3-workers"
|
||||||
|
##
|
||||||
|
## Execution would look like:
|
||||||
|
## ansible-playbook workers.yaml -vv
|
||||||
|
##
|
||||||
|
## Assumes a stv3-db setup already exists.
|
||||||
|
---
|
||||||
|
- name: StackTach Workers Configurations
|
||||||
|
hosts: stv3-workers
|
||||||
|
remote_user: stacktach
|
||||||
|
sudo: yes
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- ["vars/local_settings.yaml"]
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
- stv3-workers
|
69
build.sh
69
build.sh
@ -2,10 +2,39 @@
|
|||||||
|
|
||||||
echo "StackTach dev env build script"
|
echo "StackTach dev env build script"
|
||||||
|
|
||||||
SOURCE_DIR=git
|
PACKAGE=false
|
||||||
|
TOX=false
|
||||||
|
DEPLOY=false
|
||||||
|
|
||||||
|
while getopts pdt opt; do
|
||||||
|
case $opt in
|
||||||
|
p)
|
||||||
|
PACKAGE=true
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
TOX=true
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
DEPLOY=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
|
DEV_DIR=git
|
||||||
|
PKG_DIR=dist
|
||||||
|
SOURCE_DIR=$DEV_DIR
|
||||||
VENV_DIR=.venv
|
VENV_DIR=.venv
|
||||||
PIPELINE_ENGINE=winchester
|
PIPELINE_ENGINE=winchester
|
||||||
|
|
||||||
|
if [[ "$PACKAGE" = true ]]
|
||||||
|
then
|
||||||
|
SOURCE_DIR=$PKG_DIR
|
||||||
|
rm -rf $PKG_DIR
|
||||||
|
rm -rf $VENV_DIR
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -f local.sh ]]; then
|
if [[ -f local.sh ]]; then
|
||||||
source local.sh
|
source local.sh
|
||||||
fi
|
fi
|
||||||
@ -30,6 +59,20 @@ for file in StackTach/notabene rackerlabs/yagi
|
|||||||
do
|
do
|
||||||
git clone https://github.com/$file
|
git clone https://github.com/$file
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [[ "$TOX" = true ]]
|
||||||
|
then
|
||||||
|
for file in shoebox simport notification-utils \
|
||||||
|
stackdistiller winchester
|
||||||
|
do
|
||||||
|
cd stacktach-$file
|
||||||
|
set -e
|
||||||
|
tox
|
||||||
|
set +e
|
||||||
|
cd ..
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
source ./$VENV_DIR/bin/activate
|
source ./$VENV_DIR/bin/activate
|
||||||
@ -59,4 +102,26 @@ then
|
|||||||
winchester_db -c winchester.yaml upgrade head
|
winchester_db -c winchester.yaml upgrade head
|
||||||
fi
|
fi
|
||||||
|
|
||||||
screen -c screenrc.$PIPELINE_ENGINE
|
if [[ "$PACKAGE" = true ]]
|
||||||
|
then
|
||||||
|
SHA=$(git log --pretty=format:'%h' -n 1)
|
||||||
|
mkdir dist
|
||||||
|
virtualenv --relocatable $VENV_DIR
|
||||||
|
mv $VENV_DIR dist/stv3
|
||||||
|
# Fix up the activate script to new location. --relocatable doesn't handle this.
|
||||||
|
cd dist/stv3/bin
|
||||||
|
sed -i "s/VIRTUAL_ENV=\".*\"/VIRTUAL_ENV=\"\/opt\/stv3\"/" activate
|
||||||
|
cd ../..
|
||||||
|
tar -zcvf ../stacktachv3_$SHA.tar.gz stv3
|
||||||
|
cd ..
|
||||||
|
echo "Release tarball in stacktachv3_$SHA.tar.gz"
|
||||||
|
|
||||||
|
if [[ "$DEPLOY" == true ]]
|
||||||
|
then
|
||||||
|
echo ansible-playbook db.yaml --extra-vars \"tarball_absolute_path=../stacktachv3_$SHA.tar.gz\" -vvv
|
||||||
|
echo ansible-playbook workers.yaml --extra-vars \"tarball_absolute_path=../stacktachv3_$SHA.tar.gz\" -vvv
|
||||||
|
echo ansible-playbook api.yaml --extra-vars \"tarball_absolute_path=../stacktachv3_$SHA.tar.gz\" -vvv
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
screen -c screenrc.$PIPELINE_ENGINE
|
||||||
|
fi
|
||||||
|
@ -26,10 +26,12 @@
|
|||||||
service:
|
service:
|
||||||
fields: publisher_id
|
fields: publisher_id
|
||||||
plugin: split
|
plugin: split
|
||||||
flavor_id:
|
instance_flavor_id:
|
||||||
|
type: int
|
||||||
fields:
|
fields:
|
||||||
- payload.instance_flavor_id
|
- payload.instance_flavor_id
|
||||||
- payload.image_meta.instance_type_flavor_id
|
- payload.image_meta.instance_type_flavor_id
|
||||||
|
- payload.instance_type_id
|
||||||
memory_mb:
|
memory_mb:
|
||||||
type: int
|
type: int
|
||||||
fields: payload.memory_mb
|
fields: payload.memory_mb
|
||||||
@ -45,9 +47,6 @@
|
|||||||
vcpus:
|
vcpus:
|
||||||
type: int
|
type: int
|
||||||
fields: payload.vcpus
|
fields: payload.vcpus
|
||||||
instance_type_id:
|
|
||||||
type: int
|
|
||||||
fields: payload.instance_type_id
|
|
||||||
instance_type:
|
instance_type:
|
||||||
fields: payload.instance_type
|
fields: payload.instance_type
|
||||||
state:
|
state:
|
||||||
|
Loading…
Reference in New Issue
Block a user