npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@itentialopensource/automation-gateway-copy-files-from-git

v1.0.5

Published

Copy Files from Gitlab or Github to IAG

Downloads

8

Readme

Automation Gateway Copy Files From Git

Table of Contents

Overview

This Pre-Built Automation enables users to copy a file from a Gitlab or GitHub repository to an IAG server.

Estimated Run Time: 0.5 min.

Supported IAP Versions

Itential pre-builts are built and tested on particular versions of IAP. Please make sure to run on the following version:

  • Itential Automation Platform
    • ^2023.1.X

Getting Started

These instructions will help you get a copy of the pre-built in your IAP instance for testing in your environment. Reading this section is also helpful for deployments as it provides you with pertinent information on prerequisites and capabilities.

Prerequisites

This Pre-Built requires the following:

  • The Automation Gateway Adapter must be installed
  • Either the Gitlab adapter or the Github adapter must be installed

You must create an authentication token in Gitlab to put into the Gitlab adapter configuration or create an authentication token in Github to put into the Github adapter configuration.

Sample Gitlab adapter configuration:

{
    "name": "gitlab",
    "model": "@itentialopensource/adapter-gitlab",
    "type": "Adapter",
    "properties": {
        "id": "gitlab",
        "type": "Gitlab",
        "properties": {
            "host": "gitlab.com",
            "port": 443,
            "base_path": "/api",
            "version": "v4",
            "cache_location": "local",
            "save_metric": true,
            "stub": false,
            "protocol": "https",
            "authentication": {
                "auth_method": "static_token",
                "username": "",
                "password": "",
                "auth_field": "header.headers.Private-Token",
                "auth_field_format": "{token}",
                "token": "************************",
                "invalid_token_error": 401,
                "token_timeout": 0,
                "token_cache": "local"
            },
            "healthcheck": {
                "type": "startup",
                "frequency": 300000
            },
            "request": {
                "number_retries": 3,
                "limit_retry_error": 401,
                "failover_codes": [
                    404,
                    405
                ],
                "attempt_timeout": 5000,
                "global_request": {
                    "payload": {},
                    "uriOptions": {},
                    "addlHeaders": {},
                    "authData": {}
                },
                "healthcheck_on_timeout": false,
                "return_raw": false,
                "archiving": false
            },
            "ssl": {
                "ecdhCurve": "",
                "enabled": false,
                "accept_invalid_cert": false,
                "ca_file": "",
                "secure_protocol": "",
                "ciphers": ""
            },
            "throttle": {
                "throttle_enabled": false,
                "number_pronghorns": 1,
                "sync_async": "sync",
                "max_in_queue": 1000,
                "concurrent_max": 1,
                "expire_timeout": 0,
                "avg_runtime": 200
            },
            "proxy": {
                "enabled": false,
                "host": "localhost",
                "port": 9999,
                "protocol": "http"
            },
            "mongo": {
                "host": "",
                "port": 0,
                "database": "",
                "username": "",
                "password": ""
            }
        },
        "brokers": [],
        "groups": []
    },
    "isEncrypted": false,
    "loggerProps": {
        "description": "Logging",
        "log_max_files": 100,
        "log_max_file_size": 1048576,
        "log_level": "info",
        "log_directory": "./logs",
        "log_filename": "pronghorn.log",
        "console_level": "info"    
        }
}

Sample GitHub adapter configuration:

{
  "name": "github",
  "model": "@itentialopensource/adapter-github",
  "type": "Adapter",
  "properties": {
    "id": "github",
    "type": "GitHub",
    "brokers": [],
    "groups": [],
    "properties": {
      "host": "api.github.com",
      "port": 443,
      "base_path": "",
      "version": "",
      "cache_location": "none",
      "encode_pathvars": true,
      "encode_queryvars": true,
      "save_metric": false,
      "stub": false,
      "protocol": "https",
      "authentication": {
        "auth_method": "static_token",
        "username": "",
        "password": "",
        "token": "***token***",
        "token_timeout": 1800000,
        "token_cache": "local",
        "invalid_token_error": 401,
        "auth_field": "header.headers.Authorization",
        "auth_field_format": "Bearer {token}",
        "auth_logging": false,
        "client_id": "",
        "client_secret": "",
        "grant_type": ""
      },
      "healthcheck": {
        "type": "startup",
        "frequency": 300000,
        "query_object": {}
      },
      "request": {
        "number_redirects": 0,
        "number_retries": 3,
        "limit_retry_error": 401,
        "failover_codes": [],
        "attempt_timeout": 5000,
        "global_request": {
          "payload": {},
          "uriOptions": {},
          "addlHeaders": {
            "user-agent": "node.js"
          },
          "authData": {}
        },
        "healthcheck_on_timeout": true,
        "return_raw": false,
        "archiving": false,
        "return_request": false
      }
    }
  },
  "isEncrypted": true,
  "loggerProps": {
    "description": "Logging",
    "log_max_files": 10,
    "log_max_file_size": 10485760,
    "log_level": "debug",
    "log_directory": "/opt/itential/logs",
    "log_filename": "itential.log",
    "log_timezone_offset": 0,
    "console_level": "debug",
    "syslog": {
      "level": "warning",
      "host": "127.0.0.1",
      "port": 514,
      "protocol": "udp4",
      "facility": "local0",
      "type": "BSD",
      "path": "",
      "pid": "process.pid",
      "localhost": "",
      "app_name": "",
      "eol": ""
    }
  },
  "virtual": false
}

