Ansible Deployment

Ansible Deployment

1. Overview

This guide provides step-by-step instructions for deploying Syndeia Cloud 3.7 and its required dependencies using the provided Ansible playbook and the Syndeia Cloud 3.7 deployment package.

The playbook automates the entire process, including:

  • Installing dependencies (OpenJDK 11, Python 3.10, Cassandra 4.1, Kafka 3.7, JanusGraph 1.0).

  • Setting up system users and groups for process isolation.

  • Deploying and configuring all Syndeia Cloud microservices.

  • Initializing the database schemas and license.

  • Configuring and enabling systemd services to manage all components.

This automation is designed for a fresh installation on a single-node server.

2. Prerequisites

2.1 General Requirements

  • Software: Syndeia Cloud (SC) Components

    1. Syndeia Cloud (SC) packages: Download the following packages from the password-protected link provided in the Intercax Helpdesk request where you originally received your Syndeia Cloud license. To request a copy of these, visit https://intercax.com/help and enter an Evaluation Request - or find the existing request that your colleagues or organization may have sent to Intercax in the past. These packages are provided using Intercax’s secure, access-controlled file share service.

      1. syndeia-cloud-3.7*-ansible.zip

      2. syndeia-cloud-3.7*.zip

  • Software: Intercax License Server

    • RLM-based Intercax License Server 15.1 must be up and running if using a floating license. See this document for installation instructions if one has not been set up: Linux - Intercax License Server Installation and Setup. RLM license server is NOT included in the docker-compose files and there is not currently a docker image for this.

    • A valid license file must be present in the home directory of the user/admin that will be running the installation scripts.

      1. If the Intercax License Server is serving floating licenses, then you must create a License Pointer File as described here: License Pointer File Creation.

      2. If you are using node-locked license, then you must have downloaded the node-locked license available with your Syndeia downloads.

      3. The License Pointer File (for floating licenses) or the node-locked license file will be used when deploying Syndeia Cloud later in this process.

    • Please see Syndeia Licensing for details regarding license types. If you need help acquiring a license, you can open a ticket at intercax.com/help.

2.2 Target Server Requirements

The Target Server is the server on which you will be installing Syndeia Cloud

  • Target Server must meet all requirements specified in Software and Hardware Requirements .

  • User Account with Sudo Access: A user account with sudo privileges is required. The playbook will prompt for the sudo password during execution.

  • unzip: Tool must be installed.

  • tar: Tool must be installed.

2.3 Control Node Requirements

The Control Node is the machine from which you will execute the Ansible commands. This can be your local workstation, a dedicated management server, or the Target Server itself.

  • Ansible: Ansible must be installed.

    • We recommend that organizations become familiar with Ansible before using it for Syndeia deployments

    • To install Ansible on RHEL-related systems, use sudo yum install ansible

  • unzip: Tool must be installed.

  • tar: Tool must be installed.

  • SSH Access (for Remote Execution): If your Control Node is not the Target Server, it must have passwordless SSH access (using an SSH key) to the Target Server. See this RedHat blog entry for instructions on how to enable passwordless SSH access.

  • Syndeia Software:

    • The Syndeia Cloud application package (e.g., syndeia-cloud-3.7*.zip) must be downloaded and placed in a known directory on the control node.

    • You must have either a Syndeia license file (e.g., Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic) or the connection details for your organization's floating license server.

3. Deployment

Stage 1: Initial Setup

Step 1: Prepare Installation Files

In this step, we will prepare the files that we will need to transfer to the Control Node for the deployment. Locate the files and place them in your user’s home folder on your workstation or server.

Step 1.1: Place package files in your home folder (Required for everyone):

  • syndeia-cloud-3.7*.zip (The Syndeia Cloud 3.7 Package)

  • syndeia-cloud-3.7*-ansible.zip (The Ansible Package)

To request a copy of these packages, visit Intercax.com/Help and enter an Evaluation Request - or find the existing request that your colleagues or organization may have sent to Intercax in the past. Both packages are provided using Intercax’s secure, access-controlled file share service.

