Exemple #1
0
def expose():
    if NAME not in util.get_services():
        util.run(
            ['kubectl', 'expose', 'deployment', NAME, '--type=LoadBalancer'])
        print(
            "Type 'kubectl get services haproxy' in about 2 minutes to see the external IP address."
        )
Exemple #2
0
def run_on_kubernetes(args):
    create_gcloud_secret()
    context   = util.get_cluster_prefix()
    namespace = util.get_current_namespace()
    if len(args.number) == 0:
        # Figure out the nodes based on the names of persistent disks, or just node 0 if none.
        args.number = range(max(1,len(get_persistent_disks(context, namespace))))
    if 'storage-projects' not in util.get_services():
        util.run(['kubectl', 'create', '-f', 'conf/service.yaml'])
    args.local = False # so tag is for gcloud

    tag = util.get_tag(args, NAME, build)
    if not args.tag:
        tag = tag[:tag.rfind('-')]   # get rid of the final -[service] part of the tag.

    t = open(join('conf', '{name}.template.yaml'.format(name=NAME))).read()

    ensure_ssh()
    for number in args.number:
        deployment_name = "{name}{number}".format(name=NAME, number=number)
        ensure_persistent_disk_exists(context, namespace, number, args.size, args.type)
        with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
            tmp.write(t.format(image         = tag,
                               number        = number,
                               gcloud_bucket = gcloud_bucket(namespace=namespace),
                               pd_name       = pd_name(context=context, namespace=namespace, number=number),
                               health_delay  = args.health_delay,
                               pull_policy   = util.pull_policy(args)))
            tmp.flush()
            util.update_deployment(tmp.name)
Exemple #3
0
def ensure_services_exist():
    v = util.get_services()
    for s in ['driver', 'cluster']:
        n = 'rethinkdb-'+s
        if n not in v:
            filename = join('conf', s + '.yaml')
            print("creating service defined in '{filename}'".format(filename=filename))
            util.update_service(filename)
Exemple #4
0
def ensure_services_exist():
    v = util.get_services()
    for s in ['driver', 'cluster']:
        n = 'rethinkdb-'+s
        if n not in v:
            filename = join('conf', s + '.yaml')
            print("creating service defined in '{filename}'".format(filename=filename))
            util.update_service(filename)
Exemple #5
0
def delete_all():
    x = util.get_deployments()
    s = util.get_services()
    for name in ['rethinkdb0', 'rethinkdb-proxy', 'smc-webapp-static', 'smc-hub', 'haproxy']:
        if name in x:
            if name == 'rethinkdb0':
                name = 'rethinkdb'
            print('\n******\nDELETING {name}\n******\n'.format(name=name))
            util.run([join(SCRIPT_PATH,'..',name,'control.py'), 'delete'])
        if name in s:
            util.run(['kubectl', 'delete', 'services', name])
Exemple #6
0
def run_on_kubernetes(args):
    args.local = False # so tag is for gcloud
    if args.replicas is None:
        args.replicas = util.get_desired_replicas(NAME, 2)
    tag = util.get_tag(args, NAME, build)
    t = open(join('conf', '{name}.template.yaml'.format(name=NAME))).read()
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
        tmp.write(t.format(image=tag, replicas=args.replicas,
                               pull_policy=util.pull_policy(args)))
        tmp.flush()
        util.update_deployment(tmp.name)
    if NAME not in util.get_services():
        util.run(['kubectl', 'expose', 'deployment', NAME])
Exemple #7
0
def run_on_kubernetes(args):
    if args.test:
        rethink_cpu_request = hub_cpu_request = '10m'
        rethink_memory_request = hub_memory_request = '200Mi'
    else:
        hub_cpu_request = '500m'
        hub_memory_request = '1Gi'
        rethink_cpu_request = '500m'
        rethink_memory_request = '2Gi'

    util.ensure_secret_exists('sendgrid-api-key', 'sendgrid')
    util.ensure_secret_exists('zendesk-api-key', 'zendesk')
    args.local = False  # so tag is for gcloud
    if args.replicas is None:
        args.replicas = util.get_desired_replicas(NAME, 2)
    tag = util.get_tag(args, NAME, build)

    opts = {
        'image_hub': tag,
        'replicas': args.replicas,
        'pull_policy': util.pull_policy(args),
        'min_read_seconds': args.gentle,
        'smc_db_hosts': args.database_nodes,
        'smc_db_pool': args.database_pool_size,
        'smc_db_concurrent_warn': args.database_concurrent_warn,
        'hub_cpu_request': hub_cpu_request,
        'hub_memory_request': hub_memory_request,
        'rethink_cpu_request': rethink_cpu_request,
        'rethink_memory_request': rethink_memory_request
    }

    if args.database_nodes == 'localhost':
        from argparse import Namespace
        ns = Namespace(tag=args.rethinkdb_proxy_tag, local=False)
        opts['image_rethinkdb_proxy'] = util.get_tag(ns, 'rethinkdb-proxy',
                                                     build)
        filename = 'smc-hub-rethinkdb-proxy.template.yaml'
    else:
        filename = '{name}.template.yaml'.format(name=NAME)
    t = open(join('conf', filename)).read()
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
        r = t.format(**opts)
        #print(r)
        tmp.write(r)
        tmp.flush()
        util.update_deployment(tmp.name)

    if NAME not in util.get_services():
        util.run(['kubectl', 'expose', 'deployment', NAME])
