Source code for nephos.deploy

#! /usr/bin/env python

#   Copyright [2018] [Alejandro Vicente Grabovetsky via AID:Tech]
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at#
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

import json

import click
from blessings import Terminal

from nephos.runners import (
    runner_ca,
    runner_composer,
    runner_composer_up,
    runner_crypto,
    runner_deploy,
    runner_fabric,
    runner_orderer,
    runner_peer,
)

from nephos.fabric.settings import load_config


TERM = Terminal()


[docs]class Settings(object): def __init__(self, settings_file, upgrade, verbose): self.settings_file = settings_file self.upgrade = upgrade self.verbose = verbose
pass_settings = click.make_pass_decorator(Settings, ensure=True) @click.group( help=TERM.green("Nephos helps you install Hyperledger Fabric on Kubernetes") ) @click.option( "--settings_file", "-f", required=True, help=TERM.cyan("YAML file containing HLF options"), ) @click.option( "--upgrade", "-u", is_flag=True, default=False, help=TERM.cyan("Do we wish to upgrade already installed components?"), ) @click.option( "--verbose/--quiet", "-v/-q", default=False, help=TERM.cyan("Do we want verbose output?"), ) @click.pass_context def cli(ctx, settings_file, upgrade, verbose): ctx.obj = Settings(settings_file, upgrade, verbose) @cli.command(help=TERM.cyan("Install Hyperledger Fabric Certificate Authorities")) @pass_settings def cert_auth(settings): opts = load_config(settings.settings_file) runner_ca(opts, upgrade=settings.upgrade, verbose=settings.verbose) @cli.command(help=TERM.cyan("Install Hyperledger Composer")) @pass_settings def composer(settings): opts = load_config(settings.settings_file) runner_composer(opts, upgrade=settings.upgrade, verbose=settings.verbose) @cli.command(help=TERM.cyan("Upgrade Hyperledger Composer")) @pass_settings def composer_up(settings): opts = load_config(settings.settings_file) runner_composer_up(opts, verbose=settings.verbose) @cli.command(help=TERM.cyan("Obtain cryptographic materials from CAs")) @pass_settings def crypto(settings): opts = load_config(settings.settings_file) runner_crypto(opts, verbose=settings.verbose) # TODO: Can we compose several CLI commands here to avoid copied code? @cli.command(help=TERM.cyan("Install end-to-end Fabric/Composer network")) @pass_settings def deploy(settings): opts = load_config(settings.settings_file) runner_deploy(opts, upgrade=settings.upgrade, verbose=settings.verbose) @cli.command(help=TERM.cyan("Install end-to-end Hyperledger Fabric network")) @pass_settings def fabric(settings): opts = load_config(settings.settings_file) runner_fabric(opts, upgrade=settings.upgrade, verbose=settings.verbose) @cli.command(help=TERM.cyan("Install Hyperledger Fabric Orderers")) @pass_settings def orderer(settings): opts = load_config(settings.settings_file) runner_orderer(opts, upgrade=settings.upgrade, verbose=settings.verbose) @cli.command(help=TERM.cyan("Install Hyperledger Fabric Peers")) @pass_settings def peer(settings): opts = load_config(settings.settings_file) runner_peer(opts, upgrade=settings.upgrade, verbose=settings.verbose) @cli.command(help=TERM.cyan('Load "nephos" settings YAML file')) @pass_settings def settings(settings): data = load_config(settings.settings_file) print("Settings successfully loaded...\n") if settings.verbose: # TODO: Pretty print & colorise output print(json.dumps(data, indent=4)) if __name__ == "__main__": # pragma: no cover cli(obj={})