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)
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)