Step 1.2: Place your license file in your home folder (Required ONLY if using a node-locked license) :
If you are using a node-locked license, you should have received it via our helpdesk. If you need a node-locked license, please visit Intercax.com/Help to request one. If you are using a floating license, you will not need a license file for this installation.

  • Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic

Step 1.3: Generate and Place Offline Dependencies in your home folder (Required ONLY for air-gapped/offline servers):

If your environment cannot access the internet, you must pre-download an additional package containing Syndeia Cloud dependencies (Java, Cassandra, Kafka, etc.).

1. On a machine with internet access, from your user’s home folder, extract syndeia-cloud-3.7*-ansible.zip.

unzip syndeia-cloud-3.7*-ansible.zip -d syndeia-cloud-3.7*-ansible

2. Navigate to the extracted directory and run the downloader script:

#This will create a file named syndeia-offline-dependencies.zip. You will transfer this file in the next step cd syndeia-cloud-3.7*-ansible python3 offline_dependency_downloader.py
--- Syndeia Cloud Dependency Downloader --- Processing 'OpenJDK 11 JRE'... -- Starting download from: https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.27%2B6/OpenJDK11U-jre_x64_linux_hotspot_11.0.27_6.tar.gz ... 100% downloaded [41.39 / 41.39 MB] -- Download complete. Processing 'Python Standalone'... -- Starting download from: https://github.com/astral-sh/python-build-standalone/releases/download/20250517/cpython-3.10.17+20250517-x86_64-unknown-linux-gnu-install_only.tar.gz ... 100% downloaded [42.10 / 42.10 MB] -- Download complete. Processing 'Apache Cassandra'... -- Starting download from: https://archive.apache.org/dist/cassandra/4.1.9/apache-cassandra-4.1.9-bin.tar.gz ... 100% downloaded [49.48 / 49.48 MB] -- Download complete. Processing 'Apache Kafka'... -- Starting download from: https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz ... 100% downloaded [113.51 / 113.51 MB] -- Download complete. Processing 'JanusGraph'... -- Starting download from: https://github.com/JanusGraph/janusgraph/releases/download/v1.0.0/janusgraph-full-1.0.0.zip ... 100% downloaded [709.42 / 709.42 MB] -- Download complete. Processing 'Python 'packaging' Wheel'... -- Starting download from: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl ... 100% downloaded [0.06 / 0.06 MB] -- Download complete. Processing 'Python 'six' Wheel'... -- Starting download from: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl ... 100% downloaded [0.01 / 0.01 MB] -- Download complete. --- Creating zip archive: syndeia-offline-dependencies.zip --- -- Added apache-cassandra-4.1.9-bin.tar.gz -- Added cpython-3.10.17+20250517-x86_64-unknown-linux-gnu-install_only.tar.gz -- Added janusgraph-full-1.0.0.zip -- Added kafka_2.13-3.7.0.tgz -- Added OpenJDK11U-jre_x64_linux_hotspot_11.0.27_6.tar.gz -- Added packaging-25.0-py3-none-any.whl -- Added six-1.17.0-py2.py3-none-any.whl ------------------------------------------------- SUCCESS: All dependencies have been packaged into a single zip file. File created: ./syndeia-offline-dependencies.zip ------------------------------------------------- --- Cleaning up temporary files... --- --- Cleanup complete. ---

3. Move the generated syndeia-offline-dependencies.zip package to your users home folder

mv syndeia-offline-dependencies.zip ~/

Step 2: Transfer Packages to the Control Node

From the machine containing the packages gathered in Step 1, transfer the standard packages to your home folder on the Control Node using your desired method (scp, ftp, etc.).

Step 2.1: Transfer Standard Files (Required):

# Replace 'user' and 'controlnode.server.com' with your username and the fqdn or ip of the Control Node. scp syndeia-cloud-3.7*.zip syndeia-cloud-3.7*-ansible.zip user@controlnode.server.com:~

Step 2.2: Transfer License File (Required ONLY if using a node-locked license):

