def generate_helm_sandlet(self):
        """Creates a helm sandlet.

    This sandlet generates a dynamic values yaml file to be used with the Vitess
    helm chart in order to encompass most of the Vitess stack.
    """
        helm_sandlet = sandlet.Sandlet('helm')
        helm_sandlet.components.add_component(
            kubernetes_components.HelmComponent(
                'helm', self.name, self._generate_helm_values_config()))

        # Add a subprocess task to wait for all mysql instances to be healthy.
        tablet_count = 0
        for keyspace in self.app_options.keyspaces:
            tablet_count += (
                keyspace['shard_count'] * len(self.app_options.cells) *
                (keyspace['replica_count'] + keyspace['rdonly_count']))
        wait_for_mysql_subprocess = subprocess_component.Subprocess(
            'wait_for_mysql',
            self.name,
            'wait_for_mysql.py',
            self.log_dir,
            namespace=self.name,
            cells=','.join(self.app_options.cells),
            tablet_count=tablet_count)
        wait_for_mysql_subprocess.dependencies = ['helm']
        helm_sandlet.components.add_component(wait_for_mysql_subprocess)

        # Add a subprocess task to ensure serving types are correct. This is useful
        # for resharding sandboxes where keyspaces have overlapping sets of shards.
        fix_served_types_subprocess = subprocess_component.Subprocess(
            'fix_served_types',
            self.name,
            'fix_served_types.py',
            self.log_dir,
            namespace=self.name,
            keyspaces=','.join(ks['name']
                               for ks in self.app_options.keyspaces))
        fix_served_types_subprocess.dependencies = ['wait_for_mysql']
        helm_sandlet.components.add_component(fix_served_types_subprocess)

        # Add a subprocess task for each keyspace to perform the initial reparent.
        for keyspace in self.app_options.keyspaces:
            name = keyspace['name']
            shard_count = keyspace['shard_count']
            initial_reparent_subprocess = subprocess_component.Subprocess(
                'initial_reparent_%s_%d' % (name, shard_count),
                self.name,
                'initial_reparent.py',
                self.log_dir,
                namespace=self.name,
                keyspace=name,
                shard_count=shard_count,
                master_cell=self.app_options.cells[0])
            initial_reparent_subprocess.dependencies = [
                wait_for_mysql_subprocess.name,
                fix_served_types_subprocess.name,
            ]
            helm_sandlet.components.add_component(initial_reparent_subprocess)
        self.sandlets.add_component(helm_sandlet)
Exemple #2
0
 def generate_guestbook_sandlet(self):
   """Creates a sandlet encompassing the guestbook app built on Vitess."""
   guestbook_sandlet = sandlet.Sandlet('guestbook')
   guestbook_sandlet.dependencies = ['helm']
   template_dir = os.path.join(os.environ['VTTOP'], 'examples/kubernetes')
   guestbook_sandlet.components.add_component(
       self.cluster_env.Port('%s-guestbook' % self.name, 80))
   for keyspace in self.app_options.keyspaces:
     create_schema_subprocess = subprocess_component.Subprocess(
         'create_schema_%s' % keyspace['name'], self.name, 'create_schema.py',
         self.log_dir, namespace=self.name, keyspace=keyspace['name'],
         drop_table='messages', sql_file=os.path.join(
             os.environ['VTTOP'], 'examples/kubernetes/create_test_table.sql'))
     guestbook_sandlet.components.add_component(create_schema_subprocess)
   guestbook_sandlet.components.add_component(
       kubernetes_components.KubernetesResource(
           'guestbook-service', self.name,
           os.path.join(template_dir, 'guestbook-service.yaml')))
   guestbook_sandlet.components.add_component(
       kubernetes_components.KubernetesResource(
           'guestbook-controller', self.name,
           os.path.join(template_dir, 'guestbook-controller-template.yaml'),
           port=8080, cell=self.app_options.cells[0], vtgate_port=15991,
           keyspace=self.app_options.keyspaces[0]['name']))
   self.sandlets.add_component(guestbook_sandlet)
    def generate_helm_sandlet(self):
        """Creates a helm sandlet.

    This sandlet generates a dynamic values yaml file to be used with the Vitess
    helm chart in order to encompass most of the Vitess stack.
    """
        helm_sandlet = sandlet.Sandlet('helm')
        helm_sandlet.components.add_component(
            kubernetes_components.HelmComponent(
                'helm', self.name, self._generate_helm_values_config()))
        for keyspace in self.app_options.keyspaces:
            name = keyspace['name']
            shard_count = keyspace['shard_count']
            wait_for_mysql_subprocess = subprocess_component.Subprocess(
                'wait_for_mysql_%s' % name,
                self.name,
                'wait_for_mysql.py',
                self.log_dir,
                namespace=self.name,
                cells=','.join(self.app_options.cells),
                tablet_count=(
                    shard_count *
                    (keyspace['replica_count'] + keyspace['rdonly_count'])))
            wait_for_mysql_subprocess.dependencies = ['helm']
            initial_reparent_subprocess = subprocess_component.Subprocess(
                'initial_reparent_%s' % name,
                self.name,
                'initial_reparent.py',
                self.log_dir,
                namespace=self.name,
                keyspace=name,
                shard_count=shard_count,
                master_cell=self.app_options.cells[0])
            initial_reparent_subprocess.dependencies = [
                wait_for_mysql_subprocess.name
            ]
            helm_sandlet.components.add_component(wait_for_mysql_subprocess)
            helm_sandlet.components.add_component(initial_reparent_subprocess)
        self.sandlets.add_component(helm_sandlet)