Ejemplo n.º 1
0
    def setup_gerrit(self):
        if not self.is_master():
            return

        if not self.args.gerrit_enabled:
            return

        self.required_option('gerrit-hostname')
        self.required_option('gerrit-port')
        self.required_option('gerrit-username')
        self.required_option('gerrit-private-key')

        self.set('gerrit.enabled', True)
        self.set('gerrit.hostname', self.args.gerrit_hostname)
        self.set('gerrit.username', self.args.gerrit_username)
        self.set('gerrit.review.enabled', self.args.gerrit_review_enabled)
        self.set('gerrit.review.tag', self.args.version)
        self.set('gerrit.trigger.tag', self.args.version)
        self.set('gerrit.api.tag', self.args.version)

        Installer.check_file_exists(self.args.gerrit_private_key)

        secret = {"id_rsa": open(self.args.gerrit_private_key).read()}

        self.create_secret("infrabox-gerrit-ssh",
                           self.args.general_system_namespace, secret)
        self.create_secret("infrabox-gerrit-ssh",
                           self.args.general_worker_namespace, secret)
Ejemplo n.º 2
0
    def setup_general(self):
        self.required_option('general-rsa-private-key')
        self.required_option('general-rsa-public-key')

        self.set('general.dont_check_certificates',
                 self.args.general_dont_check_certificates)
        self.set('general.worker_namespace',
                 self.args.general_worker_namespace)
        self.set('general.system_namespace',
                 self.args.general_system_namespace)
        self.set('general.rbac.enabled', not self.args.general_rbac_disabled)
        self.set('general.report_issue_url',
                 self.args.general_report_issue_url)
        self.set('root_url', self.args.root_url)

        Installer.check_file_exists(self.args.general_rsa_private_key)
        Installer.check_file_exists(self.args.general_rsa_public_key)

        secret = {
            "id_rsa": open(self.args.general_rsa_private_key).read(),
            "id_rsa.pub": open(self.args.general_rsa_public_key).read()
        }

        self.create_secret("infrabox-rsa", self.args.general_system_namespace,
                           secret)
Ejemplo n.º 3
0
    def setup_gerrit(self):
        if not self.args.gerrit_enabled:
            return

        self.required_option('gerrit-hostname')
        self.required_option('gerrit-port')
        self.required_option('gerrit-username')
        self.required_option('gerrit-private-key')

        Installer.check_file_exists(self.args.gerrit_private_key)

        self.config.add('services.gerrit-trigger.image',
                        '%s/gerrit-trigger:%s' % (self.args.docker_registry, self.args.version))
        self.config.append('services.gerrit-trigger.networks', ['infrabox'])

        self.config.append('services.gerrit-trigger.environment', [
            'INFRABOX_SERVICE=gerrit-trigger',
            'INFRABOX_VERSION=%s' % self.args.version
        ])

        self.config.append('services.gerrit-trigger.environment', self.get_gerrit_env())

        gerrit_key = os.path.join(self.args.o, 'gerrit_id_rsa')
        shutil.copyfile(self.args.gerrit_private_key, gerrit_key)
        self.config.append('services.gerrit-trigger.volumes', [
            '%s:/tmp/gerrit/id_rsa' % gerrit_key,
            ])