# Replace 'Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic', 'user', and 'controlnode.server.com' # with your license file name, username, and the fqdn or ip of the Control Code. scp Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic user@controlnode.server.com:~/syndeia-license/

Step 2.3: Transfer Offline Dependency Package (Required ONLY for air-gapped/offline servers):

# Replace 'user' and 'controlnode.server.com' with your username and the fqdn or ip of the Control Node. scp syndeia-offline-dependencies.zip user@controlnode.server.com:~

Step 3: Stage Syndeia Cloud 3.7 Package on the Control Node

We must move the syndeia-cloud-3.7*.zip package to a folder where ansible can access it. By default this is ~/syndeia-software.

Step 3.1: Log into the Control Node and navigate to your users home folder:

# On the Control Node, navigate to your users home folder cd ~

Step 3.2: Create the syndeia-software directory:

mkdir -p ~/syndeia-software

Step 3.3: Move the syndeia-cloud-3.7*.zip package to the syndeia-software directory:

mv syndeia-cloud-3.7*.zip ~/syndeia-software

Step 4: Unzip the Ansible Package

Unzip the syndeia-cloud-3.7*-ansible.zip file into a working directory on the Control Node.

# Unzip the package and cd unzip syndeia-cloud-3.7*-ansible.zip -d syndeia-cloud-3.7*-ansible cd syndeia-cloud-3.7*-ansible

Step 5: Review the Directory Structure

After extraction, the package contains the following key components:

syndeia-cloud-3.7*-ansible/ +-- ansible.cfg # Configuration settings for ansible +-- customer_config.yml.template # Template for your environment-specific settings +-- group_vars/ # A directory containing the core variables for the playbook +-- install_syndeia.ansible.yml # The syndeia install playbook +-- inventory.ini.template # The server inventory template +-- offline_dependency_downloader.py # Python script for offline installation downloads +-- README.md # The ansible package's README containing a link to this documentation +-- requirements.yml # A text list of the required ansible collections +-- roles/ # A directory containing all of the roles used by install_syndeia playbook

Step 6: Stage License File (Required ONLY if using a Node-Locked License)

Note: If you are using a Floating License, you will skip this step, proceeding to Step 7.

If you are using a Node-Locked license, you must place your .lic file your home folder under a directory called syndeia-license so Ansible can locate it. The license file should have already been transferred to the home folder of the Control Node in Step 2.2.

Step 6.1: Create a directory called “syndeia-license” in your user’s home directory on the Control Node:

mkdir -p ~/syndeia-license

Step 6.2: Move the node-locked license to the newly created ~/syndeia-license directory on the Control Node:

# Replace Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic with your license file name. mv ~/Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic ~/syndeia-license/

Step 7: Stage Offline Dependencies (Required ONLY for air-gapped/offline servers)

Note: If your Target Server has internet access, skip this step and proceed to Stage 2: Configuration.

If you transferred the syndeia-offline-dependencies.zip file in Step 2.3, you must now extract it to the specific temporary location where the Ansible playbook expects to find them.

Step 7.1: Unzip the package on the Control Node:

# Ensure you have the 'unzip' utility installed (e.g., sudo yum install unzip) unzip ~/syndeia-offline-dependencies.zip -d /tmp/syndeia_downloads

Expected Output:

Archive: /home/user/syndeia-offline-dependencies.zip inflating: /tmp/syndeia_downloads/apache-cassandra-4.1.9-bin.tar.gz inflating: /tmp/syndeia_downloads/cpython-3.10.17+20250517-x86_64-unknown-linux-gnu-install_only.tar.gz inflating: /tmp/syndeia_downloads/janusgraph-full-1.0.0.zip inflating: /tmp/syndeia_downloads/kafka_2.13-3.7.0.tgz inflating: /tmp/syndeia_downloads/OpenJDK11U-jre_x64_linux_hotspot_11.0.27_6.tar.gz inflating: /tmp/syndeia_downloads/packaging-25.0-py3-none-any.whl inflating: /tmp/syndeia_downloads/six-1.17.0-py2.py3-none-any.whl

