Editorial FOR BI PROS Tableau
Tableau Configuration Templates: Understanding tabadmin configure
October 24, 2015
, , , , , , , , ,

Tableau uses different processes on different nodes to do the magic: gateway, application servers, repository, cache servers are all having their own configuration files on different server hosts. How can tableau keep their configuration files in sync? How can you change default values or customize the service settings? Like how can I create a remote user access with fix password? Let’s do a deep dive and see how tabadmin configure  manages these independent configuration files.

Tabadmin? Ruby? ERB? What?

Little background/history. Few years ago when Tableau started the server development they decided to use ruby programming language to manage different aspects of the server tasks. Tabadmin service, workgroup servers were all written in ruby using jruby (java implementation of ruby). This was a reasonable decision: large agile companies like twitter used ruby in their core implementation. But after a certain point ruby just does not scale (and harder to find good ruby programmers than java ones). That’s why Twitter dropped ruby and rewrite their systems using java and scala. And that’s why Tableau rewrites its ruby related components such as workgroup server or tabcmd from jruby to plain java (like wgserver -> vizportal migration) and I am sure that this will happen with tabadmin and tabadmin service on the long run.

Until that, tabadmin is a ruby application, using ruby related configuration files and templating capabilities like yaml and erb.

Generating configuration file

But let’s back to our original topic, the configuration management. The basic concept is very simple: you have a mutable user configuration file plus other immutable global configuration files with default values (stored in yaml format) and tabadmin will generate dozen of service dependent configuration files using embedded ruby (ERB) templates.

For instance, generating postgres repository’s access config file pg_hba.conf.templ  takes the following (simplified) steps:

  1. Read %PROGRAMDATA%\Tableau\Tableau Server\config\tabsvc.yml contents
  2. Read %PROGRAMFILES%\Tableau\Tableau Server\9.0\templates\config-defaults.yml contents
  3. Read %PROGRAMFILES%\Tableau\Tableau Server\9.0\templates\customization-defaults.yml contents
  4. Read %PROGRAMFILES%\Tableau\Tableau Server\9.0\templates\pg_hba.conf.templ contents (this is the ERB template file)
  5. Validate all configuration settings
  6. Execute ERB template on pg_hba.conf.templ using the configuration contents, default calculations and validation rules.
  7. Store the result in %ProgramData%\Tableau\Tableau Server\data\tabsvc\config\pg_hba.conf

This will be executed on all nodes in a cluster.

Quick look in the pg_hba.conf.templ:

This will compile as:

Changing the configuration template will ensure to have your customization effective after tabadmin configure.

How about service property files?

Great question, and not just because I asked it. There are few files which aren’t generated from ERB templates. These includes special property files like connections.properties  or connections.yml  where an embedded logic inside tabadmin generates these configuration files.

Other files like <servicename>.properties  are generated from component configurations. These files having their logic implemented in tabadmin’s component classes. Bad news, you can’t change them directly, only thru changing the default files.

What else?

tabadmin configure  does way more than just template generation. Registering the tableau events for event logging, modifying Oracle’s NLS_LANG setting in registry just to name few. Tabadmin also handles the version changes: after upgrade the first tabadmin configure run updates the local user-specific configuration file according to the latest configuration standards and requirements.

What’s next?

In the next post I will show you how to create your own superuser in tableau repository including remote access support. This will allows you to modify workbooks on the fly remotely – purely connecting to the repository database.

Any questions? Drop a line.

Tamás Földi

Related items

/ You may check this items as well

sync frelard

Tableau Extensions Addons Introduction: Synchronized Scrollbars

At this year’s Tableau Conference, I tried t...

Read more

Tableau External Services API: Adding Haskell Expressions as Calculations

We all have our own Tableau Conference habits.  M...

Read more
Scaling Tableau Image

Scaling out Tableau Extracts – Building a distributed, multi-node MPP Hyper Cluster

Tableau Hyper Database (“Extract”) is ...

Read more