Example #1
0
 def test_update_hacluster_vip_multiple_vip(self):
     self.get_hacluster_config.return_value = {
         'vip': '10.5.100.1 ffff::1 ffaa::1'
     }
     test_data = {'resources': {}, 'resource_params': {}}
     expected = {
         'groups': {
             'grp_testservice_vips': ('res_testservice_242d562_vip '
                                      'res_testservice_856d56f_vip '
                                      'res_testservice_f563c5d_vip')
         },
         'delete_resources': [
             'res_testservice_eth1_vip',
             'res_testservice_eth1_vip_ipv6addr', 'res_testservice_eth2_vip'
         ],
         'resource_params': {
             'res_testservice_242d562_vip':
             ('params ip="10.5.100.1" op monitor '
              'timeout="20s" interval="10s" depth="0"'),
             'res_testservice_856d56f_vip':
             ('params ipv6addr="ffff::1" op monitor '
              'timeout="20s" interval="10s" depth="0"'),
             'res_testservice_f563c5d_vip':
             ('params ipv6addr="ffaa::1" op monitor '
              'timeout="20s" interval="10s" depth="0"'),
         },
         'resources': {
             'res_testservice_242d562_vip': 'ocf:heartbeat:IPaddr2',
             'res_testservice_856d56f_vip': 'ocf:heartbeat:IPv6addr',
             'res_testservice_f563c5d_vip': 'ocf:heartbeat:IPv6addr',
         }
     }
     ha.update_hacluster_vip('testservice', test_data)
     self.assertEqual(test_data, expected)
 def test_update_hacluster_vip_multiple_vip(self):
     self.get_hacluster_config.return_value = {
         'vip': '10.5.100.1 ffff::1 ffaa::1'
     }
     test_data = {'resources': {}, 'resource_params': {}}
     expected = {
         'groups': {
             'grp_testservice_vips': ('res_testservice_eth1_vip '
                                      'res_testservice_eth1_vip_ipv6addr '
                                      'res_testservice_eth2_vip')
         },
         'resource_params': {
             'res_testservice_eth1_vip': ('params ip="10.5.100.1"'
                                          ' cidr_netmask="255.255.255.0"'
                                          ' nic="eth1"'),
             'res_testservice_eth1_vip_ipv6addr': ('params ipv6addr="ffff::1"'
                                                   ' cidr_netmask="64"'
                                                   ' nic="eth1"'),
             'res_testservice_eth2_vip': ('params ipv6addr="ffaa::1"'
                                          ' cidr_netmask="32"'
                                          ' nic="eth2"'),
         },
         'resources': {
             'res_testservice_eth1_vip': 'ocf:heartbeat:IPaddr2',
             'res_testservice_eth1_vip_ipv6addr': 'ocf:heartbeat:IPv6addr',
             'res_testservice_eth2_vip': 'ocf:heartbeat:IPv6addr',
         }
     }
     ha.update_hacluster_vip('testservice', test_data)
     self.assertEqual(test_data, expected)
def ha_relation_joined(relation_id=None):
    sstpsswd = sst_password()
    _relation_data = {
        'resources': {
            'res_mysql_monitor': 'ocf:percona:mysql_monitor'},
        'resource_params': {
            'res_mysql_monitor': RES_MONITOR_PARAMS % {'sstpass': sstpsswd}},
        'clones': {
            'cl_mysql_monitor': 'res_mysql_monitor meta interleave=true'},
        'delete_resources': ['loc_percona_cluster', 'grp_percona_cluster',
                             'res_mysql_vip']
    }

    if config('dns-ha'):
        update_hacluster_dns_ha('mysql', _relation_data)
        group_name = DNSHA_GROUP_NAME.format(service='mysql')
    else:
        update_hacluster_vip('mysql', _relation_data)
        group_name = VIP_GROUP_NAME.format(service='mysql')

    _relation_data['locations'] = {
        'loc_mysql': '{} rule inf: writable eq 1'.format(group_name)}
    _relation_data['colocations'] = {
        'colo_mysql': 'inf: {} cl_mysql_monitor'.format(group_name)}
    settings = {
        'json_{}'.format(k): json.dumps(v, **JSON_ENCODE_OPTIONS)
        for k, v in _relation_data.items() if v
    }

    for rel_id in relation_ids('ha'):
        relation_set(relation_id=rel_id, **settings)
