예제 #1
0
def add_role_to_given_farm(step, role_type, redis_count):
    LOG.info("Add role to farm")
    engine = CONF.main.storage
    LOG.info('Use storage engine: %s' % engine)
    world.role_type = role_type
    options_list = {'eph':{'db.msr.data_storage.engine': 'eph',
                           'db.msr.data_storage.eph.disk': '/dev/sda2',
                           'aws.instance_type':'m1.small',
                           'aws.use_ebs': '0'},
                    'lvm':{'db.msr.data_storage.engine': 'lvm',
                           'aws.instance_type':'m1.large',
                           'db.msr.data_storage.fstype': 'ext3',
                           'db.msr.data_storage.eph.disk': '/dev/sdb'},
                    'raid10':{'db.msr.data_storage.engine': 'raid.ebs',
                              'db.msr.data_storage.raid.level': '10',
                              'db.msr.data_storage.raid.volume_size': '15',
                              'db.msr.data_storage.raid.volumes_count': '8',
                              'db.msr.data_storage.fstype': 'ext3',
                              },
                    'raid5':{'db.msr.data_storage.engine': 'raid.ebs',
                             'db.msr.data_storage.raid.level': '5',
                             'db.msr.data_storage.raid.volume_size': '1',
                             'db.msr.data_storage.raid.volumes_count': '3',},
                    'raid0':{'db.msr.data_storage.engine': 'raid.ebs',
                             'db.msr.data_storage.raid.level': '0',
                             'db.msr.data_storage.raid.volume_size': '1',
                             'db.msr.data_storage.raid.volumes_count': '2',},
                    'raid1':{'db.msr.data_storage.engine': 'raid.ebs',
                             'db.msr.data_storage.raid.level': '1',
                             'db.msr.data_storage.raid.volume_size': '1',
                             'db.msr.data_storage.raid.volumes_count': '2',},
                    'ebs':{'db.msr.data_storage.engine':'ebs',
                           'db.msr.data_storage.ebs.size': '1',}}
    scripting = []
    if CONF.main.platform == 'ec2':
        if role_type == 'mysql':
            options = {'mysql.data_storage_engine' : 'ebs',
                       'mysql.ebs_volume_size'      : 1}
        else:
            options = options_list[engine]
    else:
        options = {}
    options.update({'db.msr.redis.persistence_type': os.environ.get('RV_REDIS_SNAPSHOTTING', 'aof'),
                    'db.msr.redis.num_processes': int(redis_count)})
    world.role_options = options
    world.role_scripting = scripting
    role = world.add_role_to_farm(world.role_type, options=options, scripting=scripting)
    setattr(world, world.role_type + '_role', role)
    LOG.info("Set DB object to world")
    if role_type in ['mysql', 'postgresql', 'redis', 'mongodb', 'percona', 'mysql2', 'percona2']:
        db = Database.create(role)
        if not db:
            raise AssertionError('Database for role %s not found!' % role)
        setattr(world, 'db', db)
예제 #2
0
def add_new_role_to_farm(step):
    options = getattr(world, "role_options", {})
    scripting = getattr(world, "role_scripting", [])
    if world.role_type == "redis":
        options.update(
            {
                "db.msr.redis.persistence_type": os.environ.get("RV_REDIS_SNAPSHOTTING", "aof"),
                "db.msr.redis.use_password": True,
            }
        )
    world.farm.add_role(world.new_role_id, options=options, scripting=scripting)
    world.farm.roles.reload()
    role = world.farm.roles[0]
    setattr(world, world.role_type + "_role", role)
    LOG.info("Set DB object to world")
    if world.role_type in ["mysql", "mariadb", "percona", "postgresql", "redis", "mongodb", "mysql2", "percona2"]:
        db = Database.create(role)
        if db:
            setattr(world, "db", db)