Ejemplo n.º 4
0
    def setup_postgres(self):
        if not self.is_master():
            self.set('storage.migration.enabled', False)
        self.required_option('database')
        args = self.args

        if self.args.database == 'postgres':
            self.required_option('postgres-host')
            self.required_option('postgres-port')
            self.required_option('postgres-username')
            self.required_option('postgres-password')
            self.required_option('postgres-database')
            self.set('storage.postgres.enabled', True)
            self.set('storage.postgres.host', args.postgres_host)
            self.set('storage.postgres.port', args.postgres_port)
            self.set('storage.postgres.db', args.postgres_database)
            self.set('storage.cloudsql.enabled', False)

            secret = {
                "username": args.postgres_username,
                "password": args.postgres_password
            }

            self.create_secret("infrabox-postgres",
                               self.args.general_system_namespace, secret)
        elif args.database == 'cloudsql':
            self.required_option('cloudsql-instance-connection-name')
            self.required_option('cloudsql-proxy-service-account-key-file')
            self.required_option('cloudsql-proxy-username')
            self.required_option('cloudsql-proxy-password')
            self.required_option('postgres-database')

            Installer.check_file_exists(
                args.cloudsql_proxy_service_account_key_file)

            self.set('storage.postgres.enabled', False)
            self.set('storage.postgres.host', "localhost")
            self.set('storage.postgres.port', 5432)
            self.set('storage.postgres.db', args.postgres_database)
            self.set('storage.cloudsql.instance_connection_name',
                     args.cloudsql_instance_connection_name)
            self.set('storage.cloudsql.enabled', True)

            secret = {
                "username": args.cloudsql_proxy_username,
                "password": args.cloudsql_proxy_password
            }

            self.create_secret("infrabox-postgres",
                               self.args.general_system_namespace, secret)

            with open(args.cloudsql_proxy_service_account_key_file) as keyfile:
                secret = {"credentials.json": keyfile.read()}

                self.create_secret("infrabox-cloudsql-instance-credentials",
                                   self.args.general_system_namespace, secret)

        else:
            raise Exception('unknown database type')
Ejemplo n.º 5
0
 def setUp(self):
     self.dir = tempfile.mkdtemp()
     print self.dir
     touchFile('%s/app1/ab/a.txt' % self.dir)
     touchFile('%s/app2/ab/b.txt' % self.dir)
     touchFile('%s/app1/xy/x.txt' % self.dir)
     touchFile('%s/app2/xy/y.txt' % self.dir)
     self.inst = Installer()
Ejemplo n.º 6
0
    def main(self):
        Installer.copy_files(self.args, 'compose')
        self.args.root_url = 'http://localhost:8090'

        compose_path = os.path.join(self.args.o, 'compose', 'docker-compose.yml')
        self.config.load(compose_path)
        self.setup_rsa()
        self.setup_scheduler()
        self.setup_database()
        self.setup_docker_registry()
        self.setup_ldap()
        self.setup_nginx_ingress()
        self.setup_api()
        self.setup_job_git()
        self.setup_gerrit()
        self.config.dump(compose_path)
Ejemplo n.º 7
0
    def main(self):
        self.required_option('root-url')

        while True:
            if self.args.root_url.endswith('/'):
                self.args.root_url = self.args.root_url[:-1]
            else:
                break

        # Copy helm chart
        Installer.copy_files(self.args, 'infrabox')

        # Load values
        values_path = os.path.join(self.args.o, 'infrabox', 'values.yaml')
        self.config.load(values_path)

        self.setup_general()
        self.setup_admin_password()
        self.setup_storage()
        self.setup_postgres()
        self.setup_docker_registry()
        self.setup_account()
        self.setup_job()
        self.setup_db()
        self.setup_scheduler()
        self.setup_cluster()
        self.setup_gerrit()
        self.setup_github()
        self.setup_dashboard()
        self.setup_api()
        self.setup_static()
        self.setup_ldap()
        self.setup_local_cache()
        self.setup_ingress()

        daemon_config = {'disable-legacy-registry': True}

        if self.args.general_dont_check_certificates:
            registry_name = self.args.root_url.replace('http://', '')
            registry_name = registry_name.replace('https://', '')
            daemon_config['insecure-registries'] = [registry_name]
            daemon_config_path = os.path.join(self.args.o, 'infrabox',
                                              'config', 'docker',
                                              'daemon.json')
            json.dump(daemon_config, open(daemon_config_path, 'w'))

        self.config.dump(values_path)
Ejemplo n.º 8
0
 def setUp(self):
     self.dir = tempfile.mkdtemp()
     print self.dir
     touchFile('%s/app1/ab/a.txt' % self.dir)
     touchFile('%s/app2/ab/b.txt' % self.dir)
     touchFile('%s/app1/xy/x.txt' % self.dir)
     touchFile('%s/app2/xy/y.txt' % self.dir)
     self.inst = Installer()
