Hot deploy does not detect files in subdirectories on first start of container

Hi Everyone.

We are using zato on with a docker-compose file. We are trying to organize our services files in modules. So we have linked our external directory (named zato) where all python files are located to /opt/hot-deploy/services/ to enable hot deployment.

Here is the docker-compose file

version: "3"

services:
  zato1:
    build:
      context: .
    container_name: zato1
    hostname: zato1
    ports:
      - "8801:8183"
      - "11223:11223"
    environment:
      ZATO_WEB_ADMIN_PASSWORD: "my_password"
    volumes:
      - ./zato/:/opt/hot-deploy/services.  # <--- Here will link our directory (named zato) to /opt/hot-deploy/services
      - ./tmp:/opt/zato/tmp
      - ./zato-enmasse.yml:/opt/zato/zato-enmasse.yml
      - ./config/ansible/zato-quickstart-02.yaml:/zato-ansible/zato-quickstart-02.yaml

Here is our zato directory tree structure

.../zato/
    |
    bills/
          __ini__.py
          bills-file1.py
          bills-file2.py
    |
    customers/
          __init__.py
          customer-file1.py
          customer-file2.py
    |
    features/
          __init__.py
        ...
    |
    general-file1.py
    general-file2.py
    general-file3.py
    ....

And here is the /opt/hot-deploy/services/ directory structure inside zato container

/opt/hot-deploy/services/
    |
    bills/
          __ini__.py
          bills-file1.py
          bills-file2.py
    |
    customers/
          __init__.py
          customer-file1.py
          customer-file2.py
    |
    features/
          __init__.py
        ...
    |
    general-file1.py
    general-file2.py
    general-file3.py
    ....

The issue we are facing is that, at the first build and run of our docker-compose, only files located directly in /opt/hot-deploy/services/ (i.e. general-file1.py, general-file2.py, general-file3.py, …) are deployed automatically. Other files in subdirectories (bills, features, …) are not. There are no error in logs.