def ha_relation_joined(relation_id=None):
    sstpsswd = sst_password()
    _relation_data = {
        'resources': {
            'res_mysql_monitor': 'ocf:percona:mysql_monitor'},
        'resource_params': {
            'res_mysql_monitor': RES_MONITOR_PARAMS % {'sstpass': sstpsswd}},
        'clones': {
            'cl_mysql_monitor': 'res_mysql_monitor meta interleave=true'},
        'delete_resources': ['loc_percona_cluster', 'grp_percona_cluster',
                             'res_mysql_vip']
    }

    if config('dns-ha'):
        update_hacluster_dns_ha('mysql', _relation_data)
        group_name = DNSHA_GROUP_NAME.format(service='mysql')
    else:
        update_hacluster_vip('mysql', _relation_data)
        group_name = VIP_GROUP_NAME.format(service='mysql')

    _relation_data['locations'] = {
        'loc_mysql': '{} rule inf: writable eq 1'.format(group_name)}
    _relation_data['colocations'] = {
        'colo_mysql': 'inf: {} cl_mysql_monitor'.format(group_name)}
    settings = {
        'json_{}'.format(k): json.dumps(v, **JSON_ENCODE_OPTIONS)
        for k, v in _relation_data.items() if v
    }

    for rel_id in relation_ids('ha'):
        relation_set(relation_id=rel_id, **settings)
 def on_joined(self, event):
     if not self.cluster.is_ag_ready:
         logger.warning('The availability group is not ready. Defering '
                        'hacluster on_joined until AG is ready.')
         event.defer()
         return
     logger.info('Installing Microsoft SQL Server HA components')
     retry_on_error()(apt_install)(packages=self.APT_PACKAGES, fatal=True)
     self.setup_pacemaker_mssql_login()
     rel_data = {
         'resources': {
             'ag_cluster': 'ocf:mssql:ag'
         },
         'resource_params': {
             'ag_cluster':
             'params ag_name="{ag_name}" '
             'meta failure-timeout=60s '
             'op start timeout=60s '
             'op stop timeout=60s '
             'op promote timeout=60s '
             'op demote timeout=10s '
             'op monitor timeout=60s interval=10s '
             'op monitor timeout=60s interval=11s role="Master" '
             'op monitor timeout=60s interval=12s role="Slave" '
             'op notify timeout=60s'.format(ag_name=self.cluster.AG_NAME)
         },
         'ms': {
             'ms-ag_cluster':
             'ag_cluster meta '
             'master-max="1" master-node-max="1" '
             'clone-max="3" clone-node-max="1" notify="true"'
         }
     }
     update_hacluster_vip('mssql', rel_data)
     group_name = VIP_GROUP_NAME.format(service='mssql')
     rel_data.update({
         'colocations': {
             'vip_on_master':
             'inf: {} ms-ag_cluster:Master'.format(group_name)
         },
         'orders': {
             'ag_first':
             'inf: ms-ag_cluster:promote {}:start'.format(group_name)
         }
     })
     rel = self.model.get_relation(event.relation.name, event.relation.id)
     for k, v in rel_data.items():
         rel.data[self.unit]['json_{}'.format(k)] = json.dumps(
             v, **JSON_ENCODE_OPTIONS)
Example #6
0
 def test_update_hacluster_vip_single_vip(self):
     self.get_hacluster_config.return_value = {'vip': '10.5.100.1'}
     test_data = {'resources': {}, 'resource_params': {}}
     expected = {
         'groups': {
             'grp_testservice_vips': 'res_testservice_eth1_vip'
         },
         'resource_params': {
             'res_testservice_eth1_vip': ('params ip="10.5.100.1"'
                                          ' cidr_netmask="255.255.255.0"'
                                          ' nic="eth1"')
         },
         'resources': {
             'res_testservice_eth1_vip': 'ocf:heartbeat:IPaddr2'
         }
     }
     ha.update_hacluster_vip('testservice', test_data)
     self.assertEqual(test_data, expected)
Example #7
0
 def test_update_hacluster_vip_single_vip_fallback(self):
     self.get_hacluster_config.return_value = {'vip': '10.5.100.1'}
     test_data = {'resources': {}, 'resource_params': {}}
     expected = {
         'delete_resources': ['res_testservice_eth1_vip'],
         'groups': {
             'grp_testservice_vips': 'res_testservice_242d562_vip'
         },
         'resource_params': {
             'res_testservice_242d562_vip':
             ('params ip="10.5.100.1" op monitor '
              'timeout="20s" interval="10s" depth="0"')
         },
         'resources': {
             'res_testservice_242d562_vip': 'ocf:heartbeat:IPaddr2'
         }
     }
     ha.update_hacluster_vip('testservice', test_data)
     self.assertEqual(test_data, expected)
Example #8
0
 def test_update_hacluster_config_vip(self):
     self.get_iface_for_address.side_effect = lambda x: None
     self.get_netmask_for_address.side_effect = lambda x: None
     self.conf = {'vip_iface': 'eth1', 'vip_cidr': '255.255.255.0'}
     self.get_hacluster_config.return_value = {'vip': '10.5.100.1'}
     test_data = {'resources': {}, 'resource_params': {}}
     expected = {
         'delete_resources': ['res_testservice_eth1_vip'],
         'groups': {
             'grp_testservice_vips': 'res_testservice_242d562_vip'
         },
         'resource_params': {
             'res_testservice_242d562_vip':
             ('params ip="10.5.100.1" cidr_netmask="255.255.255.0" '
              'nic="eth1" op monitor timeout="20s" '
              'interval="10s" depth="0"')
         },
         'resources': {
             'res_testservice_242d562_vip': 'ocf:heartbeat:IPaddr2'
         }
     }
     ha.update_hacluster_vip('testservice', test_data)
     self.assertEqual(test_data, expected)