Ejemplo n.º 9
0
    def setup_storage(self):
        self.required_option('storage')
        args = self.args

        if args.storage == 's3':
            self.required_option('s3-access-key')
            self.required_option('s3-secret-key')
            self.required_option('s3-region')
            self.required_option('s3-endpoint')
            self.required_option('s3-port')
            self.required_option('s3-bucket')

            self.set('storage.gcs.enabled', False)
            self.set('storage.s3.enabled', True)
            self.set('storage.s3.region', args.s3_region)
            self.set('storage.s3.endpoint', args.s3_endpoint)
            self.set('storage.s3.bucket', args.s3_bucket)
            self.set('storage.s3.port', args.s3_port)
            self.set('storage.s3.secure', args.s3_secure == 'true')

            secret = {
                "secretKey": args.s3_secret_key,
                "accessKey": args.s3_access_key
            }

            self.create_secret("infrabox-s3-credentials",
                               self.args.general_system_namespace, secret)
        elif args.storage == 'gcs':
            self.required_option('gcs-service-account-key-file')
            self.required_option('gcs-bucket')

            Installer.check_file_exists(args.gcs_service_account_key_file)

            self.set('storage.s3.enabled', False)
            self.set('storage.gcs.enabled', True)
            self.set('storage.gcs.bucket', args.gcs_bucket)

            with open(args.gcs_service_account_key_file) as keyfile:
                secret = {"gcs_service_account.json": keyfile.read()}

                self.create_secret("infrabox-gcs",
                                   self.args.general_system_namespace, secret)
        else:
            raise Exception("unknown storage")
Ejemplo n.º 10
0
class InstallerTest(unittest.TestCase):
    def setUp(self):
        self.dir = tempfile.mkdtemp()
        print self.dir
        touchFile("%s/app1/ab/a.txt" % self.dir)
        touchFile("%s/app2/ab/b.txt" % self.dir)
        touchFile("%s/app1/xy/x.txt" % self.dir)
        touchFile("%s/app2/xy/y.txt" % self.dir)
        self.inst = Installer()

    def tearDown(self):
        shutil.rmtree(self.dir)

    def test_first(self):
        self.inst.installRecurseGlob(r"%s/app[12]/*" % self.dir, "%s/both" % self.dir)
        self.assert_(os.path.exists("%s/both/ab/a.txt" % self.dir))
        self.assert_(os.path.exists("%s/both/ab/b.txt" % self.dir))
        self.assert_(os.path.exists("%s/both/xy/x.txt" % self.dir))
        self.assert_(os.path.exists("%s/both/xy/y.txt" % self.dir))
Ejemplo n.º 11
0
class InstallerTest(unittest.TestCase):
    def setUp(self):
        self.dir = tempfile.mkdtemp()
        print self.dir
        touchFile('%s/app1/ab/a.txt' % self.dir)
        touchFile('%s/app2/ab/b.txt' % self.dir)
        touchFile('%s/app1/xy/x.txt' % self.dir)
        touchFile('%s/app2/xy/y.txt' % self.dir)
        self.inst = Installer()

    def tearDown(self):
        shutil.rmtree(self.dir)

    def test_first(self):
        self.inst.installRecurseGlob(r'%s/app[12]/*' % self.dir,
                                     '%s/both' % self.dir)
        self.assert_(os.path.exists('%s/both/ab/a.txt' % self.dir))
        self.assert_(os.path.exists('%s/both/ab/b.txt' % self.dir))
        self.assert_(os.path.exists('%s/both/xy/x.txt' % self.dir))
        self.assert_(os.path.exists('%s/both/xy/y.txt' % self.dir))
Ejemplo n.º 12
0
def main(stdscr):
    global filesdir, installdir

    inst = Installer(stdscr, "Pedigree", filesdir, installdir)
    inst.setupCurses()

    inst.introPage()
    inst.selectDest()
    inst.installFiles()
    inst.postInstall()
    inst.done()
Ejemplo n.º 13
0
def main(stdscr):
	global filesdir, installdir
	
	inst = Installer(stdscr, "Pedigree", filesdir, installdir)
	inst.setupCurses()
	
	inst.introPage()
	inst.selectDest()
	inst.installFiles()
	inst.postInstall()
	inst.done()