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
preguntada hace 2 años329 visualizaciones
1 Respuesta
1
Respuesta aceptada

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
EXPERTO
respondido hace 2 años
profile picture
EXPERTO
revisado hace 10 meses

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas