def install_amqpinflux(): amqpinflux_rpm_source_url = \ ctx_properties['amqpinflux_rpm_source_url'] # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ['INFLUXDB_ENDPOINT_IP'] rabbit_props = utils.ctx_factory.get('rabbitmq') ctx.instance.runtime_properties['rabbitmq_endpoint_ip'] = \ utils.get_rabbitmq_endpoint_ip() ctx.instance.runtime_properties['rabbitmq_username'] = \ rabbit_props.get('rabbitmq_username') ctx.instance.runtime_properties['rabbitmq_password'] = \ rabbit_props.get('rabbitmq_password') ctx.instance.runtime_properties['rabbitmq_ssl_enabled'] = True amqpinflux_venv = '{0}/env'.format(HOME_DIR) ctx.logger.info('Installing AQMPInflux...') utils.set_selinux_permissive() utils.copy_notice(SERVICE_NAME) utils.mkdir(HOME_DIR) utils.yum_install(amqpinflux_rpm_source_url, service_name=SERVICE_NAME) _install_optional(amqpinflux_venv) ctx.logger.info('Configuring AMQPInflux...') utils.create_service_user(AMQPINFLUX_USER, AMQPINFLUX_GROUP, HOME_DIR) ctx.instance.runtime_properties['broker_cert_path'] = \ utils.INTERNAL_CERT_PATH utils.chown(AMQPINFLUX_USER, AMQPINFLUX_GROUP, HOME_DIR) utils.systemd.configure(SERVICE_NAME)
def create_cloudify_user(): utils.create_service_user( user=utils.CLOUDIFY_USER, group=utils.CLOUDIFY_GROUP, home=utils.CLOUDIFY_HOME_DIR ) utils.mkdir(utils.CLOUDIFY_HOME_DIR)
def install_amqpinflux(): amqpinflux_rpm_source_url = \ ctx.node.properties['amqpinflux_rpm_source_url'] # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ['INFLUXDB_ENDPOINT_IP'] ctx.instance.runtime_properties['rabbitmq_endpoint_ip'] = \ utils.get_rabbitmq_endpoint_ip() amqpinflux_user = '******' amqpinflux_group = 'amqpinflux' amqpinflux_venv = '{0}/env'.format(AMQPINFLUX_HOME) ctx.logger.info('Installing AQMPInflux...') utils.set_selinux_permissive() utils.copy_notice('amqpinflux') utils.mkdir(AMQPINFLUX_HOME) utils.yum_install(amqpinflux_rpm_source_url) _install_optional(amqpinflux_venv) utils.create_service_user(amqpinflux_user, AMQPINFLUX_HOME) _deploy_broker_configuration(amqpinflux_group) ctx.logger.info('Fixing permissions...') utils.chown(amqpinflux_user, amqpinflux_group, AMQPINFLUX_HOME) utils.systemd.configure('amqpinflux')
def install_webui(): nodejs_source_url = ctx.node.properties['nodejs_tar_source_url'] webui_source_url = ctx.node.properties['webui_tar_source_url'] grafana_source_url = ctx.node.properties['grafana_tar_source_url'] # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ.get('INFLUXDB_ENDPOINT_IP') nodejs_home = '/opt/nodejs' webui_home = '/opt/cloudify-ui' webui_log_path = '/var/log/cloudify/webui' grafana_home = '{0}/grafana'.format(webui_home) webui_user = '******' webui_group = 'webui' ctx.logger.info('Installing Cloudify\'s WebUI...') utils.set_selinux_permissive() utils.copy_notice('webui') utils.mkdir(nodejs_home) utils.mkdir(webui_home) utils.mkdir('{0}/backend'.format(webui_home)) utils.mkdir(webui_log_path) utils.mkdir(grafana_home) utils.create_service_user(webui_user, webui_home) ctx.logger.info('Installing NodeJS...') nodejs = utils.download_file(nodejs_source_url) utils.untar(nodejs, nodejs_home) ctx.logger.info('Installing Cloudify\'s WebUI...') webui = utils.download_file(webui_source_url) utils.untar(webui, webui_home) ctx.logger.info('Installing Grafana...') grafana = utils.download_file(grafana_source_url) utils.untar(grafana, grafana_home) ctx.logger.info('Deploying WebUI Configuration...') utils.deploy_blueprint_resource( '{0}/gsPresets.json'.format(CONFIG_PATH), '{0}/backend/gsPresets.json'.format(webui_home)) ctx.logger.info('Deploying Grafana Configuration...') utils.deploy_blueprint_resource( '{0}/grafana_config.js'.format(CONFIG_PATH), '{0}/config.js'.format(grafana_home)) ctx.logger.info('Fixing permissions...') utils.chown(webui_user, webui_group, webui_home) utils.chown(webui_user, webui_group, nodejs_home) utils.chown(webui_user, webui_group, webui_log_path) utils.logrotate('webui') utils.systemd.configure('webui')
def install_riemann(): langohr_source_url = ctx_properties['langohr_jar_source_url'] daemonize_source_url = ctx_properties['daemonize_rpm_source_url'] riemann_source_url = ctx_properties['riemann_rpm_source_url'] utils.create_service_user(user=RIEMANN_USER, group=RIEMANN_GROUP, home=utils.CLOUDIFY_HOME_DIR) riemann_config_path = '/etc/riemann' riemann_log_path = '/var/log/cloudify/riemann' langohr_home = '/opt/lib' extra_classpath = '{0}/langohr.jar'.format(langohr_home) riemann_dir = '/opt/riemann' # Confirm username and password have been supplied for broker before # continuing. # Components other than logstash and riemann have this handled in code. # Note that these are not directly used in this script, but are used by the # deployed resources, hence the check here. rabbitmq_username = ctx_properties['rabbitmq_username'] rabbitmq_password = ctx_properties['rabbitmq_password'] if not rabbitmq_username or not rabbitmq_password: ctx.abort_operation( 'Both rabbitmq_username and rabbitmq_password must be supplied ' 'and at least 1 character long in the manager blueprint inputs.') runtime_props['rabbitmq_endpoint_ip'] = utils.get_rabbitmq_endpoint_ip() ctx.logger.info('Installing Riemann...') utils.set_selinux_permissive() utils.copy_notice(RIEMANN_SERVICE_NAME) utils.mkdir(riemann_log_path) utils.mkdir(langohr_home) utils.mkdir(riemann_config_path) utils.mkdir('{0}/conf.d'.format(riemann_config_path)) # utils.chown cannot be used as it will change both user and group utils.sudo(['chown', RIEMANN_USER, riemann_dir]) langohr = utils.download_cloudify_resource(langohr_source_url, RIEMANN_SERVICE_NAME) utils.sudo(['cp', langohr, extra_classpath]) ctx.logger.info('Applying Langohr permissions...') utils.sudo(['chmod', '644', extra_classpath]) utils.yum_install(daemonize_source_url, service_name=RIEMANN_SERVICE_NAME) utils.yum_install(riemann_source_url, service_name=RIEMANN_SERVICE_NAME) utils.chown(RIEMANN_USER, RIEMANN_GROUP, riemann_log_path) utils.logrotate(RIEMANN_SERVICE_NAME) files_to_remove = [ riemann_config_path, riemann_log_path, extra_classpath, riemann_dir ] runtime_props['files_to_remove'] = files_to_remove
def _install_stage(): nodejs_source_url = ctx_properties['nodejs_tar_source_url'] stage_source_url = ctx_properties['stage_tar_source_url'] if not utils.resource_factory.local_resource_exists(stage_source_url): ctx.logger.info('Stage package not found in manager resources ' 'package. Stage will not be installed.') ctx.instance.runtime_properties['skip_installation'] = 'true' return # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ.get('INFLUXDB_ENDPOINT_IP') utils.set_selinux_permissive() utils.copy_notice(SERVICE_NAME) utils.mkdir(NODEJS_DIR) utils.mkdir(HOME_DIR) utils.mkdir(LOG_DIR) utils.create_service_user(STAGE_USER, STAGE_GROUP, HOME_DIR) ctx.logger.info('Installing NodeJS...') nodejs = utils.download_cloudify_resource(nodejs_source_url, SERVICE_NAME) utils.untar(nodejs, NODEJS_DIR) utils.remove(nodejs) ctx.logger.info('Installing Cloudify Stage (UI)...') stage_tar = utils.download_cloudify_resource(stage_source_url, SERVICE_NAME) utils.untar(stage_tar, HOME_DIR) utils.remove(stage_tar) ctx.logger.info('Fixing permissions...') utils.chown(STAGE_USER, STAGE_GROUP, HOME_DIR) utils.chown(STAGE_USER, STAGE_GROUP, NODEJS_DIR) utils.chown(STAGE_USER, STAGE_GROUP, LOG_DIR) utils.deploy_sudo_command_script( 'restore-snapshot.py', 'Restore stage directories from a snapshot path', component=SERVICE_NAME, allow_as=STAGE_USER) utils.chmod('a+rx', '/opt/cloudify/stage/restore-snapshot.py') utils.logrotate(SERVICE_NAME) utils.systemd.configure(SERVICE_NAME) backend_dir = join(HOME_DIR, 'backend') npm_path = join(NODEJS_DIR, 'bin', 'npm') subprocess.check_call( 'cd {0}; {1} run db-migrate'.format(backend_dir, npm_path), shell=True)
def _install_stage(): nodejs_source_url = ctx_properties['nodejs_tar_source_url'] stage_source_url = ctx_properties['stage_tar_source_url'] if not utils.resource_factory.local_resource_exists(stage_source_url): ctx.logger.info('Stage package not found in manager resources ' 'package. Stage will not be installed.') ctx.instance.runtime_properties['skip_installation'] = 'true' return # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ.get('INFLUXDB_ENDPOINT_IP') utils.set_selinux_permissive() utils.copy_notice(SERVICE_NAME) utils.mkdir(NODEJS_DIR) utils.mkdir(HOME_DIR) utils.mkdir(LOG_DIR) utils.create_service_user(STAGE_USER, STAGE_GROUP, HOME_DIR) ctx.logger.info('Installing NodeJS...') nodejs = utils.download_cloudify_resource(nodejs_source_url, SERVICE_NAME) utils.untar(nodejs, NODEJS_DIR) utils.remove(nodejs) ctx.logger.info('Installing Cloudify Stage (UI)...') stage_tar = utils.download_cloudify_resource(stage_source_url, SERVICE_NAME) utils.untar(stage_tar, HOME_DIR) utils.remove(stage_tar) ctx.logger.info('Fixing permissions...') utils.chown(STAGE_USER, STAGE_GROUP, HOME_DIR) utils.chown(STAGE_USER, STAGE_GROUP, NODEJS_DIR) utils.chown(STAGE_USER, STAGE_GROUP, LOG_DIR) utils.deploy_sudo_command_script( 'restore-snapshot.py', 'Restore stage directories from a snapshot path', component=SERVICE_NAME, allow_as=STAGE_USER) utils.chmod('a+rx', '/opt/cloudify/stage/restore-snapshot.py') utils.logrotate(SERVICE_NAME) utils.systemd.configure(SERVICE_NAME) backend_dir = join(HOME_DIR, 'backend') npm_path = join(NODEJS_DIR, 'bin', 'npm') subprocess.check_call('cd {0}; {1} run db-migrate'.format( backend_dir, npm_path), shell=True)
def _install_composer(): composer_source_url = ctx_properties['composer_tar_source_url'] if not utils.resource_factory.local_resource_exists(composer_source_url): ctx.logger.info('Composer package not found in manager resources ' 'package. Composer will not be installed.') ctx.instance.runtime_properties['skip_installation'] = 'true' return utils.set_selinux_permissive() utils.copy_notice(SERVICE_NAME) utils.mkdir(NODEJS_DIR) utils.mkdir(HOME_DIR) utils.mkdir(LOG_DIR) utils.create_service_user(COMPOSER_USER, COMPOSER_GROUP, HOME_DIR) # adding cfyuser to the composer group so that its files are r/w for # replication and snapshots (restart of mgmtworker necessary for change # to take effect) utils.sudo(['usermod', '-aG', COMPOSER_GROUP, utils.CLOUDIFY_USER]) # This makes sure that the composer folders will be writable after # snapshot restore utils.sudo(['usermod', '-aG', utils.CLOUDIFY_GROUP, COMPOSER_USER]) utils.systemd.restart('mgmtworker') ctx.logger.info('Installing Cloudify Composer...') composer_tar = utils.download_cloudify_resource(composer_source_url, SERVICE_NAME) utils.untar(composer_tar, HOME_DIR) utils.remove(composer_tar) ctx.logger.info('Fixing permissions...') utils.chown(COMPOSER_USER, COMPOSER_GROUP, HOME_DIR) utils.chown(COMPOSER_USER, COMPOSER_GROUP, LOG_DIR) utils.chmod('g+w', CONF_DIR) utils.chmod('g+w', dirname(CONF_DIR)) utils.logrotate(SERVICE_NAME) utils.systemd.configure(SERVICE_NAME) npm_path = join(NODEJS_DIR, 'bin', 'npm') subprocess.check_call('cd {}; {} run db-migrate'.format( HOME_DIR, npm_path), shell=True)
def install_stage(): nodejs_source_url = ctx_properties['nodejs_tar_source_url'] stage_source_url = ctx_properties['stage_tar_source_url'] # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ.get('INFLUXDB_ENDPOINT_IP') nodejs_home = '/opt/nodejs' stage_home = '/opt/cloudify-stage' stage_log_path = '/var/log/cloudify/stage' stage_user = '******' stage_group = 'stage' utils.set_selinux_permissive() utils.copy_notice(STAGE_SERVICE_NAME) utils.mkdir(nodejs_home) utils.mkdir(stage_home) utils.mkdir(stage_log_path) utils.create_service_user(stage_user, stage_home) ctx.logger.info('Installing NodeJS...') nodejs = utils.download_cloudify_resource(nodejs_source_url, STAGE_SERVICE_NAME) utils.untar(nodejs, nodejs_home) ctx.logger.info('Installing Cloudify Stage (UI)...') stage = utils.download_cloudify_resource(stage_source_url, STAGE_SERVICE_NAME) utils.untar(stage, stage_home) ctx.logger.info('Fixing permissions...') utils.chown(stage_user, stage_group, stage_home) utils.chown(stage_user, stage_group, nodejs_home) utils.chown(stage_user, stage_group, stage_log_path) utils.logrotate(STAGE_SERVICE_NAME) utils.systemd.configure(STAGE_SERVICE_NAME)
def _install_stage(): nodejs_source_url = ctx_properties['nodejs_tar_source_url'] stage_source_url = ctx_properties['stage_tar_source_url'] if not utils.resource_factory.local_resource_exists(stage_source_url): ctx.logger.info('Stage package not found in manager resources ' 'package. Stage will not be installed.') ctx.instance.runtime_properties['skip_installation'] = 'true' return # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ.get('INFLUXDB_ENDPOINT_IP') utils.set_selinux_permissive() utils.copy_notice(SERVICE_NAME) utils.mkdir(NODEJS_DIR) utils.mkdir(HOME_DIR) utils.mkdir(LOG_DIR) utils.create_service_user(STAGE_USER, STAGE_GROUP, HOME_DIR) ctx.logger.info('Installing NodeJS...') nodejs = utils.download_cloudify_resource(nodejs_source_url, SERVICE_NAME) utils.untar(nodejs, NODEJS_DIR) utils.remove(nodejs) ctx.logger.info('Installing Cloudify Stage (UI)...') stage_tar = utils.download_cloudify_resource(stage_source_url, SERVICE_NAME) utils.untar(stage_tar, HOME_DIR) utils.remove(stage_tar) ctx.logger.info('Fixing permissions...') utils.chown(STAGE_USER, STAGE_GROUP, HOME_DIR) utils.chown(STAGE_USER, STAGE_GROUP, NODEJS_DIR) utils.chown(STAGE_USER, STAGE_GROUP, LOG_DIR) utils.logrotate(SERVICE_NAME) utils.systemd.configure(SERVICE_NAME)
def install_amqpinflux(): amqpinflux_rpm_source_url = \ ctx_properties['amqpinflux_rpm_source_url'] # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ['INFLUXDB_ENDPOINT_IP'] rabbit_props = utils.ctx_factory.get('rabbitmq') ctx.instance.runtime_properties['rabbitmq_endpoint_ip'] = \ utils.get_rabbitmq_endpoint_ip( rabbit_props.get('rabbitmq_endpoint_ip')) ctx.instance.runtime_properties['rabbitmq_username'] = \ rabbit_props.get('rabbitmq_username') ctx.instance.runtime_properties['rabbitmq_password'] = \ rabbit_props.get('rabbitmq_password') ctx.instance.runtime_properties['rabbitmq_ssl_enabled'] = \ rabbit_props.get('rabbitmq_ssl_enabled') amqpinflux_user = '******' amqpinflux_group = 'amqpinflux' amqpinflux_venv = '{0}/env'.format(AMQPINFLUX_HOME) ctx.logger.info('Installing AQMPInflux...') utils.set_selinux_permissive() utils.copy_notice(AMQPINFLUX_SERVICE_NAME) utils.mkdir(AMQPINFLUX_HOME) utils.yum_install(amqpinflux_rpm_source_url, service_name=AMQPINFLUX_SERVICE_NAME) _install_optional(amqpinflux_venv) utils.create_service_user(amqpinflux_user, AMQPINFLUX_HOME) _deploy_broker_configuration(amqpinflux_group) ctx.logger.info('Fixing permissions...') utils.chown(amqpinflux_user, amqpinflux_group, AMQPINFLUX_HOME) utils.systemd.configure(AMQPINFLUX_SERVICE_NAME)
def create_cloudify_user(): utils.create_service_user(user=utils.CLOUDIFY_USER, group=utils.CLOUDIFY_GROUP, home=utils.CLOUDIFY_HOME_DIR) utils.mkdir(utils.CLOUDIFY_HOME_DIR)
def _install_stage(): nodejs_source_url = ctx_properties['nodejs_tar_source_url'] stage_source_url = ctx_properties['stage_tar_source_url'] if not utils.resource_factory.local_resource_exists(stage_source_url): ctx.logger.info('Stage package not found in manager resources ' 'package. Stage will not be installed.') ctx.instance.runtime_properties['skip_installation'] = 'true' return # injected as an input to the script ctx.instance.runtime_properties['influxdb_endpoint_ip'] = \ os.environ.get('INFLUXDB_ENDPOINT_IP') utils.set_selinux_permissive() utils.copy_notice(SERVICE_NAME) utils.mkdir(NODEJS_DIR) utils.mkdir(HOME_DIR) utils.mkdir(LOG_DIR) utils.mkdir(RESOURCES_DIR) utils.create_service_user(STAGE_USER, STAGE_GROUP, HOME_DIR) ctx.logger.info('Installing NodeJS...') nodejs = utils.download_cloudify_resource(nodejs_source_url, SERVICE_NAME) utils.untar(nodejs, NODEJS_DIR) utils.remove(nodejs) ctx.logger.info('Installing Cloudify Stage (UI)...') stage_tar = utils.download_cloudify_resource(stage_source_url, SERVICE_NAME) if 'community' in stage_tar: ctx.logger.info('Community edition') ctx.instance.runtime_properties['community_mode'] = '-mode community' else: ctx.instance.runtime_properties['community_mode'] = '' utils.untar(stage_tar, HOME_DIR) utils.remove(stage_tar) ctx.logger.info('Fixing permissions...') utils.chown(STAGE_USER, STAGE_GROUP, HOME_DIR) utils.chown(STAGE_USER, STAGE_GROUP, NODEJS_DIR) utils.chown(STAGE_USER, STAGE_GROUP, LOG_DIR) configure_script( 'restore-snapshot.py', 'Restore stage directories from a snapshot path', ) configure_script( 'make-auth-token.py', 'Update auth token for stage user', ) # Allow snapshot restores to restore token utils.allow_user_to_sudo_command( '/opt/manager/env/bin/python', 'Snapshot update auth token for stage user', allow_as=STAGE_USER, ) subprocess.check_call([ 'sudo', '-u', 'stage_user', '/opt/manager/env/bin/python', '/opt/cloudify/stage/make-auth-token.py', ]) utils.logrotate(SERVICE_NAME) utils.systemd.configure(SERVICE_NAME) backend_dir = join(HOME_DIR, 'backend') npm_path = join(NODEJS_DIR, 'bin', 'npm') subprocess.check_call('cd {0}; {1} run db-migrate'.format( backend_dir, npm_path), shell=True)
def install_riemann(): langohr_source_url = ctx_properties['langohr_jar_source_url'] daemonize_source_url = ctx_properties['daemonize_rpm_source_url'] riemann_source_url = ctx_properties['riemann_rpm_source_url'] rabbitmq_username = ctx_properties['rabbitmq_username'] rabbitmq_password = ctx_properties['rabbitmq_password'] utils.create_service_user( user=RIEMANN_USER, group=RIEMANN_GROUP, home=utils.CLOUDIFY_HOME_DIR ) riemann_config_path = '/etc/riemann' riemann_log_path = '/var/log/cloudify/riemann' langohr_home = '/opt/lib' extra_classpath = '{0}/langohr.jar'.format(langohr_home) riemann_dir = '/opt/riemann' # Confirm username and password have been supplied for broker before # continuing. # Components other than logstash and riemann have this handled in code. # Note that these are not directly used in this script, but are used by the # deployed resources, hence the check here. if not rabbitmq_username or not rabbitmq_password: ctx.abort_operation( 'Both rabbitmq_username and rabbitmq_password must be supplied ' 'and at least 1 character long in the manager blueprint inputs.') rabbit_props = utils.ctx_factory.get('rabbitmq') runtime_props['rabbitmq_endpoint_ip'] = utils.get_rabbitmq_endpoint_ip() runtime_props['rabbitmq_username'] = rabbit_props.get('rabbitmq_username') runtime_props['rabbitmq_password'] = rabbit_props.get('rabbitmq_password') ctx.logger.info('Installing Riemann...') utils.set_selinux_permissive() utils.copy_notice(RIEMANN_SERVICE_NAME) utils.mkdir(riemann_log_path) utils.mkdir(langohr_home) utils.mkdir(riemann_config_path) utils.mkdir('{0}/conf.d'.format(riemann_config_path)) # utils.chown cannot be used as it will change both user and group utils.sudo(['chown', RIEMANN_USER, riemann_dir]) langohr = utils.download_cloudify_resource(langohr_source_url, RIEMANN_SERVICE_NAME) utils.sudo(['cp', langohr, extra_classpath]) ctx.logger.info('Applying Langohr permissions...') utils.sudo(['chmod', '644', extra_classpath]) utils.yum_install(daemonize_source_url, service_name=RIEMANN_SERVICE_NAME) utils.yum_install(riemann_source_url, service_name=RIEMANN_SERVICE_NAME) utils.chown(RIEMANN_USER, RIEMANN_GROUP, riemann_log_path) utils.logrotate(RIEMANN_SERVICE_NAME) files_to_remove = [riemann_config_path, riemann_log_path, extra_classpath, riemann_dir] runtime_props['files_to_remove'] = files_to_remove