Step 7.2: Verify the files are in place

ls -l /tmp/syndeia_downloads
total 978948 -rw-rw-rw- 1 user user 51883388 Dec 3 11:25 apache-cassandra-4.1.9-bin.tar.gz -rw-rw-rw- 1 user user 44148241 Dec 3 11:24 cpython-3.10.17+20250517-x86_64-unknown-linux-gnu-install_only.tar.gz -rw-rw-rw- 1 user user 743882909 Dec 3 11:26 janusgraph-full-1.0.0.zip -rw-rw-rw- 1 user user 119028138 Dec 3 11:25 kafka_2.13-3.7.0.tgz -rw-rw-rw- 1 user user 43401920 Dec 3 11:24 OpenJDK11U-jre_x64_linux_hotspot_11.0.27_6.tar.gz -rw-rw-rw- 1 user user 66469 Dec 3 11:26 packaging-25.0-py3-none-any.whl -rw-rw-rw- 1 user user 11050 Dec 3 11:26 six-1.17.0-py2.py3-none-any.whl

Warning: The /tmp directory is temporary and is often cleared when a server reboots. Do not restart the Control Node between this step and the execution of the playbook.

Stage 2: Configuration

Important: All steps in this section should be performed on the Control Node.

Step 1: Configure the Ansible Inventory

The inventory file acts as an address book, telling Ansible which server to connect to and how to authenticate.

Step 1.1: Navigate to the package directory:

cd ~/syndeia-cloud-3.7*-ansible

Step 1.2: Create the inventory file from the template:

cp inventory.ini.template inventory.ini

Step 1.3: Open the file for editing:

vim inventory.ini

Step 1.4: Configure your connection scenario:
Choose Scenario A or Scenario B below.

Step 1.4 - Scenario A: Remote Execution (Standard)
Use this if your Control Node is a separate machine (e.g., a laptop or management server) connecting to the Target Server over SSH.

  1. Under [syndeia_cloud_servers], replace the placeholder with the FQDN or IP address of your Target Server.

  2. Set ansible_user to the username on the Target Server. This user must have sudo access on the Target server.

  3. Set ansible_private_key_file to the path of your SSH private key on the Control Node.

  4. If your remote server runs ssh on a port other than 22, set ansible_portto the correct ssh port.

Example Remote Execution inventory.ini contents:

[syndeia_cloud_servers] 192.168.1.100 [syndeia_cloud_servers:vars] ansible_user=remote_admin ansible_private_key_file=~/.ssh/id_ed25519 # ansible_port=22

Step 1.4 - Scenario B: Local Execution
Use this if you are running Ansible directly on the Target Server itself.

  1. Under [syndeia_cloud_servers], set the host to localhost.

  2. Add the variable ansible_connection=local.

  3. Remove or comment out the [syndeia_cloud_servers:vars] section.

Example Local Execution inventory.ini contents:

[syndeia_cloud_servers] localhost ansible_connection=local #[syndeia_cloud_servers:vars] #ansible_user=user #ansible_private_key_file=~/.ssh/id_rsa

Step 2: Create and Edit the Customer Configuration File

Ansible uses a variable file to customize the installation for your specific environment. You will create this file from the provided template.

Step 2.1: Create and edit customer configuration file

  1. Create the configuration file:

    cp customer_config.yml.template customer_config.yml
  2. Open the file for editing:

    vim customer_config.yml
  3. Configure the variables:
    Scroll through the file and update the sections below.

Step 2.2: Essential Configuration

  • customer_cassandra_syndeia_admin_password: Set a secure password for the syndeia_admin database user. This password is used internally by the application to talk to the database.

    • Example: "AnotherSecur3P@ss!"

Step 2.3: Production Secrets

Syndeia Cloud requires two secret keys to secure user sessions and authentication tokens.

  • customer_syndeia_play_secret: A long, random string used to sign session cookies.

  • customer_syndeia_jwt_secret: A different long, random string used to sign JSON Web Tokens (JWTs).