Exemple #8
0
def run_on_kubernetes(args):
    if args.test:
        rethink_cpu_request = hub_cpu_request = '10m'
        rethink_memory_request = hub_memory_request = '200Mi'
    else:
        hub_cpu_request = '300m'
        hub_memory_request = '1Gi'
        rethink_cpu_request = '300m'
        rethink_memory_request = '1Gi'


    util.ensure_secret_exists('sendgrid-api-key', 'sendgrid')
    util.ensure_secret_exists('zendesk-api-key',  'zendesk')
    args.local = False # so tag is for gcloud
    if args.replicas is None:
        args.replicas = util.get_desired_replicas(NAME, 2)
    tag = util.get_tag(args, NAME, build)

    opts = {
        'image_hub'              : tag,
        'replicas'               : args.replicas,
        'pull_policy'            : util.pull_policy(args),
        'min_read_seconds'       : args.gentle,
        'smc_db_hosts'           : args.database_nodes,
        'smc_db_pool'            : args.database_pool_size,
        'smc_db_concurrent_warn' : args.database_concurrent_warn,
        'hub_cpu_request'        : hub_cpu_request,
        'hub_memory_request'     : hub_memory_request,
        'rethink_cpu_request'    : rethink_cpu_request,
        'rethink_memory_request' : rethink_memory_request
    }

    if args.database_nodes == 'localhost':
        from argparse import Namespace
        ns = Namespace(tag=args.rethinkdb_proxy_tag, local=False)
        opts['image_rethinkdb_proxy'] = util.get_tag(ns, 'rethinkdb-proxy', build)
        filename = 'smc-hub-rethinkdb-proxy.template.yaml'
    else:
        filename = '{name}.template.yaml'.format(name=NAME)
    t = open(join('conf', filename)).read()
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
        r = t.format(**opts)
        #print(r)
        tmp.write(r)
        tmp.flush()
        util.update_deployment(tmp.name)

    if NAME not in util.get_services():
        util.run(['kubectl', 'expose', 'deployment', NAME])
Exemple #9
0
def run_on_kubernetes(args):
    args.local = False  # so tag is for gcloud
    if args.replicas is None:
        args.replicas = util.get_desired_replicas(NAME, 2)
    tag = util.get_tag(args, NAME, build)
    t = open(join('conf', '{name}.template.yaml'.format(name=NAME))).read()
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
        tmp.write(
            t.format(image=tag,
                     replicas=args.replicas,
                     pull_policy=util.pull_policy(args)))
        tmp.flush()
        util.update_deployment(tmp.name)
    if NAME not in util.get_services():
        util.run(['kubectl', 'expose', 'deployment', NAME])
Exemple #10
0
def run_on_kubernetes(args):
    if args.test or util.get_current_namespace() == 'test':
        rethink_cpu_request = hub_cpu_request = proxy_cpu_request = '10m'
        rethink_memory_request = hub_memory_request = proxy_memory_request = '200Mi'
    else:
        hub_cpu_request = '500m'
        hub_memory_request = '1Gi'
        proxy_cpu_request = '200m'
        proxy_memory_request = '500Mi'
        rethink_cpu_request = '500m'
        rethink_memory_request = '2Gi'

    util.ensure_secret_exists('sendgrid-api-key', 'sendgrid')
    util.ensure_secret_exists('zendesk-api-key', 'zendesk')
    if args.replicas is None:
        args.replicas = util.get_desired_replicas(NAME, 2)

    opts = {
        'replicas': args.replicas,
        'pull_policy': util.pull_policy(args),
        'min_read_seconds': args.gentle,
        'smc_db_pool': args.database_pool_size,
        'smc_db_concurrent_warn': args.database_concurrent_warn,
        'hub_cpu_request': hub_cpu_request,
        'hub_memory_request': hub_memory_request,
        'proxy_cpu_request': proxy_cpu_request,
        'proxy_memory_request': proxy_memory_request,
        'rethink_cpu_request': rethink_cpu_request,
        'rethink_memory_request': rethink_memory_request
    }
    for image in IMAGES:
        opts['image_{image}'.format(image=image)] = get_tag(args, image)

    from argparse import Namespace
    ns = Namespace(tag=args.rethinkdb_proxy_tag, local=False)
    opts['image_rethinkdb_proxy'] = util.get_tag(ns, 'rethinkdb-proxy')
    filename = 'hub.template.yaml'
    t = open(join('conf', filename)).read()
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
        r = t.format(**opts)
        #print(r)
        tmp.write(r)
        tmp.flush()
        util.update_deployment(tmp.name)

    if NAME not in util.get_services():
        util.run(['kubectl', 'expose', 'deployment', NAME])
