Ansible for DevOps examples.

Overview

Ansible for DevOps Examples

CI Molecule CI

This repository contains Ansible examples developed to support different sections of Ansible for DevOps, a book on Ansible by Jeff Geerling.

Most of the examples are full-fledged VM examples, which use Vagrant, VirtualBox, and Ansible to boot and configure VMs on your local workstation. Not all playbooks follow all of Ansible's best practices, as they illustrate particular Ansible features in an instructive manner.

For more interesting examples of what you can do with Ansible, please see the Ansible Vagrant Examples repository, and browse through some of geerlingguy's roles on Ansible Galaxy.

Examples and Chapters in which they're used

Here is an outline of all the examples contained in this repository, by chapter:

Chapter 1

  • N/A

Chapter 2

Chapter 3

  • orchestration: A simple multiple-VM Vagrant configuration and Ansible inventory to allow testing of multi-server orchestration with ansible ad-hoc commands.

Chapter 4

  • drupal: A single-file playbook which configures the LAMP stack on a Linux host and installs Drupal.
  • includes: The same playbook as the drupal example, but using includes to make the playbook more understandable.
  • nodejs: A single-file playbook which configures a Node.js app to run on a Linux host.
  • solr: A single-file playbook which installs Apache Solr on a Linux host.

Chapter 5

  • N/A

Chapter 6

  • nodejs-role: The same playbook as the nodejs example, but using a role to break out the Node.js aspects into a separate nodejs role.
  • galaxy-role-servers: A couple very short playbooks that demonstrate how easy it is to get new servers running leveraging the power of community Ansible Galaxy roles.

Chapter 7

  • test-plugin: A simple test plugin that verifies a given value is representative of the color blue.
  • collection: An example local collection to demonstrate the basic structure of content collections.

Chapter 8

  • dynamic-inventory: Two example dynamic inventory scripts (one in PHP, one in Python) for use with Ansible.

Chapter 9

  • lamp-infrastructure: A multi-server LAMP-based web application infrastructure focused on high-availability and performance for a LAMP-stack app.
  • elk: A two-server example of the Elasticsearch-Logstash-Kibana stack, which uses one server to store and visualize logs centrally, and another server to send logs via Filebeat.
  • gluster: A two-server example of building a fast networked storage setup using Gluster.

Chapter 10

  • deployments: A playbook that deploys a Ruby on Rails application into an environment that runs Passenger and Nginx to handle web requests.
  • deployments-balancer: A playbook that handles zero-downtime deployments to webservers running behind an HAProxy load balancer.
  • deployments-rolling: A playbook that demonstrates rolling deployments to multiple servers for a Node.js app.

Chapter 11

  • security: A playbook containing many security automation tasks to demonstrate how Ansible helps automate security hardening.

Chapter 12

  • jenkins: A playbook that installs and configures Jenkins for CI/CD.

Chapter 13

  • molecule: A Molecule example used for testing and developing an Ansible playbook, or for testing in a Continuous Integration (CI) environment.
  • molecule-ci.yml GitHub Actions workflow: A GitHub Actions workflow which runs the molecule example in a CI environment.

Chapter 14

  • https-self-signed: A playbook that generates self-signed certificates.
  • https-letsencrypt: A playbook that demonstrates automated certificate management with Let's Encrypt and Ansible.
  • https-nginx-proxy: A playbook that demonstrates proxying HTTPS traffic through Nginx to HTTP backends.

Chapter 15

  • docker: Very simple playbook demonstrating Ansible's ability to manage Docker container images.
  • docker-hubot: Slightly more involved example of Ansible's ability to manage and run Docker container images.
  • docker-flask: A sample Flask app built with Ansible playbooks running inside the container.

Chapter 16

  • kubernetes: A playbook that builds a three-node Kubernetes cluster.

License

MIT

Sponsors

  • TinyPilot: An open-source, low-cost KVM over IP for managing your servers.

The above sponsor(s) are supporting Jeff Geerling on GitHub Sponsors. You can sponsor Jeff's work too, to help him continue improving this book and Ansible open source work!

Buy the Book

Ansible for DevOps Cover

Buy Ansible for DevOps for your e-reader or in paperback format.

