-
Notifications
You must be signed in to change notification settings - Fork 68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improved configuration #14
Changes from all commits
63940ec
eeb56bd
e3e8bb5
6b26dc3
749f356
5cce24a
b53d8a7
68eb75a
34e55c5
3dc9d66
69ca45c
e82ee84
9239d16
3505716
26b02e3
4279577
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.DS_Store | ||
**/.DS_Store | ||
_env* |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,3 +8,6 @@ manta.pub | |
|
||
# temp | ||
python-manta/ | ||
|
||
# macos frustration | ||
.DS_Store |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -32,7 +32,7 @@ | |
|
||
log = logging.getLogger('triton-mysql') | ||
|
||
consul = pyconsul.Consul(host=os.environ.get('TRITON_MYSQL_CONSUL', 'consul')) | ||
consul = pyconsul.Consul(host=os.environ.get('CONSUL', 'consul')) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For #11 |
||
config = None | ||
|
||
# consts for node state | ||
|
@@ -175,7 +175,7 @@ def __init__(self): | |
self.user = os.environ.get('MANTA_SUBUSER', None) | ||
self.role = os.environ.get('MANTA_ROLE', None) | ||
self.key_id = os.environ.get('MANTA_KEY_ID', None) | ||
self.private_key = os.environ.get('MANTA_PRIVATE_KEY') | ||
self.private_key = os.environ.get('MANTA_PRIVATE_KEY').replace('#', '\n') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Error:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This was caused by |
||
self.url = os.environ.get('MANTA_URL', | ||
'https://us-east.manta.joyent.com') | ||
self.bucket = os.environ.get('MANTA_BUCKET', | ||
|
@@ -203,15 +203,15 @@ def put_backup(self, backup_id, infile): | |
|
||
# --------------------------------------------------------- | ||
|
||
class Containerpilot(object): | ||
class ContainerPilot(object): | ||
""" | ||
Containerpilot config is where we rewrite Containerpilot's own config | ||
ContainerPilot config is where we rewrite ContainerPilot's own config | ||
so that we can dynamically alter what service we advertise | ||
""" | ||
|
||
def __init__(self, node): | ||
# TODO: we should make sure we can support JSON-in-env-var | ||
# the same as Containerpilot itself | ||
# the same as ContainerPilot itself | ||
self.node = node | ||
self.path = os.environ.get('CONTAINERPILOT').replace('file://', '') | ||
with open(self.path, 'r') as f: | ||
|
@@ -231,12 +231,12 @@ def render(self): | |
f.write(new_config) | ||
|
||
def reload(self): | ||
""" force Containerpilot to reload its configuration """ | ||
log.info('Reloading Containerpilot configuration.') | ||
""" force ContainerPilot to reload its configuration """ | ||
log.info('Reloading ContainerPilot configuration.') | ||
os.kill(1, signal.SIGHUP) | ||
|
||
# --------------------------------------------------------- | ||
# Top-level functions called by Containerpilot or forked by this program | ||
# Top-level functions called by ContainerPilot or forked by this program | ||
|
||
def on_start(): | ||
""" | ||
|
@@ -257,24 +257,24 @@ def on_start(): | |
def health(): | ||
""" | ||
Run a simple health check. Also acts as a check for whether the | ||
Containerpilot configuration needs to be reloaded (if it's been | ||
ContainerPilot configuration needs to be reloaded (if it's been | ||
changed externally), or if we need to make a backup because the | ||
backup TTL has expired. | ||
""" | ||
log.debug('health check fired.') | ||
try: | ||
node = MySQLNode() | ||
cb = Containerpilot(node) | ||
if cb.update(): | ||
cb.reload() | ||
cp = ContainerPilot(node) | ||
if cp.update(): | ||
cp.reload() | ||
return | ||
|
||
# cb.reload() will exit early so no need to setup | ||
# cp.reload() will exit early so no need to setup | ||
# connection until this point | ||
ctx = dict(user=config.repl_user, | ||
password=config.repl_password, | ||
database=config.mysql_db, | ||
timeout=cb.config['services'][0]['ttl']) | ||
timeout=cp.config['services'][0]['ttl']) | ||
node.conn = wait_for_connection(**ctx) | ||
|
||
# Update our lock on being the primary/standby. | ||
|
@@ -312,15 +312,15 @@ def on_change(): | |
log.debug('on_change check fired.') | ||
try: | ||
node = MySQLNode() | ||
cb = Containerpilot(node) | ||
cb.update() # this will populate MySQLNode state correctly | ||
cp = ContainerPilot(node) | ||
cp.update() # this will populate MySQLNode state correctly | ||
if node.is_primary(): | ||
return | ||
|
||
ctx = dict(user=config.repl_user, | ||
password=config.repl_password, | ||
database=config.mysql_db, | ||
timeout=cb.config['services'][0]['ttl']) | ||
timeout=cp.config['services'][0]['ttl']) | ||
node.conn = wait_for_connection(**ctx) | ||
|
||
# need to stop replication whether we're the new primary or not | ||
|
@@ -341,8 +341,8 @@ def on_change(): | |
session_id = get_session(no_cache=True) | ||
if mark_with_session(PRIMARY_KEY, node.hostname, session_id): | ||
node.state = PRIMARY | ||
if cb.update(): | ||
cb.reload() | ||
if cp.update(): | ||
cp.reload() | ||
return | ||
else: | ||
# we lost the race to lock the session for ourselves | ||
|
@@ -354,8 +354,8 @@ def on_change(): | |
# if it's not healthy, we'll throw an exception and start over. | ||
ip = get_primary_host(primary=primary) | ||
if ip == node.ip: | ||
if cb.update(): | ||
cb.reload() | ||
if cp.update(): | ||
cp.reload() | ||
return | ||
|
||
set_primary_for_replica(node.conn) | ||
|
@@ -791,9 +791,9 @@ def write_snapshot(conn): | |
# we set the BACKUP_TTL before we run the backup so that we don't | ||
# have multiple health checks running concurrently. We then fork the | ||
# create_snapshot call and return. The snapshot process will be | ||
# re-parented to Containerpilot | ||
# re-parented to ContainerPilot | ||
set_backup_ttl() | ||
subprocess.Popen(['python', '/bin/triton-mysql.py', 'create_snapshot']) | ||
subprocess.Popen(['python', '/usr/local/bin/triton-mysql.py', 'create_snapshot']) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Couldn't this rely on |
||
|
||
def set_backup_ttl(): | ||
""" | ||
|
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,32 @@ | ||
mysql: | ||
extends: | ||
file: common-compose.yml | ||
service: mysql | ||
links: | ||
- consul:consul | ||
image: autopilotpattern/mysql:latest | ||
mem_limit: 4g | ||
restart: always | ||
# expose for linking, but each container gets a private IP for | ||
# internal use as well | ||
expose: | ||
- 3306 | ||
labels: | ||
- triton.cns.services=mysql | ||
env_file: _env | ||
environment: | ||
- CONTAINERPILOT=file:///etc/containerpilot.json | ||
|
||
consul: | ||
extends: | ||
file: common-compose.yml | ||
service: consul | ||
image: progrium/consul:latest | ||
command: -server -bootstrap -ui-dir /ui | ||
restart: always | ||
mem_limit: 128m | ||
ports: | ||
- 8500 | ||
expose: | ||
- 53 | ||
- 8300 | ||
- 8301 | ||
- 8302 | ||
- 8400 | ||
- 8500 | ||
dns: | ||
- 127.0.0.1 | ||
labels: | ||
- triton.cns.services=consul |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd love to try adding the
pip install
steps in here so we canapt-get purge
GCC after it's done its job, similar to https://github.com/autopilotpattern/nfsserver/blob/wip/Dockerfile#L8-L19.