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." )
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)
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)
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)
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])
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])
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])
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])
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])
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])
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]
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, }))
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)
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])
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]))
def listing(**k): return render.listing(get_services())
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]
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.")
def listing(**k): return render.listing(get_services())
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])