Exemple #11
0
    def _get_user_service(self):
        # 用户服务列表, 最少返回默认的列表
        user_service = Apollo(config.APOLLO_SERVERS).user_service(
            self.user.userid)
        user_service = {}.fromkeys([i['code'] for i in user_service] +
                                   config.DEFAULT_SERVICES).keys()

        # 获取版本号
        log.debug('user_agent:%s' %
                  self.req.environ.get('HTTP_USER_AGENT', ''))
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        log.info('version:%s  platform:%s' % (version, platform))
        # 根据版本号和平台获取服务列表
        services = get_services(version, platform)
        services.sort(key=lambda x: x.get('weight', 0), reverse=True)
        scodes = [i['code'] for i in services]

        return [i for i in scodes if i in user_service]
Exemple #12
0
    def GET(self):
        log.debug('user_agent:%s' %
                  self.req.environ.get('HTTP_USER_AGENT', ''))
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        log.info('version:%s  platform:%s' % (version, platform))

        # 获取服务列表
        # 早期版本没有带version
        default = 'middle' if 'version' in self.req.input() else 'origin'
        services = get_services(version, platform, default)
        services.sort(key=lambda x: x.get('weight', 0), reverse=True)

        return self.write(
            success({
                'system_services': services,
                'zip_conf': config.ZIP_CONFIG,
                'activity_conf': config.ACT_CONF,
                'pay_sequence': config.PAY_SEQUENCE,
            }))
Exemple #13
0
def run_on_kubernetes(args):
    create_gcloud_secret()
    context = util.get_cluster_prefix()
    namespace = util.get_current_namespace()
    if len(args.number) == 0:
        # Figure out the nodes based on the names of persistent disks, or just node 0 if none.
        args.number = range(
            max(1, len(get_persistent_disks(context, namespace))))
    if 'storage-projects' not in util.get_services():
        util.run(['kubectl', 'create', '-f', 'conf/service.yaml'])
    args.local = False  # so tag is for gcloud

    tag = util.get_tag(args, NAME, build)
    if not args.tag:
        tag = tag[:tag.rfind(
            '-')]  # get rid of the final -[service] part of the tag.

    t = open(join('conf', '{name}.template.yaml'.format(name=NAME))).read()

    ensure_ssh()
    for number in args.number:
        deployment_name = "{name}{number}".format(name=NAME, number=number)
        ensure_persistent_disk_exists(context, namespace, number, args.size,
                                      args.type)
        with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as tmp:
            tmp.write(
                t.format(image=tag,
                         number=number,
                         gcloud_bucket=gcloud_bucket(namespace=namespace),
                         pd_name=pd_name(context=context,
                                         namespace=namespace,
                                         number=number),
                         health_delay=args.health_delay,
                         pull_policy=util.pull_policy(args)))
            tmp.flush()
            util.update_deployment(tmp.name)
Exemple #14
0
def delete_services():
    services = util.get_services()
    for n in ['cluster', 'driver']:
        s = 'rethinkdb-' + n
        if s in services:
            util.run(['kubectl', 'delete', 'service', s])
Exemple #15
0
    def GET(self):
        all_services = get_services('999999', 'ios')
        fields = ['name', 'code', 'icon']

        return self.write(success([{field : service[field] for field in fields}
                                    for service in all_services]))
Exemple #16
0
def listing(**k):
    return render.listing(get_services())