Important: If these are left commented out, Ansible will generate new random secrets every time the playbook runs. This will invalidate existing user sessions (logging everyone out) during upgrades or re-configurations. It is strongly recommended to generate fixed strings for production environments.

You can generate a strong secret using OpenSSL on the Control Node:

openssl rand -base64 48

Copy the output and paste it into your config file:

customer_syndeia_play_secret: "2Aoja9kUXU9QzFeS11fdX2UlbIcgNXxYxutoUT+8cV4Qpsl6KaRfEws+A+SuCcXo" customer_syndeia_jwt_secret: "H++iHo3gdtdFobetBm7jgZksif+7aRvFNlS1GWf+DB6HMtqg2QxFpsOzKOSGBhuY"

Step 2.4: License Configuration

You must configure one of the following two scenarios (2.4 - Scenario A or 2.4 - Scenario B). The Ansible playbook detects which method to use based on which variables you populate.

Step 2.4 - Scenario A: Floating License (Standard)
Use this method if you have an Intercax License Server (ILS) running on your network. Ansible will automatically generate the required pointer file on the Target Server.

  1. Locate the License Configuration section in customer_config.yml.

  2. Important: Ensure customer_syndeia_license_file_path is commented out or empty.

  3. Uncomment customer_syndeia_license_server_host and enter the FQDN or IP address of your License Server.

  4. (Optional) If your License Server uses non-standard ports, uncomment and update customer_syndeia_license_server_rlm_port (Default: 5053) and/or customer_syndeia_license_server_isv_port (Default: 5055).

Example Configuration for Floating License:

# Leave the file path EMPTY or commented out # customer_syndeia_license_file_path: "" # Uncomment and set the License Server Hostname customer_syndeia_license_server_host: "rlm-server.mycompany.com"

Step 2.5 - Scenario B: Node-Locked License
Use this method if you are using a node-locked license file and have staged it in the ~/syndeia-license directory on the Control Node (as described in Section 3, Step 6).

  1. Locate the License Configuration section in customer_config.yml.

  2. Uncomment customer_syndeia_license_file_path.

  3. Set the value to the full path of the directory created in Section 3 (e.g., /home/<your-user>/syndeia-license/Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic).

  4. Important: Ensure customer_syndeia_license_server_host is commented out.

Example Configuration for Node-Locked License:

# Point to the staged license file on the Control Node # Replace 'user' with your username customer_syndeia_license_file_path: "/home/user/syndeia-license/Company-hostname-Syndeia-3.7*-ClientNodeLocked-date-x1.lic" # Ensure the Server Host is commented out # customer_syndeia_license_server_host: "rlm.mycompany.com" # customer_syndeia_license_server_rlm_port: 5053 # customer_syndeia_license_server_isv_port: 5055

Note: The customer_config.yml file contains an "Advanced & Optional Configuration" section at the bottom. This includes settings for tuning Cassandra, Kafka, and other components. For a standard installation, the default values in that section are sufficient and do not need to be changed.

Stage 3: Execution

With all required files staged and ansible configured, we can now run the playbook from the Control Node.

Step 1: Navigate to the extracted ansible package on your Control Node

cd ~/syndeia-cloud-3.7*-ansible

Step 2: Run the playbook

Note: Immediately after running the command below, you will be prompted with BECOME password:. You must enter the appropriate sudo password and press Enter to proceed:

  • Remote Execution: Use the password for the user on the remote Target Server as defined in Stage 2, Step 1.4.

  • Local Execution: Use the password for the user currently running this playbook.

ansible-playbook install_syndeia.ansible.yml --extra-vars "@customer_config.yml"

The playbook will now run, which may take 10-20 minutes. A final success message will be shown upon completion.

TASK [Final status message] ************************************************************************************************ Friday 05 December 2025 08:07:16 -0500 (0:00:00.502) 0:10:22.763 ******* ok: [localhost] => { "msg": [ "Syndeia Cloud installation process completed successfully.", "Installation directory: /opt/icx/syndeia-cloud-current", "All services have been enabled and will start automatically on system boot." ] } PLAY RECAP ***************************************************************************************************************** localhost :ok=484changed=153 unreachable=0 failed=0skipped=50 rescued=0 ignored=0 Friday 05 December 2025 08:07:16 -0500 (0:00:00.060) 0:10:22.824 ******* =============================================================================== syndeia_cloud : Wait for all INTEGRATION service ports to open ---------------------------------------------------- 132.11s syndeia_cloud : Create superuser account with retries -------------------------------------------------------------- 98.23s syndeia_cloud : Perform final, retrying health checks for all INTEGRATION services --------------------------------- 31.16s syndeia_cloud : Wait for services to stabilize before running DevOps tool ------------------------------------------ 30.04s syndeia_cloud : Extract all service archives into the final installation directory --------------------------------- 29.32s janusgraph : Run JanusGraph Groovy init script for schema setup ---------------------------------------------------- 20.37s syndeia_cloud : Start Syndeia Cloud Integration Services ----------------------------------------------------------- 15.71s cassandra : Wait for Cassandra native port (9042) to become available ---------------------------------------------- 15.36s janusgraph : Wait for JanusGraph Gremlin Server port 8182 to be available ------------------------------------------ 15.28s syndeia_cloud : Extract required configs for Lagom services from their JARs ---------------------------------------- 14.13s syndeia_cloud : Enable all Syndeia services to start on boot ------------------------------------------------------- 12.28s syndeia_cloud : Stop all individual Syndeia Cloud services --------------------------------------------------------- 10.38s syndeia_cloud : Wait for all CORE service ports to come online ------------------------------------------------------ 9.74s syndeia_cloud : Poll the console output file for a license result --------------------------------------------------- 7.08s syndeia_cloud : Replace Environment line with mapped values in systemd service files -------------------------------- 6.78s syndeia_cloud : Copy systemd service files from extracted directory ------------------------------------------------- 6.39s syndeia_cloud : Ensure runtime directories for all services exist --------------------------------------------------- 6.26s syndeia_cloud : Ensure 'conf' directories exist for all services that require them ---------------------------------- 6.21s syndeia_cloud : Create default data set with retries ---------------------------------------------------------------- 5.89s syndeia_cloud : Set correct ownership and permissions on extracted files -------------------------------------------- 5.61

Stage 4: Post-Installation Verification

After the playbook completes, verify that Syndeia Cloud is running correctly. All verification should be done on the Target Server.

Step 1: Log into the Target Server

# Replace 'user' and 'target.server.com' with your username and the fqdn or ip of the Target Server ssh user@target.server.com

Step 2: Check Service Status

All services are managed by a single systemd target. Check their status with:

systemctl list-units cassandra.service janusgraph.service kafka.service sc-*.service
[user@syndeia-server ~]$ systemctl list-units cassandra.service janusgraph.service kafka.service sc-*.service UNIT LOAD ACTIVE SUB DESCRIPTION cassandra.service loaded active running Apache Cassandra (Tarball) janusgraph.service loaded active running JanusGraph Server for Syndeia Cloud kafka.service loaded active running Apache Kafka Server (KRaft Mode, Tarball) sc-ado.service loaded active running Syndeia Cloud 3.7 ADO service: Integrated model-based engineering tool to generate, connect, compare and sync sc-aras.service loaded active running Syndeia Cloud 3.7 aras service: Integrated model-based engineering tool to generate, connect, compare and sync sc-artifactory.service loaded active running Syndeia Cloud 3.7 artifactory service: Integrated model-based engineering tool to generate, connect, compare and sync sc-auth.service loaded active running Syndeia Cloud 3.7 auth service: Integrated model-based engineering tool to generate, connect, compare and sync sc-bitbucket.service loaded active running Syndeia Cloud 3.7 bitbucket service: Integrated model-based engineering tool to generate, connect, compare and sync sc-codebeamer.service loaded active running Syndeia Cloud 3.7 codebeamer service: Integrated model-based engineering tool to generate, connect, compare and sync sc-collaborator.service loaded active running Syndeia Cloud 3.7 collaborator service: Integrated model-based engineering tool to generate, connect, compare and sync sc-confluence.service loaded active running Syndeia Cloud 3.7 confluence service: Integrated model-based engineering tool to generate, connect, compare and sync sc-doors.service loaded active running Syndeia Cloud 3.7 doors service: Integrated model-based engineering tool to generate, connect, compare and sync sc-dscr.service loaded active running Syndeia Cloud 3.7 DSCR service: Integrated model-based engineering tool to generate, connect, compare and sync sc-dse3.service loaded active running Syndeia Cloud 3.7 DSE3 service: Integrated model-based engineering tool to generate, connect, compare and sync sc-dt.service loaded active running Syndeia Cloud 3.7 dt service: Integrated model-based engineering tool to generate, connect, compare and sync sc-genesys.service loaded active running Syndeia Cloud 3.7 genesys service: Integrated model-based engineering tool to generate, connect, compare and sync sc-github.service loaded active running Syndeia Cloud 3.7 github service: Integrated model-based engineering tool to generate, connect, compare and sync sc-gitlab.service loaded active running Syndeia Cloud 3.7 gitlab service: Integrated model-based engineering tool to generate, connect, compare and sync sc-graph.service loaded active running Syndeia Cloud 3.7 graph service: Integrated model-based engineering tool to generate, connect, compare and sync sc-jama.service loaded active running Syndeia Cloud 3.7 jama service: Integrated model-based engineering tool to generate, connect, compare and sync sc-jira.service loaded active running Syndeia Cloud 3.7 jira service: Integrated model-based engineering tool to generate, connect, compare and sync sc-pipeline.service loaded active running Syndeia Cloud 3.7 Pipeline service: Integrated model-based engineering tool to generate, connect, compare and sync sc-polarion.service loaded active running Syndeia Cloud 3.7 Polarion service: Integrated model-based engineering tool to generate, connect, compare and sync sc-restful.service loaded active running Syndeia Cloud 3.7 Restful service: Integrated model-based engineering tool to generate, connect, compare and sync sc-store.service loaded active running Syndeia Cloud 3.7 store service: Integrated model-based engineering tool to generate, connect, compare and sync sc-swpdm.service loaded active running Syndeia Cloud 3.7 SolidWorks (SW) PDM service: Integrated model-based engineering tool to generate, connect, compare and sync sc-sysmlv2.service loaded active running Syndeia Cloud 3.7 SysMLv2 service: Integrated model-based engineering tool to generate, connect, compare and sync sc-tc.service loaded active running Syndeia Cloud 3.7 TEAMCENTER service: Integrated model-based engineering tool to generate, connect, compare and sync sc-testrail.service loaded active running Syndeia Cloud 3.7 TestRail service: Integrated model-based engineering tool to generate, connect, compare and sync sc-twcloud.service loaded active running Syndeia Cloud 3.7 TWCloud service: Integrated model-based engineering tool to generate, connect, compare and sync sc-volta.service loaded active running Syndeia Cloud 3.7 Volta service: Integrated model-based engineering tool to generate, connect, compare and sync sc-wc.service loaded active running Syndeia Cloud 3.7 Windchill service: Integrated model-based engineering tool to generate, connect, compare and sync sc-web-gateway.service loaded active running Syndeia Cloud 3.7 web-gateway service: Integrated model-based engineering tool to generate, connect, compare and sync LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 33 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.

Step 3: Verify Services are Enabled on Boot
The playbook automatically enables services to start on boot. You can verify this with:

systemctl list-unit-files 'sc-*.service' cassandra.service janusgraph.service kafka.service --no-pager
[user@syndeia-server ~]$ systemctl list-unit-files 'sc-*.service' cassandra.service janusgraph.service kafka.service --no-pager UNIT FILE STATE cassandra.service enabled janusgraph.service enabled kafka.service enabled sc-ado.service enabled sc-aras.service enabled sc-artifactory.service enabled sc-auth.service enabled sc-bitbucket.service enabled sc-codebeamer.service enabled sc-collaborator.service enabled sc-confluence.service enabled sc-doors.service enabled sc-dscr.service enabled sc-dse3.service enabled sc-dt.service enabled sc-genesys.service enabled sc-github.service enabled sc-gitlab.service enabled sc-graph.service enabled sc-jama.service enabled sc-jira.service enabled sc-pipeline.service enabled sc-polarion.service enabled sc-restful.service enabled sc-store.service enabled sc-swpdm.service enabled sc-sysmlv2.service enabled sc-tc.service enabled sc-testrail.service enabled sc-twcloud.service enabled sc-volta.service enabled sc-wc.service enabled sc-web-gateway.service enabled 33 unit files listed.

Step 4: Login to Syndeia Cloud:

You can now access the Syndeia Cloud web interface (e.g., http://<your-server-ip>:9000) and log in using the username super.user and the default password (syn45ia). You should be greeted with a dashboard displaying three pie graphs.

image-20251204-003304.png

Note: The graphs may not load immediately after first boot. If you do not see them, try refreshing your browser.

5. Troubleshooting

This section outlines how to address common issues that may arise during deployment.

5.1 The "Idempotent" Design

The Ansible playbook provided with this package is designed to be idempotent.

What this means for you:
If the installation fails with an error, you do not need to uninstall, delete files, or perform manual cleanup.

  1. Read the error message provided by Ansible.

  2. Fix the specific issue (e.g., correct a typo in customer_config.yml, add more RAM to the server, or fix a network rule).

  3. Re-run the exact same Ansible command.

The playbook recognizes which steps have already completed successfully and will skip them, resuming work only on the parts that changed or failed.

5.2 Common Errors and Resolutions

Error Type

Symptoms / Ansible Output

Likely Cause & Resolution

SSH / Connection

UNREACHABLE, Permission denied (publickey,password), or Authentication failed

Cause: The Control Node cannot SSH to the Target Server, or the ansible_user is incorrect.
Resolution: Check your inventory.ini. Ensure the path to your SSH key is correct and that the user specified has sudo privileges on the Target Server.

Sudo Password

Missing sudo password or Incorrect sudo password

Cause: The playbook requires root privileges but the password was not provided or was wrong.
Resolution: When running the playbook, ensure you type the sudo password correctly when prompted by the BECOME password: prompt.

Missing Files

msg: Source file not found

Cause: The syndeia-cloud-3.7*.zip or license files are not in the expected directories.
Resolution: Review Stage 1, Steps 3 & 6. Ensure the zip file is in ~/syndeia-software and (if applicable) the license is in ~/syndeia-license. Re-run the playbook after moving the files.

Download Failures

HTTP Error 404, Connection timed out (During dependency installation)

Cause: The Target Server does not have internet access, or the repository is temporarily unavailable.
Resolution: If your server is offline, ensure you performed Stage 1, Step 7 (Staging Offline Dependencies). If the files are in /tmp/syndeia_downloads, the playbook will use them instead of trying to download.

Service Timeout

FAILED! => {"msg": "Wait for port 9042 to become available... timed out"}

Cause: Cassandra, Kafka, or JanusGraph is taking too long to start, often due to insufficient RAM or CPU.
Resolution: Check that the Target Server meets the minimum hardware requirements. You can simply re-run the playbook; often, the service will finish starting during the second attempt.

5.3 Diagnosing Service Failures

If the playbook finishes but a specific service is not running (see Stage 4, Step 2), you can inspect the system logs on the Target Server to determine why.

To view the logs for a specific service:

# Syntax: journalctl -u <service-name> -f # Example: Check the logs for the Web Gateway journalctl -u sc-web-gateway -f # Example: Check the logs for Cassandra journalctl -u cassandra -f

To check the status of a service:

systemctl status sc-store

5.4 Re-running the Playbook

Once you have corrected the issue (modified the configuration file, moved a missing file, or fixed a network issue), navigate back to the ansible directory on the Control Node and execute the run command again:

cd ~/syndeia-cloud-3.7*-ansible ansible-playbook install_syndeia.ansible.yml --extra-vars "@customer_config.yml"