Skip to content

Commit

Permalink
Add feature for creating Geo-replication sessions
Browse files Browse the repository at this point in the history
  • Loading branch information
sac-urs committed Jul 6, 2017
1 parent 412635c commit a1447c4
Show file tree
Hide file tree
Showing 16 changed files with 127 additions and 143 deletions.
15 changes: 9 additions & 6 deletions examples/gluster.conf.sample
Expand Up @@ -852,8 +852,9 @@ client_mount_points=/mnt/gluster{1,3}
#
# [geo-replication]
# action=create
# mastervol=10.70.46.13:mastervolname
# slavevol=10.70.46.15:slavevolname
# mastervol=10.70.43.219:master
# slavevol=10.70.43.25:slave
# slavenodes=10.70.43.25,10.70.43.86
# force=yes
#
# This will automatically enable password less ssh between master and slave and
Expand All @@ -863,10 +864,12 @@ client_mount_points=/mnt/gluster{1,3}
# To create a secure geo-rep session
#
# [geo-replication]
# action=secure-session
# mastervol=10.70.46.13:mastervolname
# slavevol=10.70.46.15:slavevolname
# force=yes
# action=create
# georepuser=testgeorep
# mastervol=10.70.43.219:master
# slavevol=10.70.43.25:slave
# slavenodes=10.70.43.25,10.70.43.86
# force=no
#
#
#
Expand Down
24 changes: 13 additions & 11 deletions gdeployfeatures/geo_replication/geo_replication.json
Expand Up @@ -11,22 +11,24 @@
"required": "true",
"name": "slavevol"
},
{
"required": "true",
"name": "slavenodes"
},
{
"required": "false",
"name": "force",
"default": "no"
}
]
},
"secure-session": {
"options": [
"name": "georepuser",
"default": "root"
},
{
"required": "true",
"name": "mastervol"
"required": "false",
"name": "start",
"default": "yes"
},
{
"required": "true",
"name": "slavevol"
"required": "false",
"name": "groupname",
"default": "geogroup"
},
{
"required": "false",
Expand Down
25 changes: 11 additions & 14 deletions gdeployfeatures/geo_replication/geo_replication.py
Expand Up @@ -9,19 +9,18 @@

def geo_replication_create(section_dict):
section_dict = parse_georep_data(section_dict)
section_dict['base_dir'] = Global.base_dir
populate_inventory(section_dict)
Global.logger.info("Initiating georep create")
return section_dict, [defaults.PUBKEY_SHARE, defaults.GEOREP_CREATE]

def geo_replication_secure_session(section_dict):
section_dict = parse_georep_data(section_dict)
section_dict['secure'] = 'yes'
section_dict['user'] = 'geoaccount'
populate_inventory(section_dict)
Global.logger.info("Creating a secure georep session")
return section_dict, [defaults.GEOREP_SS,
defaults.PUBKEY_SHARE, defaults.GEOREP_CREATE,
defaults.SET_PERM_KEYS, defaults.GEOREP_START]
georep_setup = [ defaults.GEOREP_SETUP_MASTER,
defaults.GEOREP_SETUP_SLAVE_USERGRP,
defaults.GEOREP_SETUP_MOUNTBROKER,
defaults.GEOREP_SETUP_GLUSTERD_RESTART,
defaults.GEOREP_SETUP_SLAVE_PEM,
defaults.GEOREP_SETUP_SESSION_CREATE ]
if section_dict['start'] == 'yes':
georep_setup += [ defaults.GEOREP_START ]
return section_dict, georep_setup

def geo_replication_start(section_dict):
section_dict = parse_georep_data(section_dict)
Expand Down Expand Up @@ -96,12 +95,10 @@ def parse_georep_data(section_dict):
section_dict['slavevolname'] = helpers.split_volume_and_hostname(
section_dict['slavevol'])
section_dict['slave'] = Global.master
section_dict['secure'] = 'no'
section_dict['user'] = 'root'
return section_dict

def populate_inventory(section_dict):
global helpers
helpers.write_to_inventory('georep_master', [section_dict['master'][0]])
helpers.write_to_inventory('georep_slave', [section_dict['slave'][0]])
helpers.write_to_inventory('georep_slaves', section_dict['slave'])
helpers.write_to_inventory('georep_slaves', section_dict['slavenodes'])
11 changes: 6 additions & 5 deletions gdeploylib/defaults.py
Expand Up @@ -167,18 +167,19 @@

# GEO-REP

GEOREP_CREATE = 'georep-session-create.yml'
GEOREP_SETUP_MASTER = 'georep-init-ssh-setup-master.yml'
GEOREP_SETUP_SLAVE_USERGRP = 'georep-init-slaves-group-setup.yml'
GEOREP_SETUP_MOUNTBROKER = 'georep-init-slave-mountbroker-setup.yml'
GEOREP_SETUP_GLUSTERD_RESTART = 'georep-init-slaves-glusterd-restart.yml'
GEOREP_SETUP_SLAVE_PEM = 'georep-init-slave-pem-setup.yml'
GEOREP_SETUP_SESSION_CREATE = 'georep-init-session-create.yml'
GEOREP_START = 'georep-session-start.yml'
GEOREP_STOP = 'georep-session-stop.yml'
GEOREP_DELETE = 'georep-session-delete.yml'
GEOREP_PAUSE = 'georep-session-pause.yml'
GEOREP_RESUME = 'georep-session-resume.yml'
GEOREP_CONFIG = 'georep-session-config.yml'
GEOREP_SS = 'georep-secure-session.yml'
SET_PERM_KEYS = 'georep-set-pemkeys.yml'
GEOREP_FAILBACK = 'georep-fail-back.yml'
PUBKEY_SHARE = 'georep_common_public_key.yml'


# NFS-GANESHA

Expand Down
26 changes: 15 additions & 11 deletions modules/georep.py → modules/geo_rep.py
Expand Up @@ -49,15 +49,21 @@ def gluster_georep_ops(self):
else:
force = self._validated_params('force')
force = 'force' if force == 'yes' else ' '
self.action = 'create' if self.action == 'secure-session' else self.action
options = 'push-pem' if self.action == 'create' else self.config_georep()
options = 'no-verify' if self.action == 'create' \
else self.config_georep()
if type(options) is list:
for opt in options:
rc, output, err = self.call_gluster_cmd('volume', 'geo-replication',
mastervol, slavevol, self.action, opt, force)
rc, output, err = self.call_gluster_cmd('volume',
'geo-replication',
mastervol, slavevol,
self.action, opt,
force)
else:
rc, output, err = self.call_gluster_cmd('volume', 'geo-replication',
mastervol, slavevol, self.action, options, force)
rc, output, err = self.call_gluster_cmd('volume',
'geo-replication',
mastervol, slavevol,
self.action, options,
force)
self._get_output(rc, output, err)
if self.action in ['stop', 'delete'] and self.user == 'root':
self.user = 'geoaccount'
Expand Down Expand Up @@ -98,10 +104,8 @@ def check_pool_exclusiveness(self, mastervol, slavevol):
if val_group.group(1) in peers_in_cluster:
self.module.fail_json(msg="slave volume is in the trusted " \
"storage pool of master")
if self.module.params['secure'] =='yes':
self.user = 'geoaccount'
else:
self.user = 'root'
self.user = 'root' if self.module.params['georepuser'] is None \
else self.module.params['georepuser']
return self.user + '@' + val_group.group(1) + '::' + val_group.group(2)

def call_gluster_cmd(self, *args, **kwargs):
Expand Down Expand Up @@ -134,6 +138,7 @@ def _run_command(self, op, opts):
mastervol=dict(),
slavevol=dict(),
force=dict(),
georepuser=dict(),
gluster_log_file=dict(),
gluster_log_level=dict(),
log_file=dict(),
Expand All @@ -146,7 +151,6 @@ def _run_command(self, op, opts):
sync_jobs=dict(),
ignore_deletes=dict(),
checkpoint=dict(),
secure=dict(),
config=dict(),
op=dict()
),
Expand Down
3 changes: 3 additions & 0 deletions playbooks/ganesha-pcs-auth-new-nodes.yml
Expand Up @@ -8,3 +8,6 @@
shell: pcs cluster auth -u hacluster -p hacluster {{ item }}
register: result
with_items: "{{ nodes }}"

- name: Pause for a few seconds
pause: seconds=5
Expand Up @@ -4,14 +4,9 @@
gather_facts: no

tasks:
- name: Generate a common pem pub file
shell: "gluster system:: execute gsec_create"


- name: Create the geo-rep session
georep: action=create
geo_rep: action=create
mastervol="{{ mastervolname }}"
slavevol="{{ slavevol }}"
force="{{ force }}"
secure="{{ secure }}"

georepuser="{{ georepuser }}"
17 changes: 17 additions & 0 deletions playbooks/georep-init-slave-mountbroker-setup.yml
@@ -0,0 +1,17 @@
---
- hosts: georep_slave
remote_user: root
gather_facts: no

tasks:
- name: Copy the pem key to client
copy: src={{ base_dir }}/{{ mastervolname }}_{{ slavevolname }}_common_secret.pem.pub
dest=/var/lib/glusterd/geo-replication/{{ mastervolname }}_{{ slavevolname }}_common_secret.pem.pub mode=0600

- name: Setup mountbroker
shell: "gluster-mountbroker setup /var/gluster-mountbroker {{ groupname }}"
when: georepuser != "root"

- name: Add volume and user to mountbroker service
shell: "gluster-mountbroker add {{ slavevol }} {{ georepuser }}"
when: georepuser != "root"
12 changes: 12 additions & 0 deletions playbooks/georep-init-slave-pem-setup.yml
@@ -0,0 +1,12 @@
---
- hosts: georep_slave
remote_user: root
gather_facts: no

tasks:
- name: Copy pem keys
shell: "gluster system:: copy file /geo-replication/{{ mastervolname }}_{{ slavevolname }}_common_secret.pem.pub"

- name: Add pem keys
shell: "gluster system:: execute add_secret_pub {{ georepuser }} geo-replication/{{ mastervolname }}_{{ slavevolname }}_common_secret.pem.pub"

9 changes: 9 additions & 0 deletions playbooks/georep-init-slaves-glusterd-restart.yml
@@ -0,0 +1,9 @@
---
- hosts: georep_slaves
remote_user: root
gather_facts: no

tasks:
- name: Restart glusterd on slave nodes
service: name=glusterd state=restarted
when: georepuser != "root"
15 changes: 15 additions & 0 deletions playbooks/georep-init-slaves-group-setup.yml
@@ -0,0 +1,15 @@
---
- hosts: georep_slaves
remote_user: root
gather_facts: no

tasks:
- name: Create a new group
group: name="{{ groupname }}" state=present

- name: Create a new user
user: name="{{ georepuser }}" group="{{ groupname }}" generate_ssh_key=yes
when: georepuser != "root"

- name: Create the mountbroker-root directory
file: path=/var/gluster-mountbroker state=directory mode=0711
13 changes: 13 additions & 0 deletions playbooks/georep-init-ssh-setup-master.yml
@@ -0,0 +1,13 @@
---
- hosts: georep_master
remote_user: root
gather_facts: no

tasks:
- name: Generate a common pem pub file
shell: "gluster system:: execute gsec_create"

- name: Copy the generated public key to local
fetch: src=/var/lib/glusterd/geo-replication/common_secret.pem.pub
dest={{ base_dir }}/{{ mastervolname }}_{{ slavevolname }}_common_secret.pem.pub
flat=yes
58 changes: 0 additions & 58 deletions playbooks/georep-secure-session.yml

This file was deleted.

4 changes: 2 additions & 2 deletions playbooks/georep-session-start.yml
Expand Up @@ -5,8 +5,8 @@

tasks:
- name: Starts the geo-rep session
georep: action=start
geo_rep: action=start
mastervol="{{ mastervolname }}"
slavevol="{{ slavevol }}"
force="{{ force }}"
secure="{{secure}}"
georepuser="{{ georepuser }}"
9 changes: 0 additions & 9 deletions playbooks/georep-set-pemkeys.yml

This file was deleted.

20 changes: 0 additions & 20 deletions playbooks/georep_common_public_key.yml

This file was deleted.

0 comments on commit a1447c4

Please sign in to comment.