Exemple #17
0
    def get_user_services(self, pos='all', addon=None, limit=None):
        '''
        获取用户功能列表
        参数:
            pos all:全部功能 home_page:首页 head: 头部
            addon 功能多加载的数据
            limit 限制数量
        '''
        userid = int(self.user.userid)
        language = self.get_language()

        # 获取用户的信息
        user = apcli('findUserBriefById', userid)
        if not user:
            raise ThirdError('商户不存在')
        user = user.__dict__
        self._user = user

        # 获取用户的登录角色
        user_cate = self.get_user_cate()

        # 获取渠道配置
        qd_conf = get_qd_conf()

        # 用户服务列表
        groupid = user['groupid']
        default_services = get_qd_conf_value(userid,
                                             'default',
                                             'service',
                                             groupid=groupid,
                                             default=config.DEFAULT_SERVICES,
                                             qd_confs=qd_conf)
        user_service = apcli.user_service(userid)
        self._user_service = {i['code']
                              for i in user_service} | set(default_services)

        # 根据版本号和平台获取服务列表
        version, platform = get_app_info(
            self.req.environ.get('HTTP_USER_AGENT', ''))
        log.info('user_agent:%s version:%s  platform:%s userid:%s' %
                 (self.req.environ.get('HTTP_USER_AGENT',
                                       ''), version, platform, userid))
        sys_services = get_qd_conf_value(userid,
                                         'services',
                                         'service',
                                         groupid=groupid,
                                         default=config.SYSTEM_SERVICES,
                                         qd_confs=qd_conf)
        must_addon = [
            'recharge_link', 'group_link', 'condition', 'dis_groupids',
            'nodis_groupids', 'dis_service', 'dis_condition', 'show_cate'
        ]
        addon = (addon or []) + must_addon
        services = get_services(version,
                                platform,
                                addon=addon,
                                sys_services=sys_services)

        # 调整返回值
        ret = []
        payinfo = None
        user_open_service = {i['code'] for i in user_service}
        for service in services:
            # 若不满足条件, 直接跳过
            if service['code'] not in self._user_service:
                continue

            # 指定角色才展示
            show_cates = service.pop('show_cate') or [
                'merchant', 'submerchant'
            ]
            if user_cate not in show_cates:
                continue

            # 显示位置判断
            tpos = service.pop('pos') or ['all']
            if pos not in tpos:
                continue

            dis_condition = service.pop('dis_condition', None)
            if dis_condition:
                try:
                    if not eval(
                            dis_condition,
                        {
                            'user': user,
                            'user_open': service['code'] in user_open_service
                        }):
                        continue
                except:
                    log.warn(traceback.format_exc())
                    continue

            # 条件
            condition = service.pop('condition', None)

            # 渠道link
            group_link = service.pop('group_link', None)  # 渠道link

            # 根据grouid配置是否展示
            dis_groupids = service.pop('dis_groupids') or config.QF_GROUPIDS
            nodis_groupids = service.pop(
                'nodis_groupids') or config.QF_GROUPIDS

            # 付费后的链接
            recharge_link = service.pop('recharge_link', None)

            # 余额提现链接
            dis_service = service.pop('dis_service', '')

            # 根据条件判断
            if condition:
                # 如果指定服务存在将不展示
                if ('dis_service' in condition
                        and dis_service in self._user_service):
                    continue

                # 根据渠道判断
                # 白牌渠道不展示
                if 'group_dis' in condition:
                    if groupid in qd_conf:
                        continue

                # 根据渠道id来控制展示
                if 'group_control' in condition:
                    if groupid not in dis_groupids:
                        continue

                # 根据渠道id来控制展示
                if 'nogroup_control' in condition:
                    if groupid in nodis_groupids:
                        continue

                # 白牌渠道link
                if 'group_link' in condition:
                    if groupid in qd_conf:
                        service['link'] = group_link

                # 开通点餐服务
                if 'diancan_service' in condition:
                    if payinfo is None:
                        payinfo = get_mchnt_paying(userid, code='diancan')
                    if payinfo and str(payinfo['expire_time']) > time.strftime(
                            DATETIME_FMT):
                        service['link'] = recharge_link

            # 链接带上参数
            service['link'] = service['link'].format(**user)

            # name根据语言可控制
            if 'name' in service:
                service['name'] = get_constant(service['name'], language)

            ret.append(service)

        return ret[:limit]
Exemple #18
0
def expose():
    if NAME not in util.get_services():
        util.run(['kubectl', 'expose', 'deployment', NAME, '--type=LoadBalancer'])
        print("Type 'kubectl get services haproxy' in about 2 minutes to see the external IP address.")
Exemple #19
0
def listing(**k):
    return render.listing(get_services())
Exemple #20
0
def delete_services():
    services = util.get_services()
    for n in ['cluster', 'driver']:
        s = 'rethinkdb-' + n
        if s in services:
            util.run(['kubectl', 'delete', 'service', s])