Coder Social home page Coder Social logo

action-molecule-avd's Introduction

GitHub tag (latest by date) GitHub

Github Action for Molecule

First GitHub action allows you to run Molecule using ansible collection structure.

In addition, this GH action supports GIT status after Molecule execution to help to track unexpected file changes. This check can be enforced and generate a failure if a change is detected.

Inputs

---
  molecule_parentdir:
    description: Relative path where your molecule folder is.
    required: no

  molecule_options:
    description: |
      Supported options:
        --debug / --no-debug    Enable or disable debug mode. Default is disabled.
        -c, --base-config TEXT  Path to a base config.  If provided Molecule will
                                load this config first, and deep merge each
                                scenario's molecule.yml on top.
        -e, --env-file TEXT     The file to read variables from when rendering
                                molecule.yml. (.env.yml)
        --version               Show the version and exit.
        --help                  Show this message and exit.
    required: false

  molecule_command:
    description: |
      Supported commands:
        check        Use the provisioner to perform a Dry-Run...
        cleanup      Use the provisioner to cleanup any changes...
        converge     Use the provisioner to configure instances...
        create       Use the provisioner to start the instances.
        dependency   Manage the role's dependencies.
        destroy      Use the provisioner to destroy the instances.
        idempotence  Use the provisioner to configure the...
        init         Initialize a new role or scenario.
        lint         Lint the role.
        list         Lists status of instances.
        login        Log in to one instance.
        matrix       List matrix of steps used to test instances.
        prepare      Use the provisioner to prepare the instances...
        side-effect  Use the provisioner to perform side-effects...
        syntax       Use the provisioner to syntax check the role.
        test         Test (lint, cleanup, destroy, dependency,...
        verify       Run automated tests against instances.
    required: true
    default: 'test'

  molecule_args:
    description: |
      Supported arguments:
        --scenario-name foo  Targeting a specific scenario.
        --driver-name foo    Targeting a specific driver.
        --all                Target all scenarios.
        --destroy=always     Always destroy instances at the conclusion of a Molecule run.
    required: false

  pip_file:
    description: |
      Relative path from `${GITHUB_REPOSITORY}` to install
      any requirements prior to run molecule
    required: false

  ansible:
    description: |
      Ansible package to install
      Support pip syntax to target specific version
    required: false
    default: 'ansible'

  galaxy_file:
    description: |
      Relative path from `${GITHUB_REPOSITORY}` to install
      any requirements from Ansible Galaxy prior to run molecule
    required: false
    default: ''

  check_git:
    description: |
      Check git status after molecule execution.
      Help to track unexpected changes between 2 commits.
    required: false

  check_git_enforced:
    description: |
      If set to to true, then exit code is based on git status.
    required: false

Usage

To use the action simply create an main.yml (or choose custom *.yml name) in the .github/workflows/ directory. Basic example:

on: push

jobs:
  molecule:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Run molecule action
        uses: arista-netdevops-community/[email protected]
        with:
          molecule_parentdir: 'ansible_collections/arista/cvp'
          molecule_command: 'test'
          molecule_args: '--all'
          ansible: ansible>=2.10
          pip_file: 'requirements.txt'
          check_git: true
          check_git_enforced: false

Local testing

To test action execution locally, configure variables in a file:

# cat test.env
INPUT_PIP_FILE=requirements.txt
INPUT_MOLECULE_PARENTDIR=/root/ansible_collections/arista/cvp
INPUT_MOLECULE_COMMAND=test
INPUT_MOLECULE_ARGS=--all

Then run docker container:

docker run --rm -it \
    -v ${PWD}:/root/ \                              # Local content shared with container
    -v /var/run/docker.sock:/var/run/docker.sock \  # Docker process required by molecule
    --env-file dev.env \                            # File with your variables
    ghcr.io/arista-netdevops-community/action-molecule-avd/action-molecule:v1.8.1

action-molecule-avd's People

Contributors

ankudinov avatar carlbuchmann avatar clausholbecharista avatar gmuloc avatar juliopdx avatar titom73 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

action-molecule-avd's Issues

Entrypoint is not catching ansible version

With the following input, action runs the default ansible installation

  molecule_eos_cli_config_gen:
    name: Validate eos_cli_config_gen
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: true
      matrix:
        avd_scenario: ['eos_cli_config_gen']
        ansible_version: ['ansible>=2.10,<2.11', 'ansible>=3.3']
    needs: [ pre_commit ]
    if: needs.file-changes.outputs.config_gen == 'true' || startsWith(github.ref, 'refs/heads/release')
    steps:
      - name: 'set environment variables'
        run: |
          echo "PY_COLORS=1" >> $GITHUB_ENV
          echo "ANSIBLE_FORCE_COLOR=1" >> $GITHUB_ENV
      - uses: actions/checkout@v2
      - name: Run molecule action
        uses: arista-netdevops-community/action-molecule-avd@master
        with:
          molecule_parentdir: 'ansible_collections/arista/avd'
          molecule_command: 'test'
          molecule_args: '--scenario-name ${{ matrix.avd_scenario }}'
          pip_file: ansible_collections/arista/avd/requirements.txt
          ansible: ${{ matrix.ansible_version }}
          check_git: true
          check_git_enforced: true

And runner log is:

Script running from /github/workspace
installing latest ansible version ...
Collecting ansible

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.