Comments
  • Update deployments-rolling example to work with Ubuntu 18.04 and Node.js 10.x

    Update deployments-rolling example to work with Ubuntu 18.04 and Node.js 10.x

    The demo-nodejs-api seems to have some issues installing and running under the latest LTS release of Node.js (10.x): https://github.com/geerlingguy/demo-nodejs-api

    Basically, if you leave a Node.js app alone for more than 6 months or so, half the dependencies will go unmaintained and/or change names entirely (I'm looking at you, jade/pug!).

    The example works under Ubuntu 14.04, but I am upgrading all my examples to at least 16.04 (in this case I would like to just go straight to 18.04), and I can't install Node.js 4.x or lower (which is compatible with the current nodejs-api demo app linked above) on Ubuntu 18.04... nor should I.

    So for this ticket, I need to do some upstream work in the Node.js API demo app, to get it either rewritten or updated to work on modern Node.js, then test the full process on the deployments-rolling example.

    opened by geerlingguy 23
  • drupal playbook - Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user

    drupal playbook - Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user

    TASK [Install Drupal dependencies with Composer.] ****************************** fatal: [default]: FAILED! => {"msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user (rc: 1, err: chown: changing ownership of '/var/tmp/ansible-tmp-1580524622.7705758-209663871137752/': Operation not permitted\nchown: changing ownership of '/var/tmp/ansible-tmp-1580524622.7705758-209663871137752/AnsiballZ_command.py': Operation not permitted\n}). For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}

    running against the provided vagrant vm setup - wrote the playbook on my own, ran into some issues, so i grabbed the playbook.yml provided in the drupal dir.

    opened by nqui 20
  • ansible -B does not return ansible_job_id (page 37)

    ansible -B does not return ansible_job_id (page 37)

    This appears to be a long-standing issue with Ansible, as seen here:

    https://github.com/ansible/ansible/issues/15988

    I commented on that thread with what I found, but I will copy+paste it here as well:

    Attempting to do the ad-hoc command of:

    ansible multi -b -B 3600 -a "yum -y update"

    only returns:

    192.168.60.4 | SUCCESS | rc=0 >>
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirror.den1.denvercolo.net
     * extras: mirrors.cat.pdx.edu
     * updates: mirrors.centos.webair.com
    No packages marked for update
    
    192.168.60.5 | SUCCESS | rc=0 >>
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirror.nodesdirect.com
     * extras: repos.mia.quadranet.com
     * updates: mirror.atlantic.net
    No packages marked for update
    
    192.168.60.6 | SUCCESS | rc=0 >>
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirror.den1.denvercolo.net
     * extras: mirror.jax.hugeserver.com
     * updates: mirrors.centos.webair.com
    No packages marked for update
    

    when it should be returning something like:

    background launch...
    192.168.60.6 | success >> {
        "ansible_job_id": "763350539037",
        "results_file": "/root/.ansible_async/763350539037",
        "started": 1
    }
    ... [other hosts] ...
    
    opened by tliss 16
  • Various issues submitted by a reader

    Various issues submitted by a reader

    • [x] p.23 I get a deprecation warning when I try to use ANSIBLE_HOSTS, and am recommended ANSIBLE_INVENTORY instead
    • [x] p.35 remove "owner=" and "group=" parameters for "state=link". This should have been caught by a technical reviewer. The owner and group assignment changes the original file, and not the symlink!
    • [x] p.35 technically 'state=absent' can be used to remove a symlink as well
    • [x] p.36,37 about getting an ansible_job_id: have you tried running this? I'm on Ansible 2.7.5. Not getting any feedback about any ansible_job_id
    • [x] p.44 would really be nice to explain why fireball mode requires ZeroMQ... but accelerated mode doesnt require anything
    • [x] p.46 explanation of 'plays' in first paragraph almost makes it look like 'play' = 'task'. Reading further in to the book, I think we figured that 'play' = "the entire set of tasks in a playbook" instead
    • [x] p.50 are 'with_items', and '{{ item }}' special? In this case it appears that "item" is like a special reserved variable. Would be great to mention that.
    • [x] p.54 "Real-world" Node.js app server: how real-world is copying files over from our master to the server, instead of say, using git checkout?
    • [x] p.56 shell script: 'yum ... install node' does not work. Contrast this against the playbook on p.57, where it's "name=npm" (and not "name=node")
    • [x] p.56 last paragraph: 'and works with variables other nifty Ansible features we’ll discuss later:' -> missing 'and' in 'and works with variables [and] other nifty Ansible features'
    • [x] p.57
      • why does the code segment start at line 10, when fragment on p.55 ends at line 5? this is just confusing and raises questions (did we miss any lines?)
      • as mentioned, line 27 uses "name=npm", as opposed to the expected "name=node" (or "name=nodejs"?) when you look at the script on p.56
      • it would be nice to avoid quotes (see lines 12 and 17) unless really necessary. Otherwise it's confusing
      • would be better for playbook to follow the same order of "import Remi's key", then "install Remi repo" as per script it's supposed to replace. Otherwise, tell me why you're reversing the order!
      • contrary to what you say, installing the EPEL repo also requires importing the key; you just don't see it. But if you look carefully at the 'msg' field in the JSON returned by ansible, there will be a message about importing the key!
    • [x] p.59 similar comment about using quotes (lines 33, 36) unnecessarily in the playbook
    • [x] p.60 unnecessary quotes for line 48
    • [x] p.65
      • a point about using custom Vagrant boxes: personally I would prefer using plain vanilla distro boxes (i.e. "ubuntu/xenial64" instead of "geerlingguy/ubuntu1604"). When I'm setting up a real box for production, I'm not going to be using a customized install. I'll most likely be using and starting from a plain vanilla distro install! It appears that "ubuntu/xenial64" will have a problem with installing 'mysql-server', but I guess we'll just have to deal with it?
      • s/Python/ansible/ in last paragraph
    • [x] p.66 line numbers are wrong (p.65 already ends on line 60, but you start at line 60 again)
    • [x] p.70 MySQL no longer installs a 'test' database by default?
    • [x] p.73 please stop switching back and forth between 'shell:' and 'command:' for no reason. It's just confusing
    • [x] p.74 line 166: according to our own testing, it appears that this permission-setting neither resolves, nor achieves anything?
    • [x] p.77 playbook, including https://github.com/geerlingguy/ansible-for-devops/blob/master/solr/provisioning/playbook.yml, is missing a necessary 'become: yes'!
    • [x] p.79
      • use 'remote_src: yes' instead of 'copy: no'. See doc.
      • 'command:' works instead of 'shell:'
    • [x] p.80 would have appreciated a warning at the start to provision the VM with at least 512MB of RAM! or else Solr will fail
    • [x] p.85 'instead of using lineinfile with a large list of items' -> u mean instead of using many 'lineinfile' tasks?
    • [x] p.86 s/var_proxy/proxy_vars/ -> more intuitive!
    • [x] p.86 method of handling /etc/environment seems counter-intuitive; if the vars and the task is all in the same playbook/file, why not have "proxy_state" be part of the "with_items" list? The only win this gives you by having a separate 'proxy_state' in a separate var is an easy (but not selective) on and off switch... for all proxying. But really I think the big win here would be if the task were imported from a shared playbook.
    opened by geerlingguy 14
  • Update to newest Digital Ocean modules

    Update to newest Digital Ocean modules

    It appears that Ansible has created a new set of modules that no longer rely on dopy and add more functionality. The current one used in the book will be deprecated in 1.12. It may be beneficial to move to using the newer module(s).

    opened by w3irdrobot 13
  • The box 'geerlingguy/centos7' could not be found

    The box 'geerlingguy/centos7' could not be found

    Hello I'm getting this error in vagrant version 2.3.0

    Command I used:

    vagrant init geerlingguy/centos7 vagrant up

    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Box 'geerlingguy/centos7' could not be found. Attempting to find and install...
        default: Box Provider: virtualbox
        default: Box Version: >= 0
    The box 'geerlingguy/centos7' could not be found or
    could not be accessed in the remote catalog. If this is a private
    box on HashiCorp's Vagrant Cloud, please verify you're logged in via
    `vagrant login`. Also, please double-check the name. The expanded
    URL and error message are shown below:
    
    URL: ["https://vagrantcloud.com/geerlingguy/centos7"]
    Error: schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.
    
    opened by Scizray 10
  • For chapter 3 can't connect to vms through

    For chapter 3 can't connect to vms through

    After following the setup guide on page 68 to 72, I can't seem to be able to connect or ping the created vms through their private network ips. My problem is similar to https://leanpub.com/ansible-for-devops/feedback#comment-2101413414 or this one but neither of the solution provided their is working for me.

    I am using:

    • OS X El Capitan
    • Virtualbox: Version 5.0.26 r108824
    • Vagrant 1.8.5
    • ansible 2.1.0.0

    I do suspect that there is something wrong with the vagrant box cause I've tried other boxes(e.g.scotch/box) with the same vagrant file configuration and the private ips works fine.

    Please, any help or guidance will be really appreciated. Also, let me know if you need more information about my setup.

    Thanks,

    opened by nikathone 10
  • Build failing on deployments example - Bundler can't be installed on old Ruby

    Build failing on deployments example - Bundler can't be installed on old Ruby

    From failed build: https://travis-ci.org/geerlingguy/ansible-for-devops/jobs/475166316

    TASK [geerlingguy.ruby : Install Bundler.] *************************************
    fatal: [localhost]: FAILED! => {"changed": false, "cmd": "/usr/local/bin/gem install --no-user-install --no-document bundler", "msg": "ERROR:  Error installing bundler:\n\tbundler requires Ruby version >= 2.3.0.", "rc": 1, "stderr": "ERROR:  Error installing bundler:\n\tbundler requires Ruby version >= 2.3.0.\n", "stderr_lines": ["ERROR:  Error installing bundler:", "\tbundler requires Ruby version >= 2.3.0."], "stdout": "", "stdout_lines": []}
    

    I need to get the 14.04 LTS examples upgraded to 18.04 anyways... this ain't 2014 anymore!

    opened by geerlingguy 9
  • Drupal example provisioning fails

    Drupal example provisioning fails

    TASK [Install Drupal.] *********************************************************
    fatal: [default]: FAILED! => {"changed": true, "cmd": ["drush", "si", "-y", "--site-name=Drupal Test", "--account-name=admin", "--account-pass=admin", "--db-url=mysql://drupaltest:1234@localhost/drupaltest"], "delta": "0:00:00.195786", "end": "2017-05-11 00:12:07.375858", "failed": true, "rc": 255, "start": "2017-05-11 00:12:07.180072", "stderr": "PHP Fatal error:  Class Symfony\\Component\\Console\\Style\\SymfonyStyle contains 4 abstract methods and must therefore be declared abstract or implement the remaining methods (Symfony\\Component\\Console\\Output\\OutputInterface::isQuiet, Symfony\\Component\\Console\\Output\\OutputInterface::isVerbose, Symfony\\Component\\Console\\Output\\OutputInterface::isVeryVerbose, ...) in /var/www/drupal-8.2.x-dev/vendor/symfony/console/Style/SymfonyStyle.php on line 33\n [error]  Drush command terminated abnormally due to an unrecoverable error.\nError: Class Symfony\\Component\\Console\\Style\\SymfonyStyle contains 4 abstract methods and must therefore be declared abstract or implement the remaining methods (Symfony\\Component\\Console\\Output\\OutputInterface::isQuiet, Symfony\\Component\\Console\\Output\\OutputInterface::isVerbose, Symfony\\Component\\Console\\Output\\OutputInterface::isVeryVerbose, ...) in /var/www/drupal-8.2.x-dev/vendor/symfony/console/Style/SymfonyStyle.php, line 33 ", "stderr_lines": ["PHP Fatal error:  Class Symfony\\Component\\Console\\Style\\SymfonyStyle contains 4 abstract methods and must therefore be declared abstract or implement the remaining methods (Symfony\\Component\\Console\\Output\\OutputInterface::isQuiet, Symfony\\Component\\Console\\Output\\OutputInterface::isVerbose, Symfony\\Component\\Console\\Output\\OutputInterface::isVeryVerbose, ...) in /var/www/drupal-8.2.x-dev/vendor/symfony/console/Style/SymfonyStyle.php on line 33", " [error]  Drush command terminated abnormally due to an unrecoverable error.", "Error: Class Symfony\\Component\\Console\\Style\\SymfonyStyle contains 4 abstract methods and must therefore be declared abstract or implement the remaining methods (Symfony\\Component\\Console\\Output\\OutputInterface::isQuiet, Symfony\\Component\\Console\\Output\\OutputInterface::isVerbose, Symfony\\Component\\Console\\Output\\OutputInterface::isVeryVerbose, ...) in /var/www/drupal-8.2.x-dev/vendor/symfony/console/Style/SymfonyStyle.php, line 33 "], "stdout": "", "stdout_lines": []}
    

    I know nothing about Drupal so I'm kind of useless at debugging this. I can tell you that changing drupal_core_version to other tags in the 8.2.x branch didn't help.

    opened by cwardgar 9
  • Explain use of pre_tasks

    Explain use of pre_tasks

    Book version: 1.21 Chapter 4 introduces pre_tasks (page 63) with a brief explanation that they're run before the main set of tasks. It's not clear (at this point in the book anyway) how that's any different to just adding a task at the beginning of the tasks section. Assuming the reasoning is covered later in the book, it would be useful to reference that section, or provide a simple explanation at this point of the book.

    opened by gaddman 8
  • forever list fails : [Errno 2] No such file or directory

    forever list fails : [Errno 2] No such file or directory

    Using Ansible 2.4.2.0; Darwin

    When running the nodejs provisioning playbook, it keeps failing when it reaches this task:

    https://github.com/geerlingguy/ansible-for-devops/blob/ed1f0325bab17b9115b355403b9579e68634de66/nodejs/provisioning/playbook.yml#L40

    The error message :

    [Errno 2] No such file or directory
    fatal: [domain.com]: FAILED! => {"changed": false, "cmd": "forever list", "rc": 2}
    

    The full task:

    - name: "Check list of running Node.js apps."
      command: forever list
      register: forever_list
      changed_when: false
    

    I've triple-checked that the app.js file is there. Why does it not find it ?

    opened by pixeline 8
  • Minor Inline Code Formatting Issues

    Minor Inline Code Formatting Issues

    Minor Inline Code Formatting Issues

    When viewing the PDF, incline code at the right side of paragraphs can go past margins, sometimes off the page. Haven't discovered any hard issues, since even in the case where main.yml is cut off, most people could figure out what it is supposed to be. My concern is that in future editions (or other books), inline code blocks might be added that extend past the page and miss key details.

    Reproduce

    Using the 15 April 2022 PDF from Leanpub, view the Examples pages. Tested with Firefox and Brave, issue is on both so it seems to be a PDF issue, not a PDF renderer issue. EPUBs don't have this issue.

    If you're using Markdown -> Pandoc, my suspicion is that whatever filter is running to convert the inline code blocks from Markdown to equivalent LaTeX doesn't know when to break a "word" up if there's no natural separation like a space or an underscore (This is a guess, I haven't worked much with Pandoc and don't know your pipeline).

    Examples

    • Chapter 10, Page 279, file name slightly extends past margins
    • Chapter 11, Page 315, command extends past margins (unclear if this is the full command)
    • Chapter 12, Page 329, command extends past margins
    • Chapter 12, Page 334, IP address continues past margins
    • Chapter 15, Page 400, end of main.yml is not visible

    Negative Examples

    I've actually found a hyphenated inline code block - I don't know if this was a manual or automatic fix since the hyphen doesn't exist inside the EPUB.

    • Chapter 9, Page 229, both underscores and spaces are split appropriately
    • Chapter 10, Page 273, multi-word command is split correctly at end of paragraph. Suggests possible issue is that the filter doesn't know how to split a "word" and can only hyphenate things that are clearly multiple words (underscore or space separated).
    • Chapter 10, Page 292

    Possible fix

    I've had issues with Markdown -(Pandoc)-> PDF before too and haven't gotten a great solution. Not sure exactly what your pipeline is, but this answer on tex.stackexchange with fvextra might help prevent these issues: https://tex.stackexchange.com/a/412316

    opened by cnnrshd 0
  • Drupal playbook: command and string folding

    Drupal playbook: command and string folding

    The drupal playbook uses a syntax like this:

        - name: Disable the default site.
          command: >
            a2dissite 000-default
            removes=/etc/apache2/sites-enabled/000-default.conf
          notify: restart apache
    

    From the way I do interpret the YAML specs and the ansible documentation this would result in a command string of a2dissite 000-default removes=/etc/apache2/sites-enabled/000-default.conf

    eg combining all latter strings while the intent is to make a2dissite 000-default the command and removes= an ansible option

    I'm not sure if I am missing something here, this "exploits" some side effect/undocumented features or that's a bug

    opened by Nicky-D 0
  • Unnecessary conditional block on page 155 (is_blue function)

    Unnecessary conditional block on page 155 (is_blue function)

    if string in blue_values:
        return True
    else:
        return False
    

    could be replaced by

    return string in blue_values
    

    I feel it looks simpler and better that way, the conditional block is not necessary there.

    Cheers, loving the book so far!

    opened by ManuelJNunez 0
  • Grammatical error on page 340

    Grammatical error on page 340

    The second paragraph mentions '... you can automating unit, functional, and integration tests ...', but I believe the correct verb tense should be 'automate'.

    bug 
    opened by tphbrok 1
  • Guest Additions, should we be concerned about version differences?

    Guest Additions, should we be concerned about version differences?

    I found an Intel based Mac and got by #510. Then I got it with #506. Now I'm getting the following errors. If guest additions matter, suggestions on how properly configure them? (or avoid them all together if that's my problem.)

    Except for adding virtualbox__intnet: true to the end of each private network config line, I've only copied and pasted the Vagrantfile code from Ch3.

    Got different reports about installed GuestAdditions version:
    Virtualbox on your host claims:   6.1.32
    VBoxService inside the vm claims: 7.0.2
    Going on, assuming VBoxService is correct...
    Got different reports about installed GuestAdditions version:
    Virtualbox on your host claims:   6.1.32
    VBoxService inside the vm claims: 7.0.2
    Going on, assuming VBoxService is correct...
    Got different reports about installed GuestAdditions version:
    Virtualbox on your host claims:   6.1.32
    VBoxService inside the vm claims: 7.0.2
    Going on, assuming VBoxService is correct...
    Restarting VM to apply changes...
    ==> db: Attempting graceful shutdown of VM...
    ==> db: Booting VM...
    ==> db: Waiting for machine to boot. This may take a few minutes...
    ==> db: Machine booted and ready!
    ==> db: Checking for guest additions in VM...
        db: No guest additions were detected on the base box for this VM! Guest
        db: additions are required for forwarded ports, shared folders, host only
        db: networking, and more. If SSH fails on this machine, please install
        db: the guest additions and repackage the box to continue.
        db: 
        db: This is not an error message; everything may continue to work properly,
        db: in which case you may ignore this message.
    ==> db: Setting hostname...
    ==> db: Configuring and enabling network interfaces...
    (base) name@C02NX7BWG3QD ch3 % ansible multi -a "hostname"
    192.168.60.4 | UNREACHABLE! => {
        "changed": false,
        "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.60.4 port 22: Operation timed out",
        "unreachable": true
    }
    192.168.60.5 | UNREACHABLE! => {
        "changed": false,
        "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.60.5 port 22: Operation timed out",
        "unreachable": true
    }
    192.168.60.6 | UNREACHABLE! => {
        "changed": false,
        "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.60.6 port 22: Operation timed out",
        "unreachable": true
    }
    
    opened by blue928 0
Owner
Jeff Geerling
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns
Jeff Geerling
Ansible Collection: A collection of Ansible Modules and Lookup Plugins (MLP) from Linuxfabrik.

ansible_mlp An Ansible collection of Ansible Modules and Lookup Plugins (MLP) from Linuxfabrik. Ansible Bitwarden Item Lookup Plugin Returns a passwor

Linuxfabrik 2 Feb 7, 2022
A collection of beginner-friendly DevOps content

mansion Mansion is just a testing repo for learners to commit into open source project. These are the steps you need to learn: Please do not edit thes

Bryan Lim 62 Nov 30, 2022
GitGoat enables DevOps and Engineering teams to test security products intending to integrate with GitHub

GitGoat is an open source tool that was built to enable DevOps and Engineering teams to design and implement a sustainable misconfiguration prevention strategy. It can be used to test with products with access to GitHub repositories without a risk to your production environment.

Arnica 149 Dec 22, 2022
Project 4 Cloud DevOps Nanodegree

Project Overview In this project, you will apply the skills you have acquired in this course to operationalize a Machine Learning Microservice API. Yo

null 1 Nov 21, 2021
This repository contains code examples and documentation for learning how applications can be developed with Kubernetes

BigBitBus KAT Components Click on the diagram to enlarge, or follow this link for detailed documentation Introduction Welcome to the BigBitBus Kuberne

null 51 Oct 16, 2022
Ansible Collection: A collection of Ansible Modules and Lookup Plugins (MLP) from Linuxfabrik.

ansible_mlp An Ansible collection of Ansible Modules and Lookup Plugins (MLP) from Linuxfabrik. Ansible Bitwarden Item Lookup Plugin Returns a passwor

Linuxfabrik 2 Feb 7, 2022
A collection of beginner-friendly DevOps content

mansion Mansion is just a testing repo for learners to commit into open source project. These are the steps you need to learn: Please do not edit thes

Bryan Lim 62 Nov 30, 2022
This repository contains free labs for setting up an entire workflow and DevOps environment from a real-world perspective in AWS

DevOps-The-Hard-Way-AWS This tutorial contains a full, real-world solution for setting up an environment that is using DevOps technologies and practic

Mike Levan 1.6k Jan 5, 2023
GitGoat enables DevOps and Engineering teams to test security products intending to integrate with GitHub

GitGoat is an open source tool that was built to enable DevOps and Engineering teams to design and implement a sustainable misconfiguration prevention strategy. It can be used to test with products with access to GitHub repositories without a risk to your production environment.

Arnica 149 Dec 22, 2022
Azure DevOps Extension for Azure CLI

Azure DevOps Extension for Azure CLI The Azure DevOps Extension for Azure CLI adds Pipelines, Boards, Repos, Artifacts and DevOps commands to the Azur

null 1 Nov 3, 2021
:P Some basic stuff I'm gonna use for my upcoming Agile Software Development and Devops

reverse-image-search-py bash script.sh img_name.jpg Requirements pip install requests pip install pyshorteners Dry run [kunal@Gordonfreeman]$ bash sc

Sudhanva M 3 Dec 18, 2021
Project 4 Cloud DevOps Nanodegree

Project Overview In this project, you will apply the skills you have acquired in this course to operationalize a Machine Learning Microservice API. Yo

null 1 Nov 21, 2021
A repo containing toolings and software useful for a DevOps Engineer

DevOps-Tooling A repo containing toolings and software useful for a DevOps Engineer (or if you're setting up your Mac from the beginning) Currently se

Mohamed Abukar 45 Dec 12, 2022
Providing DevOps and security teams script to identify cloud workloads that may be vulnerable to the Log4j vulnerability(CVE-2021-44228) in their AWS account.

We are providing DevOps and security teams script to identify cloud workloads that may be vulnerable to the Log4j vulnerability(CVE-2021-44228) in their AWS account. The script enables security teams to identify external-facing AWS assets by running the exploit on them, and thus be able to map them and quickly patch them

Mitiga 13 Jan 4, 2022
Minimal example of how to use pytest with automated 'devops' style automated test runs

Pytest python example with automated testing This is a minimal viable example of pytest with an automated run of tests for every push/merge into the m

Karma Computing 2 Jan 2, 2022
ColossalAI-Examples - Examples of training models with hybrid parallelism using ColossalAI

ColossalAI-Examples This repository contains examples of training models with Co

HPC-AI Tech 185 Jan 9, 2023
Service request portal on top of Ansible Tower

Squest - A service request portal based on Ansible Tower Squest is a Web portal that allow to expose Tower based automation as a service. If you want

Hewlett Packard Enterprise 183 Jan 4, 2023
One Ansible Module for using LINE notify API to send notification. It can be required in the collection list.

Ansible Collection - hazel_shen.line_notify Documentation for the collection. ansible-galaxy collection install hazel_shen.line_notify --ignore-certs

Hazel Shen 4 Jul 19, 2021
Visualise Ansible execution time across playbooks, tasks, and hosts.

ansible-trace Visualise where time is spent in your Ansible playbooks: what tasks, and what hosts, so you can find where to optimise and decrease play

Mark Hansen 81 Dec 15, 2022