# -*- coding: utf-8 -*-
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
"""
This module contains X Ray Smart Advice local utility main run function
"""
import sys
import os
from xray.adviser.cli_api import SmartAdviceUtil
from xray.adviser.awp_provision_api import AWPProvisionAPI
from xray.console_utils.cmdline_parser import (
cmd_parser_adviser,
parse_cmd_arguments
)
from xray.console_utils.validations import validate_adviser
from xray.internal.constants import adviser_log
from xray.internal.exceptions import XRayError
from xray.internal.user_plugin_utils import root_execution_only_check
from xray.internal.utils import configure_logging
from xray.internal.user_plugin_utils import get_xray_exec_user
awp_provision_commands = ['awp-cdn-get-pullzone',
'awp-cdn-remove-pullzone',
'awp-cdn-purge',
'awp-sync',
'get-cdn-usage']
def run():
"""
X Ray Smart Advice run function
"""
root_execution_only_check()
configure_logging(adviser_log)
raw_args = parse_cmd_arguments(cmd_parser_adviser())
args = validate_adviser(raw_args.__dict__)
try:
sa = SmartAdviceUtil()
if args.command == 'list':
result = sa.advice_list(extended=args.extends)
elif args.command == 'sites-status':
# because from user plugin UI it works via XRAYEXEC_UID envvar
username = args.username or get_xray_exec_user()
if not username:
print('parameter --username must be specified')
sys.exit(1)
result = sa.get_site_statuses(username=username)
elif args.command == 'details':
result = sa.advice_details(args.advice_id)
elif args.command == 'apply':
result = sa.manage_advice('apply', args.advice_id,
ignore_errors=args.ignore_errors,
async_mode=args.async_mode,
source=args.source,
accept_terms=args.accept_license_terms,
analytics_data=args.analytics_data)
elif args.command == 'rollback':
result = sa.manage_advice('rollback', args.advice_id,
async_mode=args.async_mode,
source=args.source,
reason=args.reason,
analytics_data=args.analytics_data)
elif args.command == 'counters':
result = sa.advice_counters()
elif args.command == 'status':
result = sa.manage_advice_status(args.advice_id)
elif args.command == 'subscription':
result = sa.create_subscription(args.advice_id)
elif args.command == 'wordpress-plugin-install':
result = sa.sync_advices_wordpress_plugin()
elif args.command == 'agreement':
result = sa.get_agreement_text(feature=args.text)
elif args.command == 'get-options':
username = args.username or get_xray_exec_user()
if not username:
print('parameter --username must be specified')
sys.exit(1)
result = sa.get_options(username=username)
elif args.command in awp_provision_commands:
awp_cli = AWPProvisionAPI()
if not args.account_id and not args.username and not os.environ.get('XRAYEXEC_UID'):
print('parameter --account_id or --username must be specified')
sys.exit(1)
original_url = ''
# domain is required parameter for commands which needs original_url
if hasattr(args, 'domain'):
original_url = args.domain
if original_url:
from clwpos.constants import PULLZONE_DOMAIN_PROTOCOL
if not original_url.startswith(PULLZONE_DOMAIN_PROTOCOL):
original_url = f'{PULLZONE_DOMAIN_PROTOCOL}{args.domain}'
if args.command == 'awp-cdn-get-pullzone':
result = awp_cli.get_pullzone(account_id=args.account_id, domain=original_url,
website=args.website, username=args.username)
elif args.command == 'awp-cdn-remove-pullzone':
result = awp_cli.remove_pullzone(account_id=args.account_id, domain=original_url,
website=args.website, username=args.username)
elif args.command == 'awp-cdn-purge':
result = awp_cli.purge_cdn_cache(account_id=args.account_id, domain=original_url,
website=args.website, username=args.username)
elif args.command == 'awp-sync':
result = awp_cli.sync_account(args.account_id, username=args.username)
elif args.command == 'get-cdn-usage':
result = awp_cli.get_usage(args.account_id, username=args.username)
else:
raise SystemExit('Unknown action')
else:
raise SystemExit('Unknown action')
if result:
print(result)
except XRayError as e:
print(e)
sys.exit(1)
|