Copy this helper script to the destination IAG server and customize it for the environment. See overview of the Script Execution Engine for more information on adding the script to IAG. Name it "import_playbook.pl" and make it executable and make sure it is in a path that is configured as a script path in properties.yml for the IAG server. By default, this pre-built imports the file to ansible playbooks, but you can change the basePath to fit your specific needs.

#!/usr/bin/perl

use MIME::Base64;

# NOTE: adjust this to a path in the configured playbook paths in properties.yml
my $basePath = "/usr/share/ansible/playbooks/";
my $filename = $ARGV[0];
my $content = $ARGV[1];

my $fullfile = $basePath . $filename;

$content =~ s/(\^&)/'/g;

my $decoded = decode_base64(decode_base64($content));

print "Writing playbook to $fullfile\n";

open(FH, '>', $fullfile) or die	$!;
print FH $content;
close(FH);

print "Done.";

Capabilities

The main benefits and features of the Pre-Built are outlined below.

  • This will copy a file from a Git repository (Gitlab or Github) to an Itential Automation Gateway server.

How to Install

To install the Pre-Built:

  • Verify you are running a supported version of the Itential Automation Platform (IAP) as listed above in the Requirements section in order to install the Pre-Built.
  • The Pre-Built can be installed from within App-Admin_Essential. Simply search for the name of your desired Pre-Built and click the install button (as shown below).
  • For more information, follow the instructions on the Itential Documentation site for importing a pre-built.

Testing

While Itential tests this pre-built and its capabilities, it is often the case the customer environments offer their own unique circumstances. Therefore, it is our recommendation that you deploy this pre-built into a development/testing environment in which you can test the pre-built.

Using this Pre-Built

This pre-built should be run in an automation.

Note: The entry automation to this pre-built is called Automation Gateway Copy Files From Git.

Use the following to run the Pre-Built:

Run the automation from Operations Manager, fill in the form values and select start.

Hover over the blue tool tips next to each form field for more details.

When running this pre-built, it depends on being provided proper input so that git can retrieve the files and IAG can accept the files. The input to and possible outputs from this pre-built are described here.

Input Schema

Example input to the github trigger form:

formData: {
  "gitSettings": {
    "adapterName": "github",
    "filePath": "fileName.yml",
    "ref": "main"
  },
  "automationGatewaySettings": {
    "iagAdapter": "IAG-2021.2",
    "importScriptName": "import_playbook.pl",
    "destinationFilename": "exampleName.yml"
  },
  "repoName": "repoName",
  "repoOwner": "repoOwner"
}

The following table details the property keys of the input object. | key | type | required | description | |-----------------------------------------------|---------|----------|---------------------------------------------------------------------| | gitSettings | object | yes | Wrapper object for all git settings | | gitSettings.adapterName | string | yes | The name of the adapter configured in Admin Essentials | | gitSettings.filePath | string | yes | The file path found within your Version Control System | | gitSettings.ref | string | yes | The name of the branch found within git | | automationGatewaySettings | object | yes | Wrapper object for all Automation Gateway settings | | automationGatewaySettings.iagAdapter | string | yes | The name of the adapter configured in Admin Essentials | | automationGatewaySettings.importScriptName | string | yes | The name of the scrip used to import file (import_playbook.pl) | | automationGatewaySettings.destinationFilename | string | yes | The name of the file that will be created/updated in IAG | | repoName | string | yes | The name of the repo found within github | | repoOwner | string | yes | The name of the owner/organization of the repo found within github |

Example input to the gitlab trigger form:

formData: {
  "gitSettings": {
    "adapterName": "gitlab",
    "filePath": "fileName.yml",
    "ref": "master"
  },
  "automationGatewaySettings": {
    "iagAdapter": "IAG-2021.2",
    "importScriptName": "import_playbook.pl",
    "destinationFilename": "exampleName.yml"
  },
  "repoId": "repoId",
}

The following table details the changed property keys of the input object from github to gitlab. | key | type | required | description | |------------------|---------|----------|--------------------------------------------------------| | repoId | string | yes | The repository ID of the repo containing the file |

Output Schema

The ReturnStatus job variable returned from the run pre-built workflow Automation Gateway Copy File From Git reports the success or failure of importing the script into IAG.

ReturnStatus {
  "status": "SUCCESS",
  "message" : "Successfully grabbed the file from git and imported it into IAG",
  "response" : {
    "getContents" : {},
    "importScript" : {},
    "refreshScripts" : {}
  },
  "errors" : []
}

The following table details the property keys of the outputReturnStatus object. | key | type | description | |------------------------------------------|---------|---------------------------------------------------------------------| | status | enum | The status of the whole workflow (SUCCESS or FAILED) | | message | string | A message saying which tasks completed and their status | | response | object | An object consisting of objects which correspond to adapter calls | | errors | array | An array of errors that occured during the prebuilt run |

Additional Information

Please use your Itential Customer Success account if you need support when using this Pre-Built Transformation.