Example #1
0
def _create_conf_secret(namespace):
    env_parser = EnvParser(namespace)
    conf_data = _build_test_conf(env_parser)
    encoded_conf = base64.b64encode(yaml.dump(conf_data).encode()).decode()
    secret = {
        "apiVersion": "v1",
        "kind": "Secret",
        "metadata": {"name": SECRET_NAME},
        "data": {"settings.local.yaml": encoded_conf,},
    }
    oc("create", f="-", n=namespace, _in=json.dumps(secret))
Example #2
0
    def __init__(self, env_config, silent=True):
        if not silent:
            load_logging_config()

        self.envParser = EnvParser(env_config)

        if self.envParser.ip4_prefix:
            self.prefix = IpPrefixes(ip4_prefix=self.envParser.ip4_prefix)
        else:
            self.prefix = IpPrefixes(ip6_prefix=self.envParser.ip6_prefix)

        self.nodes = {}  # pc nodes
        self.networks = []  # switches nodes

        # create emulator instance for creating sessions and utility methods
        self.coreemu = CoreEmu()
        self.session = self.coreemu.create_session()

        # must be in configuration state for nodes to start, when using "node_add" below
        self.session.set_state(EventTypes.CONFIGURATION_STATE)

        # create nodes
        for node in self.envParser.nodes:
            self.nodes[int(node["id"])] = {"obj": self.session.add_node(_type=NodeTypes.DEFAULT), "nets": [],
                                           "ip": None, "curr_net": None}

        # create networks
        for net in self.envParser.networks:
            self.networks.append(self.session.add_node(_type=NodeTypes.SWITCH))
            for node in net["nodes"]:
                interface = self.prefix.create_interface(self.nodes[node["id"]]["obj"],
                                                         name=self.envParser.dev_prefix + str(net["id"]))
                self.nodes[node["id"]]["ip"] = self.prefix.ip4_address(self.nodes[node["id"]]["obj"])
                self.session.add_link(self.nodes[node["id"]]["obj"].id, self.networks[-1].id, interface_one=interface)
                self.nodes[node["id"]]["nets"].append({
                    "net": net["id"]
                })
        # certs
        shutil.rmtree('certs', True)
        self.__create_root_ca()
        for node in self.nodes:
            self.__create_node_cert(node)
        # instantiate session
        self.start()
        exit(100)

    def stop_instance(self):
        ec2_instance_id = self.ec2_instance_data['InstanceId']
        self.client.stop_instances(InstanceIds=[ec2_instance_id])

    def exec_command(self, command):
        stdin, stdout, stderr = self.ssh_client.exec_command(command)
        stdin.close()
        for line in iter(lambda: stdout.readline(2048), ""):
            print(line, end="")


if __name__ == "__main__":
    # Takes configuration from config.ini
    envParser = EnvParser()
    awsEc2Manager = AwsEc2Manager(envParser.AWS_INSTANCE_NAME,
                                  envParser.EC2_SSH_PRIVATE_KEY)

    # 1. Start EC2 Instance
    awsEc2Manager.start_instance()

    # 2. Git Pull, Build, and Push to Docker Hub.
    logging.info('Cloning Git repository..')
    awsEc2Manager.exec_command('sudo git clone {} /tmp/remote-builder'.format(
        envParser.GITHUB_URL))

    logging.info('Building Docker image from Github repository..')
    awsEc2Manager.exec_command(
        'sudo docker build /tmp/remote-builder/ -t {}'.format(
            envParser.DOCKER_IMAGE_NAME))