예제 #3
0
def add_role_to_farm(step, behavior=None, options=None):
    additional_storages = None
    scripting = None
    farm_options = {"base.hostname_format": "{SCALR_FARM_NAME}-{SCALR_ROLE_NAME}-{SCALR_INSTANCE_INDEX}"}
    if not behavior:
        behavior = os.environ.get("RV_BEHAVIOR", "base")
    else:
        behavior = behavior.strip()
    options = options.strip() if options else None
    if options:
        for opt in [o.strip() for o in options.strip().split(",")]:
            LOG.info("Inspect option: %s" % opt)
            if "redis processes" in opt:
                LOG.info("Add redis processes")
                redis_count = re.findall(r"(\d+) redis processes", options)[0].strip()
                farm_options.update({"db.msr.redis.num_processes": int(redis_count)})
            elif opt == "scripts":
                LOG.info("Add scripting")
                script_id = Script.get_id("Linux ping-pong")["id"]
                scripting = [
                    {
                        "script_id": script_id,
                        "script": "Linux ping-pong",
                        "params": {},
                        "target": "instance",
                        "version": "-1",
                        "timeout": "1200",
                        "issync": "1",
                        "order_index": "1",
                        "event": "HostInit",
                        "run_as": "root",
                    },
                    {
                        "script_id": script_id,
                        "script": "Linux ping-pong",
                        "params": {},
                        "target": "instance",
                        "version": "-1",
                        "timeout": "1200",
                        "issync": "1",
                        "order_index": "10",
                        "event": "BeforeHostUp",
                        "run_as": "revizor",
                    },
                    {
                        "script_id": script_id,
                        "script": "Linux ping-pong",
                        "params": {},
                        "target": "instance",
                        "version": "-1",
                        "timeout": "1200",
                        "issync": "1",
                        "order_index": "20",
                        "event": "HostUp",
                        "run_as": "ubuntu",
                    },
                ]
            elif opt == "storages":
                LOG.info("Add additional storages")
                if CONF.main.driver in [Platform.EC2]:
                    LOG.info("Add storages from EC2")
                    additional_storages = {
                        "configs": [
                            {
                                "id": None,
                                "type": "ebs",
                                "fs": "ext3",
                                "settings": {"ebs.size": "1", "ebs.type": "standard", "ebs.snapshot": None},
                                "mount": True,
                                "mountPoint": "/media/ebsmount",
                                "reUse": True,
                                "status": "",
                            },
                            {
                                "id": None,
                                "type": "raid.ebs",
                                "fs": "ext3",
                                "settings": {
                                    "raid.level": "10",
                                    "raid.volumes_count": 4,
                                    "ebs.size": "1",
                                    "ebs.type": "standard",
                                    "ebs.snapshot": None,
                                },
                                "mount": True,
                                "mountPoint": "/media/raidmount",
                                "reUse": True,
                                "status": "",
                            },
                        ]
                    }
                elif CONF.main.driver in [Platform.IDCF, Platform.CLOUDSTACK]:
                    LOG.info("Add storages from IDCF/CloudStack")
                    additional_storages = {
                        "configs": [
                            {
                                "id": None,
                                "type": "csvol",
                                "fs": "ext3",
                                "settings": {"csvol.size": "1"},
                                "mount": True,
                                "mountPoint": "/media/ebsmount",
                                "reUse": True,
                                "status": "",
                            },
                            {
                                "id": None,
                                "type": "raid.csvol",
                                "fs": "ext3",
                                "settings": {"raid.level": "10", "raid.volumes_count": 4, "csvol.size": "1"},
                                "mount": True,
                                "mountPoint": "/media/raidmount",
                                "reUse": True,
                                "status": "",
                            },
                        ]
                    }
                elif CONF.main.driver in [Platform.OPENSTACK, Platform.ECS]:
                    LOG.info("Add storages from OpenStack")
                    additional_storages = {
                        "configs": [
                            {
                                "id": None,
                                "type": "cinder",
                                "fs": "ext3",
                                "settings": {"cinder.size": "1"},
                                "mount": True,
                                "mountPoint": "/media/ebsmount",
                                "reUse": True,
                                "status": "",
                                "rebuild": False,
                            },
                            {
                                "id": None,
                                "type": "raid.cinder",
                                "fs": "ext3",
                                "settings": {"raid.level": "10", "raid.volumes_count": 4, "cinder.size": "1"},
                                "mount": True,
                                "mountPoint": "/media/raidmount",
                                "reUse": True,
                                "status": "",
                                "rebuild": False,
                            },
                        ]
                    }
            else:
                LOG.info("Add %s" % opt)
                farm_options.update(FARM_OPTIONS.get(opt, {}))
    if behavior == "rabbitmq":
        del (farm_options["base.hostname_format"])
    if behavior == "tomcat6" and CONF.main.dist.startswith("ubuntu"):
        behavior = "tomcat7"
    if behavior == "redis":
        LOG.info("Add redis settings")
        farm_options.update(
            {
                "db.msr.redis.persistence_type": os.environ.get("RV_REDIS_SNAPSHOTTING", "aof"),
                "db.msr.redis.use_password": True,
            }
        )
    if behavior in ["mysql", "mysql2", "percona2", "mariadb", "postgresql", "redis", "mongodb", "percona"]:
        storage = STORAGES.get(Platform.to_scalr(CONF.main.driver), None)
        if storage:
            LOG.info("Add main settings for %s storage" % CONF.main.storage)
            farm_options.update(storage.get(CONF.main.storage, {}))
    world.role_type = behavior
    world.role_options = farm_options
    world.role_scripting = scripting
    LOG.debug("All farm settings: %s" % farm_options)
    role = world.add_role_to_farm(
        world.role_type, options=farm_options, scripting=scripting, storages=additional_storages
    )
    setattr(world, "%s_role" % world.role_type, role)
    world.role = role
    if behavior in ["mysql", "postgresql", "redis", "mongodb", "percona", "mysql2", "percona2", "mariadb"]:
        db = Database.create(role)
        if not db:
            raise AssertionError("Database for role %s not found!" % role)
        world.database_users = {}
        world.db = db