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
已提问 2 年前329 查看次数
1 回答
1
已接受的回答

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
专家
已回答 2 年前
profile picture
专家
已审核 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则