zato38_2   | {"process": 3017, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SERVER.CONF`", "timestamp": "2022-08-20 16:18:16,085", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3017, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/PICKUP.CONF`", "timestamp": "2022-08-20 16:18:16,092", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3017, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SIMPLE-IO.CONF`", "timestamp": "2022-08-20 16:18:16,094", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3017, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SSO.CONF`", "timestamp": "2022-08-20 16:18:16,095", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3017, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SQL.CONF`", "timestamp": "2022-08-20 16:18:16,193", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3017, "name": "zato", "lineno": 0, "event": "STARTING ZATO 3.2+REV.57E4E053-PY3.8.10-UBUNTU.20.04-FOCAL", "timestamp": "2022-08-20 16:18:16,346", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3017, "name": "zato", "lineno": 0, "event": "LISTENING AT: HTTP://0.0.0.0:17010 (3017)", "timestamp": "2022-08-20 16:18:16,350", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "BOOTING PROCESS WITH PID: 3156", "timestamp": "2022-08-20 16:18:16,356", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.SERVICE.SLOW_RESPONSES.JSON` (ZATO.SERVICE.SLOW_RESPONSES)", "timestamp": "2022-08-20 16:18:16,360", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.SERVICE.USAGE_SAMPLES.JSON` (ZATO.SERVICE.USAGE_SAMPLES)", "timestamp": "2022-08-20 16:18:16,361", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.SERVICE.CURRENT_USAGE.JSON` (ZATO.SERVICE.CURRENT_USAGE)", "timestamp": "2022-08-20 16:18:16,362", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.PUBSUB.METADATA.JSON` (ZATO.PUBSUB.METADATA)", "timestamp": "2022-08-20 16:18:16,363", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "PREFERRED ADDRESS OF `SERVER1@QUICKSTART-845670` (PID: 3156) IS `HTTP://192.168.208.2:17010`", "timestamp": "2022-08-20 16:18:16,662", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.common.kvdb.api", "lineno": 0, "event": "REDIS PING OK -> STRICTREDIS<CONNECTIONPOOL<CONNECTION<HOST=LOCALHOST,PORT=6379,DB=0>>>", "timestamp": "2022-08-20 16:18:17,459", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT CONFIGURATION FROM `/OPT/HOT-DEPLOY/SERVICES` (ENV. VARIABLE FOUND -> ZATO_HOT_DEPLOY_DIR)", "timestamp": "2022-08-20 16:18:17,460", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING USER-CONFIG FROM `/OPT/HOT-DEPLOY/USER-CONF` (ENV. VARIABLE FOUND -> ZATO_USER_CONF_DIR)", "timestamp": "2022-08-20 16:18:17,461", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING USER-CONFIG FROM `/TMP/ZATO-USER-CONF` (ENV. VARIABLE FOUND -> ZATO_USER_CONF_DIR)", "timestamp": "2022-08-20 16:18:17,462", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT DIRECTORY `/OPT/HOT-DEPLOY/SERVICES` (HOTDEPLOY.USERPREFIX)", "timestamp": "2022-08-20 16:18:17,463", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.service.store", "lineno": 0, "event": "DEPLOYING AND CACHING INTERNAL SERVICES (SERVER1)", "timestamp": "2022-08-20 16:18:17,483", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_WHITELIST']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.JSON_RPC.CREATE'>`", "timestamp": "2022-08-20 16:18:17,739", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_WHITELIST']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.JSON_RPC.EDIT'>`", "timestamp": "2022-08-20 16:18:17,741", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_WHITELIST']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.JSON_RPC._CREATEEDIT'>`", "timestamp": "2022-08-20 16:18:17,744", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_NAME']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.WEB_SOCKET.CREATE'>`", "timestamp": "2022-08-20 16:18:17,748", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_NAME']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.WEB_SOCKET.EDIT'>`", "timestamp": "2022-08-20 16:18:17,751", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['ADDRESS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.WEB_SOCKET.GETLIST'>`", "timestamp": "2022-08-20 16:18:17,753", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['CID', 'STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.PASSWORD_RESET.PASSWORDRESET'>`", "timestamp": "2022-08-20 16:18:18,031", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.USER.LOGIN'>`", "timestamp": "2022-08-20 16:18:18,040", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.USER.LOGOUT'>`", "timestamp": "2022-08-20 16:18:18,041", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.USER.SEARCH'>`", "timestamp": "2022-08-20 16:18:18,043", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.service.store", "lineno": 0, "event": "DEPLOYED AND CACHED 562 INTERNAL SERVICES (7.5 MB) (SERVER1)", "timestamp": "2022-08-20 16:18:19,052", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "DEPLOYING USER-DEFINED SERVICES (SERVER1)", "timestamp": "2022-08-20 16:18:19,054", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "DEPLOYED 30 USER-DEFINED SERVICES  (SERVER1)", "timestamp": "2022-08-20 16:18:19,446", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "ADDED SUB `ZPSK.REST.C56449` -> `/ZATO/TEST/SAMPLE`", "timestamp": "2022-08-20 16:18:19,574", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "ADDED SUB `ZPSK.REST.26DB31` -> `/ZATO/DEMO/SAMPLE`", "timestamp": "2022-08-20 16:18:19,575", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato", "lineno": 0, "event": "RPC ADDRESS NOT FOUND FOR QUICKSTART-845670:SERVER1 -> `'HTTP://NONE:NONE'` (ZATO.SERVICE.RPC-SERVICE-INVOKER)", "timestamp": "2022-08-20 16:18:19,802", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "FIRST WORKER OF `SERVER1` IS 3156", "timestamp": "2022-08-20 16:18:19,808", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.common.ipc.subscriber.Subscriber", "lineno": 0, "event": "ESTABLISHED SUB/BIND TO IPC:///TMP/ZATO-IPC-QUICKSTART_845670_SERVER1_3156 (SELF.PID: 3156)", "timestamp": "2022-08-20 16:18:19,819", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.server.base.parallel", "lineno": 0, "event": "STARTED `SERVER1@QUICKSTART-845670` (PID: 3156)", "timestamp": "2022-08-20 16:18:20,019", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.helpers.input-logger", "lineno": 0, "event": "{'request.payload': 'Sample payload for a startup service (first worker)', 'channel': 'startup-service', 'cid': '4f92f0f0684f39432d7ec3d2', 'data_format': 'dict', 'environ': {}, 'impl_name': 'zato.server.service.internal.helpers.InputLogger', 'invocation_time': datetime.datetime(2022, 8, 20, 16, 18, 20, 211579), 'job_type': '', 'name': 'zato.helpers.input-logger', 'slow_threshold': 99999, 'usage': 0, 'wsgi_environ': {'zato.request_ctx.async_msg': Bunch(action='101802', channel='startup-service', cid='4f92f0f0684f39432d7ec3d2', payload='Sample payload for a startup service (first worker)', service='zato.helpers.input-logger'), 'zato.request_ctx.in_reply_to': None, 'zato.request_ctx.fanout_cid': None, 'zato.request_ctx.parallel_exec_cid': None}}", "timestamp": "2022-08-20 16:18:20,211", "level": "info", "structlog": "json", "hostname": "zato38_2"}

But as soon as we try to edit one file in a subdirectory, changes are detected and deployment are made for the edited file.

zato38_2   | {"process": 3156, "name": "zato.hot-deploy.create", "lineno": 0, "event": "CREATING TAR ARCHIVE", "timestamp": "2022-08-20 16:27:18,347", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.hot-deploy.create", "lineno": 0, "event": "CREATING TAR ARCHIVE", "timestamp": "2022-08-20 16:27:18,353", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.hot-deploy.create", "lineno": 0, "event": "DEPLOYED 1 SERVICE FROM `/OPT/HOT-DEPLOY/SERVICES/CUSTOMERS/CUSTOMER-FILE1.PY` -> ['CUSTOMER-FILE1']", "timestamp": "2022-08-20 16:27:18,567", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.hot-deploy.create", "lineno": 0, "event": "CREATING TAR ARCHIVE", "timestamp": "2022-08-20 16:27:19,514", "level": "info", "structlog": "json", "hostname": "zato38_2"}
zato38_2   | {"process": 3156, "name": "zato.hot-deploy.create", "lineno": 0, "event": "CREATING TAR ARCHIVE", "timestamp": "2022-08-20 16:27:19,516", "level": "info", "structlog": "json", "hostname": "zato38_2"}

I think maybe, the hot-deployment can not detect files in subdirectories at the first build, so i feel like we have to do it manually. Do you have any idea about we might have missed here? Or is here a command to deploy files by specifying a path?

Best regards

Hi Steve,

I have not analyzed deeply yet what you described but can you try using the ZATO_HOT_DEPLOY_DIR environment variable?

You can make it point to multiple directories with paths separated by colons, e.g. “ZATO_HOT_DEPLOY_DIR=/path/1:/path/2:/path/3”.

Regards.

Hi. Thank you for the fast reply

I have set as suggested. It seems like the environment variable ZATO_HOT_DEPLOY_DIR has no effect.

version: "3"

services:
  zato1:
    build:
      context: .
    container_name: zato_1
    hostname: zato_1
    ports:
      - "8001:8183"
      - "11223"
    environment:
      ZATO_WEB_ADMIN_PASSWORD: "my_password"
      ZATO_HOT_DEPLOY_DIR: "/opt/hot-deploy/services:/opt/hot-deploy/services/bills"  # <---- SETTING MULTIPLE PATHS FOR THE HOT DEPLOYMENT
    volumes:
      - ./zato/:/opt/hot-deploy/services
      - ./tmp:/opt/zato/tmp
      - ./zato-enmasse.yml:/opt/zato/zato-enmasse.yml
      - ./config/ansible/zato-quickstart-02.yaml:/zato-ansible/zato-quickstart-02.yaml

When I check inside the container. I can see that the environment is set

root@zato38_1:/opt/zato# echo $ZATO_HOT_DEPLOY_DIR
/opt/hot-deploy/services:/opt/hot-deploy/services/bills

Files inside bills directory are not deployed

Ok, what is the content of the server’s server.log file?

Here are the logs

{"process": 3057, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SERVER.CONF`", "timestamp": "2022-08-20 18:08:02,092", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3057, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/PICKUP.CONF`", "timestamp": "2022-08-20 18:08:02,101", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3057, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SIMPLE-IO.CONF`", "timestamp": "2022-08-20 18:08:02,103", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3057, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SSO.CONF`", "timestamp": "2022-08-20 18:08:02,105", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3057, "name": "zato.common.util.api", "lineno": 0, "event": "GETTING CONFIGURATION FROM `/OPT/ZATO/ENV/QS-1/SERVER1/CONFIG/REPO/SQL.CONF`", "timestamp": "2022-08-20 18:08:02,115", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3057, "name": "zato", "lineno": 0, "event": "STARTING ZATO 3.2+REV.57E4E053-PY3.8.10-UBUNTU.20.04-FOCAL", "timestamp": "2022-08-20 18:08:02,226", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3057, "name": "zato", "lineno": 0, "event": "LISTENING AT: HTTP://0.0.0.0:17010 (3057)", "timestamp": "2022-08-20 18:08:02,231", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "BOOTING PROCESS WITH PID: 3189", "timestamp": "2022-08-20 18:08:02,238", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.SERVICE.SLOW_RESPONSES.JSON` (ZATO.SERVICE.SLOW_RESPONSES)", "timestamp": "2022-08-20 18:08:02,244", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.SERVICE.USAGE_SAMPLES.JSON` (ZATO.SERVICE.USAGE_SAMPLES)", "timestamp": "2022-08-20 18:08:02,245", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.SERVICE.CURRENT_USAGE.JSON` (ZATO.SERVICE.CURRENT_USAGE)", "timestamp": "2022-08-20 18:08:02,247", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SKIPPING REPO DATA PATH `/OPT/ZATO/ENV/QS-1/SERVER1/WORK/KVDB/V10/ZATO.PUBSUB.METADATA.JSON` (ZATO.PUBSUB.METADATA)", "timestamp": "2022-08-20 18:08:02,248", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "PREFERRED ADDRESS OF `SERVER1@QUICKSTART-883464` (PID: 3189) IS `HTTP://192.168.208.3:17010`", "timestamp": "2022-08-20 18:08:02,661", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.common.kvdb.api", "lineno": 0, "event": "REDIS PING OK -> STRICTREDIS<CONNECTIONPOOL<CONNECTION<HOST=LOCALHOST,PORT=6379,DB=0>>>", "timestamp": "2022-08-20 18:08:03,467", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT CONFIGURATION FROM `/OPT/HOT-DEPLOY/SERVICES` (ENV. VARIABLE FOUND -> ZATO_HOT_DEPLOY_DIR)", "timestamp": "2022-08-20 18:08:03,469", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING USER-CONFIG FROM `/OPT/HOT-DEPLOY/USER-CONF` (ENV. VARIABLE FOUND -> ZATO_USER_CONF_DIR)", "timestamp": "2022-08-20 18:08:03,471", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING USER-CONFIG FROM `/TMP/ZATO-USER-CONF` (ENV. VARIABLE FOUND -> ZATO_USER_CONF_DIR)", "timestamp": "2022-08-20 18:08:03,472", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT DIRECTORY `/OPT/HOT-DEPLOY/SERVICES` (HOTDEPLOY.USERPREFIX)", "timestamp": "2022-08-20 18:08:03,474", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.service.store", "lineno": 0, "event": "DEPLOYING AND CACHING INTERNAL SERVICES (SERVER1)", "timestamp": "2022-08-20 18:08:03,494", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_WHITELIST']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.JSON_RPC.CREATE'>`", "timestamp": "2022-08-20 18:08:03,621", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_WHITELIST']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.JSON_RPC.EDIT'>`", "timestamp": "2022-08-20 18:08:03,625", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_WHITELIST']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.JSON_RPC._CREATEEDIT'>`", "timestamp": "2022-08-20 18:08:03,628", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_NAME']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.WEB_SOCKET.CREATE'>`", "timestamp": "2022-08-20 18:08:03,635", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['SERVICE_NAME']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.WEB_SOCKET.EDIT'>`", "timestamp": "2022-08-20 18:08:03,639", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['ADDRESS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.CHANNEL.WEB_SOCKET.GETLIST'>`", "timestamp": "2022-08-20 18:08:03,642", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; INPUT_REQUIRED WILL TAKE PRIORITY, `['ACTIVE_STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.PUBSUB.ENDPOINT.UPDATEENDPOINTQUEUE'>`", "timestamp": "2022-08-20 18:08:04,064", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['CID', 'STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.PASSWORD_RESET.PASSWORDRESET'>`", "timestamp": "2022-08-20 18:08:04,208", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.USER.LOGIN'>`", "timestamp": "2022-08-20 18:08:04,226", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.USER.LOGOUT'>`", "timestamp": "2022-08-20 18:08:04,228", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "SHARED ELEMENTS FOUND; OUTPUT_REQUIRED WILL TAKE PRIORITY, `['STATUS']`, `<CLASS 'ZATO.SERVER.SERVICE.INTERNAL.SSO.USER.SEARCH'>`", "timestamp": "2022-08-20 18:08:04,232", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.service.store", "lineno": 0, "event": "DEPLOYED AND CACHED 562 INTERNAL SERVICES (7.5 MB) (SERVER1)", "timestamp": "2022-08-20 18:08:05,186", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "DEPLOYING USER-DEFINED SERVICES (SERVER1)", "timestamp": "2022-08-20 18:08:05,188", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "DEPLOYED 0 USER-DEFINED SERVICES  (SERVER1)", "timestamp": "2022-08-20 18:08:05,245", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "ADDED SUB `ZPSK.REST.D63703` -> `/ZATO/TEST/SAMPLE`", "timestamp": "2022-08-20 18:08:05,329", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "ADDED SUB `ZPSK.REST.3E89F1` -> `/ZATO/DEMO/SAMPLE`", "timestamp": "2022-08-20 18:08:05,331", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.file_transfer.observer.base", "lineno": 0, "event": "LOCAL TRANSFER PATH `'/TMP/ZATO-USER-CONF'` DOES NOT EXIST (ZATO.PICKUP.USER_CONF._TMP_ZATO_USER_CONF) (C:1 D:0:00:00.000035 T:LOCAL-SNAPSHOT)", "timestamp": "2022-08-20 18:08:05,522", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato", "lineno": 0, "event": "RPC ADDRESS NOT FOUND FOR QUICKSTART-883464:SERVER1 -> `'HTTP://NONE:NONE'` (ZATO.SERVICE.RPC-SERVICE-INVOKER)", "timestamp": "2022-08-20 18:08:05,557", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "FIRST WORKER OF `SERVER1` IS 3189", "timestamp": "2022-08-20 18:08:05,561", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.common.ipc.subscriber.Subscriber", "lineno": 0, "event": "ESTABLISHED SUB/BIND TO IPC:///TMP/ZATO-IPC-QUICKSTART_883464_SERVER1_3189 (SELF.PID: 3189)", "timestamp": "2022-08-20 18:08:05,573", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "STARTED `SERVER1@QUICKSTART-883464` (PID: 3189)", "timestamp": "2022-08-20 18:08:05,772", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.helpers.input-logger", "lineno": 0, "event": "{'request.payload': 'Sample payload for a startup service (first worker)', 'channel': 'startup-service', 'cid': '42ea52ba513e511993e587e7', 'data_format': 'dict', 'environ': {}, 'impl_name': 'zato.server.service.internal.helpers.InputLogger', 'invocation_time': datetime.datetime(2022, 8, 20, 18, 8, 5, 968743), 'job_type': '', 'name': 'zato.helpers.input-logger', 'slow_threshold': 99999, 'usage': 0, 'wsgi_environ': {'zato.request_ctx.async_msg': Bunch(action='101802', channel='startup-service', cid='42ea52ba513e511993e587e7', payload='Sample payload for a startup service (first worker)', service='zato.helpers.input-logger'), 'zato.request_ctx.in_reply_to': None, 'zato.request_ctx.fanout_cid': None, 'zato.request_ctx.parallel_exec_cid': None}}", "timestamp": "2022-08-20 18:08:05,968", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.file_transfer.observer.base", "lineno": 0, "event": "LOCAL TRANSFER PATH `'/TMP/ZATO-USER-CONF'` DOES NOT EXIST (ZATO.PICKUP.USER_CONF._TMP_ZATO_USER_CONF) (C:2 D:0:00:05.002169 T:LOCAL-SNAPSHOT)", "timestamp": "2022-08-20 18:08:10,524", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.file_transfer.observer.base", "lineno": 0, "event": "LOCAL FILE TRANSFER PATH `/TMP/ZATO-USER-CONF` FOUND SUCCESSFULLY (ZATO.PICKUP.USER_CONF._TMP_ZATO_USER_CONF) (C:3 D:0:00:10.005582 T:LOCAL-SNAPSHOT)", "timestamp": "2022-08-20 18:08:15,528", "level": "info", "structlog": "json", "hostname": "zato38_1"}
{"process": 3189, "name": "zato.server.file_transfer.observer.base", "lineno": 0, "event": "STARTING LOCAL FILE OBSERVER `/TMP/ZATO-USER-CONF` FOR `ZATO.PICKUP.USER_CONF._TMP_ZATO_USER_CONF` (LOCAL-SNAPSHOT)", "timestamp": "2022-08-20 18:08:15,530", "level": "info", "structlog": "json", "hostname": "zato38_1"}

PS: You will notice the logs structure is different. It is because, we have changed the default logger for convienient reason. But the content is the same

Can you check if there is anything overwriting this variable anywhere? Does the string ZATO_HOT_DEPLOY_DIR exist anywhere? For instance, in ~/.bashrc or in any other file in the container’s file system?

Hi,

Sorry for the late reply. I was troubleshooting the issue. I’ve found out that my container starts in root. That’s why I’ve had this in root

root@zato38_1:/opt/zato# echo $ZATO_HOT_DEPLOY_DIR
/opt/hot-deploy/services:/opt/hot-deploy/services/bills

But I’ve had this with zato user

root@zato38_1:/opt/zato# sudo su zato
root@zato38_1:/opt/zato$ echo $ZATO_HOT_DEPLOY_DIR
/opt/hot-deploy/services

Now I have set the env variable for the zato user but the deployment of bills subdirectory files still does not work.

root@zato38_1:/opt/zato# sudo su zato
root@zato38_1:/opt/zato$ echo $ZATO_HOT_DEPLOY_DIR
/opt/hot-deploy/services:/opt/hot-deploy/services/bills

I have tried to locate all files that contain word ZATO_HOT_DEPLOY_DIR. Essentially I have found 5 files

  • /opt/zato/.bashrc
  • /opt/zato/env/qs-1/start-web-admin-fg.sh
  • /opt/zato/env/qs-1/start-server-fg.sh
  • /opt/zato/env/qs-1/start-scheduler-fg.sh
  • /opt/zato/env/qs-1/start-load-balancer-fg.sh

It seems like only /opt/zato/.bashrc has been updated, but not others

zato@zato38_1:/opt/hot-deploy/services/$ grep -rnw '/opt/zato' -e "ZATO_HOT_DEPLOY_DIR"
/opt/zato/.bashrc:121:export ZATO_HOT_DEPLOY_DIR=/opt/hot-deploy/services:/opt/hot-deploy/services/bills
/opt/zato/3.2.0/code/zato-server/src/zato/server/base/parallel/__init__.py:458:        items = os.environ.get('ZATO_HOT_DEPLOY_DIR', '')
/opt/zato/3.2.0/code/zato-server/src/zato/server/base/parallel/__init__.py:471:                logger.info('Adding hot-deployment configuration from `%s` (env. variable found -> ZATO_HOT_DEPLOY_DIR)', name)
Binary file /opt/zato/3.2.0/code/zato-server/src/zato/server/base/parallel/__pycache__/__init__.cpython-38.pyc matches
/opt/zato/logs/json.log:15:{"process": 2760, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT CONFIGURATION FROM `/OPT/HOT-DEPLOY/SERVICES` (ENV. VARIABLE FOUND -> ZATO_HOT_DEPLOY_DIR)", "timestamp": "2022-08-20 17:12:16,515", "level": "info", "structlog": "json", "hostname": "zato38_2"}
/opt/zato/logs/json.log:55:{"process": 3189, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT CONFIGURATION FROM `/OPT/HOT-DEPLOY/SERVICES` (ENV. VARIABLE FOUND -> ZATO_HOT_DEPLOY_DIR)", "timestamp": "2022-08-20 17:12:29,863", "level": "info", "structlog": "json", "hostname": "zato38_1"}
...
...
...
/opt/zato/logs/json.log:1484:{"process": 3195, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT CONFIGURATION FROM `/OPT/HOT-DEPLOY/SERVICES` (ENV. VARIABLE FOUND -> ZATO_HOT_DEPLOY_DIR)", "timestamp": "2022-08-20 23:15:49,910", "level": "info", "structlog": "json", "hostname": "zato38_2"}
/opt/zato/env/qs-1/start-web-admin-fg.sh:4:export ZATO_HOT_DEPLOY_DIR=/opt/hot-deploy/services
/opt/zato/env/qs-1/start-server-fg.sh:4:export ZATO_HOT_DEPLOY_DIR=/opt/hot-deploy/services
/opt/zato/env/qs-1/server1/logs/server.log:15:{"process": 3196, "name": "zato.server.base.parallel", "lineno": 0, "event": "ADDING HOT-DEPLOYMENT CONFIGURATION FROM `/OPT/HOT-DEPLOY/SERVICES` (ENV. VARIABLE FOUND -> ZATO_HOT_DEPLOY_DIR)", "timestamp": "2022-08-20 23:15:49,826", "level": "info", "structlog": "json", "hostname": "zato38_1"}
/opt/zato/env/qs-1/start-scheduler-fg.sh:4:export ZATO_HOT_DEPLOY_DIR=/opt/hot-deploy/services
/opt/zato/env/qs-1/start-load-balancer-fg.sh:4:export ZATO_HOT_DEPLOY_DIR=/opt/hot-deploy/services

Hi guyz,

Could we have an update on this please? Have you had time to check that.
Kindly help us on this issue

Regards

Hello Steve,

I am going to return to this subject later in this week or in the next one.

Regards.

Hi Steve,

please try it out with the latest image of the Quickstart container using this environment variable: Zato_Hot_Deploy_Dir.

https://zato.io/en/docs/admin/guide/install/docker.html

Also, instead of ZATO_WEB_ADMIN_PASSWORD, you can use Zato_Dashboard_Password. The former is still recognized, as you know, but the latter is a part of a bigger push towards making the names of environment variables less difficult to read.

Regards.

Hi Dsuch,

Thank for time. I have tried the latest image (also delete local image). During the ansible running, we receive a timeout.

docker run --pull=always -it --rm -p 22022:22 -p 8183:8183 -p 11223:11223 -p 17010:17010 \
  --name zato-3.2-quickstart \
  ghcr.io/zatosource/zato-3.2-quickstart
PLAY [all] *********************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************
ok: [localhost]

TASK [Set facts (init)] ********************************************************************************************************
ok: [localhost]

TASK [Update and upgrade apt packages (01)] ************************************************************************************
skipping: [localhost]

TASK [Install preliminary packages (01)] ***************************************************************************************
skipping: [localhost]

TASK [Install MySQL (01)] ******************************************************************************************************
skipping: [localhost]

TASK [Ensure the expected locales are generated (01)] **************************************************************************
skipping: [localhost]

TASK [Configure the firewall (ufw -> basic) (01)] ******************************************************************************
skipping: [localhost]

TASK [Configure the firewall (ufw -> local connections) (01)] ******************************************************************
skipping: [localhost] => (item=10.0.0.0/8) 
skipping: [localhost] => (item=172.16.0.0/12) 
skipping: [localhost] => (item=192.168.0.0/16) 

TASK [Import the GPG signing key for PostgreSQL 14 (01)] ***********************************************************************
skipping: [localhost]

TASK [Import the GPG signing key for Zato 3.2 (01)] ****************************************************************************
skipping: [localhost]

TASK [Get the system's codename (01)] ******************************************************************************************
skipping: [localhost]

TASK [Add the apt repository for PostgreSQL 14 (01)] ***************************************************************************
skipping: [localhost]

TASK [Add the apt repository for Zato 3.2 (01)] ********************************************************************************
skipping: [localhost]

TASK [Update apt cache before the installation of packages (01)] ***************************************************************
skipping: [localhost]

TASK [Install PostgreSQL 14 (01)] **********************************************************************************************
skipping: [localhost]

TASK [Install Zato 3.2 (01)] ***************************************************************************************************
skipping: [localhost]

TASK [Prepare work directories for Ansible (01)] *******************************************************************************
skipping: [localhost]

TASK [Install Zato 3.2 updates (01)] *******************************************************************************************
skipping: [localhost]

TASK [Update and upgrade apt packages (02)] ************************************************************************************
changed: [localhost]

TASK [Install NodeJS (for testing) (02)] ***************************************************************************************
skipping: [localhost]

TASK [Install Playwright (for testing) (02)] ***********************************************************************************
skipping: [localhost]

TASK [Install Geany (for Playwright) (02)] *************************************************************************************
skipping: [localhost]

TASK [Clean up extra installation artifacts (02)] ******************************************************************************
changed: [localhost]

TASK [Make sure that PostgreSQL is started (02)] *******************************************************************************
changed: [localhost]

TASK [Make sure that MySQL is started (02)] ************************************************************************************
changed: [localhost]

TASK [Make sure that Redis is started (02)] ************************************************************************************
changed: [localhost]

TASK [Regenerate host SSH keys (02)] *******************************************************************************************
changed: [localhost]

TASK [Restart the SSH server after regenerating its keys (02)] *****************************************************************
changed: [localhost]

TASK [Drop the SQL database if it exists (PG -> main) (02)] ********************************************************************
ok: [localhost]

TASK [Drop the SQL database if it exists (MySQL -> main) (02)] *****************************************************************
ok: [localhost]

TASK [Drop the SQL database if it exists (PG -> pub/sub) (02)] *****************************************************************
ok: [localhost]

TASK [Drop the SQL database if it exists (MySQL -> pub/sub) (02)] **************************************************************
ok: [localhost]

TASK [Create the SQL database (PG -> main) (02)] *******************************************************************************
changed: [localhost]

TASK [Create the SQL database (MySQL -> main) (02)] ****************************************************************************
changed: [localhost]

TASK [Create the SQL database (PG -> pub/sub) (02)] ****************************************************************************
changed: [localhost]

TASK [Create the SQL database (MySQL -> pub/sub) (02)] *************************************************************************
changed: [localhost]

TASK [Drop the SQL user if it exists (PG -> main) (02)] ************************************************************************
ok: [localhost]

TASK [Drop the SQL user if it exists (MySQL -> main) (02)] *********************************************************************
ok: [localhost]

TASK [Drop the SQL user if it exists (PG -> pub/sub) (02)] *********************************************************************
ok: [localhost]

TASK [Drop the SQL user if it exists (MySQL -> pub/sub) (02)] ******************************************************************
ok: [localhost]

TASK [Create the SQL user (PG -> main) (02)] ***********************************************************************************
changed: [localhost]

TASK [Create the SQL user (MySQL -> main) (02)] ********************************************************************************
changed: [localhost]

TASK [Create the SQL user (PG -> pub/sub) (02)] ********************************************************************************
changed: [localhost]

TASK [Create the SQL user (MySQL -> pub/sub) (02)] *****************************************************************************
changed: [localhost]

TASK [Grant access to the SQL user (PG -> main) (02)] **************************************************************************
changed: [localhost]

TASK [Grant access to the SQL user (PG -> pub/sub) (02)] ***********************************************************************
changed: [localhost]

TASK [Configure PostgreSQL to listen on all interfaces (02)] *******************************************************************
changed: [localhost]

TASK [Enable password-based SSH connections (02)] ******************************************************************************
ok: [localhost]

TASK [Allow for SSH connections to be established from anywhere (02)] **********************************************************
changed: [localhost]

TASK [Restart PostgreSQL after its configuration was changed (02)] *************************************************************
changed: [localhost]

TASK [Restart MySQL after its configuration was changed (02)] ******************************************************************
changed: [localhost]

TASK [Restart the SSH server after its configuration was changed (02)] *********************************************************
changed: [localhost]

TASK [Set the SSH password for user 'zato' (02)] *******************************************************************************
changed: [localhost]

TASK [Install HashiCorp Vault (02)] ********************************************************************************************
skipping: [localhost]

TASK [Make sure all the previous processes started by user zato are stopped (02)] **********************************************
changed: [localhost]

TASK [Start HashiCorp Vault (dev) (02)] ****************************************************************************************
skipping: [localhost]

TASK [Make sure any previous environment is deleted (02)] **********************************************************************
changed: [localhost]

TASK [Create a quickstart environment (02)] ************************************************************************************
changed: [localhost]

TASK [Enable Redis (02)] *******************************************************************************************************
changed: [localhost]

TASK [Enable internal services (if testing) (02)] ******************************************************************************
skipping: [localhost]

TASK [Enable SSO (if testing) (02)] ********************************************************************************************
skipping: [localhost]

TASK [Prepare the work directory for configuration details (02)] ***************************************************************
changed: [localhost]

TASK [Store the environment's details in JSON (02)] ****************************************************************************
changed: [localhost]

TASK [Save SSH credentials (02)] ***********************************************************************************************
changed: [localhost]

TASK [Save Dashboard credentials (02)] *****************************************************************************************
changed: [localhost]

TASK [Save IDE credentials] ****************************************************************************************************
changed: [localhost]

TASK [Save database user's credentials (main) (02)] ****************************************************************************
changed: [localhost]

TASK [Save database user's credentials (pub/sub) (02)] *************************************************************************
changed: [localhost]

TASK [Create symlinks for backward compatibility (02)] *************************************************************************
changed: [localhost]

TASK [Copy SSH material (02)] **************************************************************************************************
skipping: [localhost]

TASK [Ensure scripts exist (zato) (02)] ****************************************************************************************
changed: [localhost]

TASK [Set Bash defaults (zato) (02)] *******************************************************************************************
changed: [localhost]

TASK [Set Bash defaults (root) (02)] *******************************************************************************************
changed: [localhost]

TASK [Set Bash defaults (root-level user) (02)] ********************************************************************************
skipping: [localhost]

TASK [Prepare default hot-deployment directories (02)] *************************************************************************
changed: [localhost]

TASK [Prepare per-component startup scripts (02)] ******************************************************************************
changed: [localhost]

TASK [Set extlib structure (02)] ***********************************************************************************************
skipping: [localhost]

TASK [Set filesystem permissions (02)] *****************************************************************************************
skipping: [localhost]

TASK [Start the quickstart environment (server) (02)] **************************************************************************
changed: [localhost]

TASK [Start the quickstart environment (dashboard) (02)] ***********************************************************************
changed: [localhost]

TASK [Start the quickstart environment (load balancer) (02)] *******************************************************************
changed: [localhost]

TASK [Start the quickstart environment (scheduler) (02)] ***********************************************************************
changed: [localhost]

TASK [Waiting for the environment to start (02)] *******************************************************************************

fatal: [localhost]: FAILED! => {"changed": true, "cmd": "~/current/bin/zato wait --path /opt/zato/env/qs-1/server1 --timeout 120 --silent\n", "delta": "0:02:01.614224", "end": "2022-08-25 19:17:43.905338", "msg": "non-zero return code", "rc": 28, "start": "2022-08-25 19:15:42.291114", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************************************************************
localhost                  : ok=55   changed=44   unreachable=0    failed=1    skipped=27   rescued=0    ignored=0   

Okay, ZATO_WEB_ADMIN_PASSWORD has been changed as recommended. We will check and update others env variable.

Thanks, please try it now with the latest image.

1 Like

Hello

It still doesn’t work at the start the of the container.
I have noticed that ZATO_HOT_DEPLOY_DIR is updated for the root user, not for the zato user. I think it might be because the container start on ROOT user, so if we update the ZATO_HOT_DEPLOY_DIR env, it will be updated for this user only.
To update ZATO_HOT_DEPLOY_DIR env for zato user, I have to

  • Connect into the container as zato user,
  • run command: zato stop
  • Then do export ZATO_HOT_DEPLOY_DIR=/opt/hot-deploy/services:/opt/hot-deploy/services/bills:/opt/hot-deploy/services/customers
  • run command: zato start

And it will work

Hi Steve, thanks. Yes, you are right, I just never run containers as user root so I was not aware of it. Regards.