find file location sent as a non-compressed artifact

0

I have a python greengrass component that in itself is in a compressed artifact. I also have a non-compressed artifact in test/route.nmea that i want to access from within the python component.

 "Artifacts": [
        {
          "URI": "s3://jeteye/components/artifacts/au.com.company.gg_gps_publish/0.0.123/gg_gps_publish.zip",
          "Unarchive": "ZIP"
        },
        {
          "URI": "s3://jeteye/components/artifacts/au.com.company.gg_gps_publish/0.0.123/test/route.nmea",
          "Unarchive": "NONE"
        }

i tried: g_nmea_file = os.path.dirname(os.path.abspath(__file__)) + '/../test/route.nmea' but that ends up pointing to the decompressed artifact directory :

/greengrass/v2/packages/artifacts-unarchived/au.com.company.gg_gps_publish/0.0.123/gg_gps_publish/test/route.nmea

is there a greengrass call to get access the non-unarchived artifact directory like:

/greengrass/v2/packages/artifacts/au.com.company.gg_gps_publish/0.0.123/gg_gps_publish/

?

I have also tried to pass in the {artifacts:path} variable that is available in the receipe by adding it to a config:

 "ComponentConfiguration": {
    "DefaultConfiguration": {
      "GGV2ComponentConfig": {
        "current_version" : "0.0.123",
        "gps_tick_topic" : "gps/tick",
        "timeout_sec" : 10,
        "test_nmea_file" : "{artifacts:path}/test/route.nmea"
      },

and passing it into the python like:

  "Lifecycle": {
        "Install": "pip3 install awsiotsdk pynmeagps",
        "Run": {
          "Script": "python3 -u {artifacts:decompressedPath}/gg_gps_publish/main.py '{configuration:/GGV2ComponentConfig}'",
          "RequiresPrivilege": "false"
        }
      },

when i read the GGV2ComponentConfig.test_nmea_file configuration , the {artifacts:path} part is empty

clogwog
asked 2 years ago318 views
1 Answer
1
Accepted Answer

Hello,

{artifacts:path} would be the proper way to find the artifact location. You cannot use that string interpolation in the configuration however. Instead, you may pass it into your component using the command line or environment variables, for example in your recipe

lifecycle:
  run:
    script: python3 -u run_abc.py
    setEnv:
      ARTIFACT_PATH: "{artifacts:path}"
AWS
EXPERT
answered 2 years ago
profile picture
EXPERT
reviewed 10 months ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions