├── CONDUCT.md ├── LICENSE ├── README.md ├── arch ├── Dockerfile └── requirements.txt ├── auto_build.sh ├── barnacle ├── __init__.py ├── build.py ├── conf.py ├── helper.py ├── parser.py ├── shell.py └── test.py ├── cent6 ├── Dockerfile └── requirements.txt ├── cent7 ├── Dockerfile └── requirements.txt ├── cent8 ├── Dockerfile └── requirements.txt ├── debian10 ├── Dockerfile └── requirements.txt ├── debian8 ├── Dockerfile └── requirements.txt ├── debian9 ├── Dockerfile └── requirements.txt ├── docker_salt.zsh ├── fedora30 ├── Dockerfile └── requirements.txt ├── fedora31 ├── Dockerfile └── requirements.txt ├── leap151 ├── Dockerfile └── requirements.txt ├── leap152 ├── Dockerfile └── requirements.txt ├── scripts ├── barnacle-build ├── barnacle-shell └── barnacle-test ├── setup.py ├── tumbleweed ├── Dockerfile └── requirements.txt ├── ubuntu16 ├── Dockerfile └── requirements.txt ├── ubuntu18 ├── Dockerfile └── requirements.txt └── ubuntu20 ├── Dockerfile └── requirements.txt /CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at mp@saltstack.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [http://contributor-covenant.org/version/1/4][version] 72 | 73 | [homepage]: http://contributor-covenant.org 74 | [version]: http://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # barnacle 2 | Docker files for SaltStack 3 | 4 | Note: It is strongly recommended that the default storage engine for Docker not 5 | be set to use the loopback/devicemapper. This will result in very slow builds 6 | and poor performance. Choose `overlay` or `overlay2` if possible. 7 | 8 | TL;DR (Lazy version) 9 | ==================== 10 | 11 | For the impatient, images are available 12 | on [Docker Hub](https://hub.docker.com/r/cachedout/barnacle/). 13 | 14 | To pull images: `docker pull cachedout/barnacle` 15 | 16 | To use them, replace the name of the containers in the examples below with the 17 | path to the image tag. For example, replace instances of `salt-arch` with 18 | `cachedout/barnacle:arch`. 19 | 20 | 21 | Installation 22 | ============ 23 | 24 | The following steps will walk you through building and running a Docker image 25 | for Arch Linux. 26 | 27 | To build and test another OS, simply change the OS identifier where appropriate. 28 | 29 | If you are running Docker for Mac, the `sudo`s below are not necessary. 30 | 31 | NOTE: This guide assumes that one's local salt development directory is in 32 | `~/devel/salt`. If this is not the case, adjust the paths below accordingly. 33 | 34 | To build an image, change to an image directory and type: `sudo docker build -t 35 | salt-arch .`. 36 | 37 | This will download a base image and apply the necessary layers to ensure it has 38 | all the layer necessary to develop Salt with, including all of the development 39 | deps. 40 | 41 | After the container is built, you can shell into it and have a look around: 42 | 43 | `sudo /usr/bin/docker run --rm -itv ~/devel/salt/:/testing salt-arch /bin/bash` 44 | 45 | Your local Salt development directory will be mounted into /testing. Any change 46 | you make locally will be immediatley reflected there and vice-versa. 47 | 48 | You can of course run the tests if you like: `python2 49 | /testing/tests/runtests.py` 50 | 51 | Running the tests and then exiting 52 | ================================== 53 | 54 | There is no need to create a shell just to run a test. You can do this with one 55 | command: 56 | 57 | `sudo /usr/bin/docker run --rm -itv ~/devel/salt:/testing salt-arch python2 /testing/tests/runtests.py` 58 | 59 | Again, this will operate on your local checkout of the Salt repo so you can 60 | quickly make changes and then immediatley see how they will work on any given 61 | platform. 62 | 63 | Run a container using systemd 64 | ============================= 65 | 66 | **NOTE: currently only supported for the following images: `cent7`, `fedora26`, 67 | `fedora27`, `ubuntu16`, `debian9`** 68 | 69 | To start a container using systemd you need three things: 70 | 71 | 1. `/{run,tmp}` mounted as tmpfs 72 | 2. The container needs read-only access to your cgroups 73 | 3. You need to specify the path to the systemd binary as the command or entrypoint for the 74 | container. 75 | 76 | For example: 77 | 78 | ```bash 79 | docker run --detach --name container_name --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v ~/devel/salt:/testing cent7 /usr/lib/systemd/systemd 80 | ``` 81 | 82 | This will launch the container running systemd and detach from it. 83 | 84 | To get a shell, evoke it with a tty in interactive mode. 85 | 86 | ```bash 87 | docker exec -it container_name /bin/bash 88 | ``` 89 | 90 | Fortunately, both starting a container under systemd and evoking an interactive shell are supported via the .zsh aliases described in the section below. 91 | 92 | 93 | Using .zsh aliases 94 | ================== 95 | 96 | This repo includes a `docker_salt.zsh` file. It makes running things even 97 | easier. Importing it into your shell is an exercise for the reader. ;] It 98 | understands if you are running Docker for Mac and does not `sudo` for the docker 99 | commands. 100 | 101 | To run a single test: 102 | 103 | `cts arch integration.modules.beacons` <-- Runs the beacons tests in an Arch container 104 | 105 | `cshell arch` <-- Gives you a shell in an Arch container 106 | 107 | `cexec arch` <-- Gives you a shell in an already running Arch container (use after cshell) 108 | 109 | `cbuild -a` <-- Builds all OSs in the repo 110 | 111 | `cbuild -o ` <-- Builds a specific OS in the repo 112 | 113 | `csalt ubuntu14 state.sls test` <-- Run a salt command 114 | 115 | `csalt-call ubuntu14 state.sls test` <-- Run a salt-call command 116 | 117 | `cstart-systemd container_name cent7` <-- Start `container_name` under systemd using image `salt-cent7` 118 | 119 | `cssh container_name` <-- SSH into `container_name` 120 | 121 | `cdshel` <-- evoke an interactive shell in a detached container (defaults to bash) 122 | 123 | # Using Barnacle Python Module # 124 | 125 | ## Installing and Setup Barnacle Python Module ## 126 | 127 | ``` 128 | git clone https://github.com/cachedout/barnacle.git 129 | cd barnacle 130 | pip install -e . 131 | ``` 132 | 133 | Add configurations to file: `/etc/barnacle.conf` 134 | 135 | ``` 136 | salt_dir: /home/ch3ll/git/salt/ 137 | barnacle_dir: /home/ch3ll/git/barnacle/ 138 | ``` 139 | 140 | **salt_dir** is the location to your locally cloned git repo of salt. The barnacle python module will use this directory to run salt from within the container 141 | 142 | **barnacle_dir** is the location where you cloned the barnacle directory. The barnacle python module will use this directory when building docker images. It searches this directory for any dockerfiles and builds from those files. 143 | 144 | 145 | ## Barnacle Commands ## 146 | ###### barnacle-build ###### 147 | Builds dockerimages from dockerfiles. Will create images with the name `salt` + the os. 148 | 149 | `barnacle-build -o ` <-- builds a specific os 150 | `barnacle-build -a` <-- builds all OSs in the specified barnacle directory 151 | 152 | ###### barnacle-shell ###### 153 | Starts and shells into a container 154 | 155 | `barnacle-shell -o ` <-- starts and shells into specific os container 156 | 157 | ###### barnacle-test ###### 158 | Starts a container and runs a test using salt's test runner. 159 | 160 | `barnacle-test -o -t ` <-- starts a specific os container and runs specified salt test. 161 | 162 | NOTE: when using `` in any of these barnacle commands, you need to use the name of the directory where the Dockerfile exists. For example if you want to build centos7 you would use `cent7` because that is the name of the directory in barnacle for that os. 163 | -------------------------------------------------------------------------------- /arch/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM archlinux:latest 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | # Install Python and other useful utilities 32 | RUN pacman -Syyu --noconfirm wget curl gcc git openssh python2 python libxml2 libxslt openssl man man-pages vim iproute2 33 | 34 | # Setup environment and UTF-8 locale 35 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 36 | ENV LANG=en_US.utf8 37 | ENV LC_ALL=en_US.utf8 38 | VOLUME /testing 39 | 40 | # Enable sshd 41 | RUN mkdir /etc/systemd/system/multi-user.target.wants 42 | RUN ln -sf /lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 43 | # Set root password to "changeme" and force a change on first login 44 | RUN echo root:changeme | chpasswd 45 | RUN passwd --expire root 46 | 47 | # Get pip installed 48 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 49 | RUN python2 /get-pip.py 50 | RUN python3 /get-pip.py 51 | 52 | # Install Python packages 53 | COPY requirements.txt /requirements.txt 54 | RUN python2 -m pip install -r /requirements.txt 55 | RUN python3 -m pip install -r /requirements.txt 56 | 57 | # Get rid of pudb welcome message, and turn on line numbers 58 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 59 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 60 | -------------------------------------------------------------------------------- /arch/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==3.2 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycrypto==2.6.1 ; sys_platform not in "win32,darwin" 79 | pycryptodome==3.9.7 # via python-jose 80 | pygit2==1.2.0; python_version >= '3.0' 81 | pyinotify==0.9.6 82 | pynacl==1.3.0 # via paramiko 83 | pyopenssl==19.0.0 84 | pyparsing==2.4.5 # via packaging 85 | pyserial==3.4 # via junos-eznc 86 | pytest-helpers-namespace==2019.1.8 87 | pytest-salt-runtests-bridge==2019.7.10 88 | pytest-salt==2019.12.27 89 | pytest-salt-factories==0.10.4 90 | pytest-tempdir==2019.10.12 91 | pytest==4.6.6 92 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 93 | python-etcd==0.4.5 94 | python-gnupg==0.4.4 95 | python-jose==2.0.2 # via moto 96 | pytz==2019.1 # via moto, tempora 97 | pyvmomi==6.7.1.2018.12 98 | pyyaml==5.1.2 99 | pyzmq==18.0.1 ; python_version != "3.4" 100 | requests==2.21.0 101 | responses==0.10.6 # via moto 102 | rfc3987==1.3.8 103 | rsa==4.0 # via google-auth 104 | s3transfer==0.2.0 # via boto3 105 | salttesting==2017.6.1 106 | scp==0.13.2 # via junos-eznc 107 | setproctitle==1.1.10 108 | setuptools-scm==3.2.0 109 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 110 | smmap2==2.0.5 # via gitdb2 111 | strict-rfc3339==0.7 112 | tempora==1.14.1 # via portend 113 | timelib==0.2.4 114 | tornado==5.1.1; python_version < '3.0' 115 | tornado==6.0.4; python_version >= '3.0' 116 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 117 | vcert==0.7.3 118 | virtualenv==16.4.3 119 | watchdog==0.9.0 120 | wcwidth==0.1.7 # via pytest 121 | websocket-client==0.40.0 # via docker, kubernetes 122 | werkzeug==0.15.6 # via moto 123 | wrapt==1.11.1 # via aws-xray-sdk 124 | xmltodict==0.12.0 # via moto 125 | zc.lockfile==1.4 # via cherrypy 126 | zipp==0.6.0 # via importlib-metadata 127 | -------------------------------------------------------------------------------- /auto_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | ALL_DIRS=$(find ${CURRENT_DIR} -name Dockerfile -printf '%h\n' | for i in `xargs`; do basename $i; done) 5 | 6 | function usage() 7 | { 8 | echo "=========USAGE=========" 9 | echo "$0 -o -a " 10 | echo "You can only use -o or -a not both" 11 | echo "When specifying -o you need to simply specify the OS/dir name you want to build" 12 | echo "Your options for os are the following:" 13 | echo "${ALL_DIRS}" 14 | echo "When specifying -a this will build all OSs in this repo" 15 | echo ' ./build.sh -a' 16 | echo "When specifying -o this will build just that OS in this repo" 17 | echo ' ./build.sh -o "centos5' 18 | exit 19 | } 20 | 21 | while getopts "o:ah" opt; do 22 | case $opt in 23 | o) 24 | OS=${OPTARG} 25 | ;; 26 | a) 27 | ALL=True 28 | ;; 29 | h) 30 | usage 31 | ;; 32 | *) 33 | usage 34 | ;; 35 | esac 36 | done 37 | 38 | # function that finds all Dockerfile dirs and builds them 39 | function build_all(){ 40 | for i in ${ALL_DIRS};do 41 | cd ${CURRENT_DIR}/$i; 42 | echo "BUILDING salt-${i}" 43 | docker build -t salt-${i} . & 44 | done 45 | } 46 | 47 | # function that builds specified OS 48 | function build_os() { 49 | specific_os=$1 50 | cd ${CURRENT_DIR}/${specific_os} 51 | echo "BUILDING ${specific_os}" 52 | docker build -t salt-${specific_os} . 53 | } 54 | 55 | 56 | if [ -z ${OS} ] && [ -z ${ALL} ]; then 57 | usage 58 | fi 59 | [[ ! -z ${OS} ]] && build_os ${OS} 60 | [[ ! -z ${ALL} ]] && build_all 61 | -------------------------------------------------------------------------------- /barnacle/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Barnacle Class 3 | ''' 4 | 5 | import barnacle.parser 6 | import barnacle.conf 7 | 8 | 9 | class Barnacle(object): 10 | ''' 11 | Barnacle Class to gather configurations 12 | ''' 13 | def __init__(self): 14 | self.opts = barnacle.conf.get_conf('/etc/barnacle.conf') 15 | self.args = barnacle.parser.get_args().parse_args() 16 | -------------------------------------------------------------------------------- /barnacle/build.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Module to build images 3 | ''' 4 | 5 | # third party imports 6 | import os 7 | import re 8 | import sys 9 | import docker 10 | from distutils.version import LooseVersion 11 | 12 | # barnacle imports 13 | import barnacle 14 | import barnacle.helper 15 | 16 | 17 | def _get_dockerfile(b_dir): 18 | ''' 19 | helper method to find dockerfiles in a directory 20 | ''' 21 | files = [] 22 | for root, dirs, d_file in os.walk(b_dir): 23 | if 'Dockerfile' in d_file: 24 | files.append(root) 25 | return files 26 | 27 | def build(conf, img_os=None, all_os=False, no_cache=False): 28 | ''' 29 | build docker images 30 | ''' 31 | def _build_image(path, img_os, no_cache): 32 | try: 33 | kwargs = {'path': path, 'tag': 'salt-' + img_os, 34 | 'nocache': no_cache} 35 | if LooseVersion(docker.version) < LooseVersion('3.0.0'): 36 | kwargs['stream'] = True 37 | for line in client.build(**kwargs): 38 | line = line.decode() 39 | if '":"' in line: 40 | print(re.split('":"|}', line)[1]) 41 | except docker.errors.APIError as err: 42 | print("There was an issue building the VM: {0}".format(err)) 43 | sys.exit(1) 44 | client = barnacle.helper.get_client() 45 | 46 | if all_os: 47 | for dirs in _get_dockerfile(conf.get('barnacle_dir')): 48 | img_os = dirs.split('/')[-1] 49 | _build_image(dirs, img_os, no_cache) 50 | else: 51 | _build_image(conf.get('barnacle_dir') + img_os, img_os, no_cache) 52 | 53 | def main(): 54 | ''' 55 | main method for building images 56 | ''' 57 | b_client = barnacle.Barnacle() 58 | build(b_client.opts, img_os=b_client.args.os, all_os=b_client.args.all, 59 | no_cache=b_client.args.no_cache) 60 | 61 | 62 | if __name__ == "__main__": 63 | main() 64 | -------------------------------------------------------------------------------- /barnacle/conf.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Module to manage parsing the config file 3 | ''' 4 | 5 | import yaml 6 | 7 | def get_conf(path=None): 8 | ''' 9 | helper method to get all config values from config file 10 | ''' 11 | if not path: 12 | path = '/etc/barnacle.conf' 13 | with open(path, 'r') as conf: 14 | try: 15 | config = yaml.safe_load(conf.read()) or {} 16 | except yaml.YAMLError: 17 | raise "Yaml Error. Could not Parse Config" 18 | return config 19 | -------------------------------------------------------------------------------- /barnacle/helper.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Module for helper methods used within barnacle 3 | ''' 4 | 5 | # import third party libraries 6 | import docker 7 | 8 | 9 | def get_client(): 10 | ''' 11 | initialize docker api client 12 | ''' 13 | client = docker.APIClient(base_url='unix://var/run/docker.sock') 14 | return client 15 | -------------------------------------------------------------------------------- /barnacle/parser.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Main args parser 3 | ''' 4 | import argparse 5 | 6 | def get_args(): 7 | ''' 8 | parse all the args 9 | ''' 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument( 12 | '-o', '--os', 13 | help='Specific OS:tag. Ex. cent7 or cent7:7' 14 | ) 15 | parser.add_argument( 16 | '-a', '--all', 17 | action="store_true", 18 | help='Build all OSs in a given directory' 19 | ) 20 | parser.add_argument( 21 | '-t', '--test', 22 | help='Build all OSs in a given directory' 23 | ) 24 | parser.add_argument( 25 | '--no-cache', 26 | action="store_true", 27 | help='Build without cache' 28 | ) 29 | 30 | 31 | 32 | return parser 33 | -------------------------------------------------------------------------------- /barnacle/shell.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Module to start container 3 | ''' 4 | 5 | # import third party libraries 6 | import dockerpty 7 | 8 | # import barnacle modules 9 | import barnacle 10 | import barnacle.helper 11 | 12 | 13 | def shell(os_tag, conf): 14 | ''' 15 | initialize a shell and start container 16 | ''' 17 | salt_volume = conf['salt_dir'] 18 | docker_volume = '/testing/' 19 | client = barnacle.helper.get_client() 20 | 21 | container = client.create_container( 22 | host_config=client.create_host_config(binds=[ 23 | salt_volume + ':' + docker_volume, 24 | ]), 25 | image='salt-' + os_tag, 26 | stdin_open=True, 27 | tty=True, 28 | command='/bin/bash', 29 | ) 30 | 31 | dockerpty.start(client, container) 32 | 33 | 34 | def main(): 35 | ''' 36 | main method to start shell form container 37 | ''' 38 | s_client = barnacle.Barnacle() 39 | s_os = s_client.args.os 40 | if not s_os: 41 | raise Exception('You require the os argument alongside the shell argument') 42 | shell(s_os, s_client.opts) 43 | 44 | 45 | if __name__ == "__main__": 46 | main() 47 | -------------------------------------------------------------------------------- /barnacle/test.py: -------------------------------------------------------------------------------- 1 | ''' 2 | module to run salt tests with containers 3 | ''' 4 | # import barnacle modules 5 | import barnacle 6 | import barnacle.conf 7 | import barnacle.helper 8 | 9 | # import third party libraries 10 | import dockerpty 11 | 12 | def run_test(test, test_os, conf, image='salt-'): 13 | ''' 14 | method to run a salt test with container 15 | ''' 16 | client = barnacle.helper.get_client() 17 | 18 | container = client.create_container( 19 | host_config=client.create_host_config(binds=[ 20 | conf.get('salt_dir') + ':' + conf.get('docker_volume'), 21 | ]), 22 | image=image + test_os, 23 | stdin_open=True, 24 | tty=True, 25 | command='python2 /testing/tests/runtests.py -n {0}'.format(test), 26 | ) 27 | dockerpty.start(client, container) 28 | 29 | 30 | def main(): 31 | ''' 32 | main method to start tests 33 | ''' 34 | t_client = barnacle.Barnacle() 35 | t_os = t_client.args.os 36 | test = t_client.args.test 37 | if not (t_os, test): 38 | raise Exception('You require the os argument alongside the shell argument') 39 | run_test(test, t_os, t_client.opts) 40 | 41 | 42 | if __name__ == "__main__": 43 | main() 44 | -------------------------------------------------------------------------------- /cent6/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:6 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | # Install Python and other useful utilities 32 | RUN yum -y install epel-release https://repo.ius.io/ius-release-el6.rpm 33 | RUN yum -y install wget curl gcc gcc-c++ git openssh-server python27-devel python36u-devel vim iproute 34 | 35 | # Setup environment and UTF-8 locale 36 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 37 | ENV LANG=en_US.utf8 38 | ENV LC_ALL=en_US.utf8 39 | VOLUME /testing 40 | 41 | # Enable sshd 42 | RUN /sbin/chkconfig sshd on 43 | # Set root password to "changeme" and force a change on first login 44 | RUN echo root:changeme | chpasswd 45 | RUN passwd --expire root 46 | 47 | # Get pip installed 48 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 49 | RUN python2.7 /get-pip.py 50 | RUN python3.6 /get-pip.py 51 | 52 | # Install Python packages 53 | COPY requirements.txt /requirements.txt 54 | RUN python2.7 -m pip install -r /requirements.txt 55 | RUN python3.6 -m pip install -r /requirements.txt 56 | 57 | # Get rid of pudb welcome message, and turn on line numbers 58 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 59 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 60 | -------------------------------------------------------------------------------- /cent6/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==3.2 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycrypto==2.6.1 ; sys_platform not in "win32,darwin" 79 | pycryptodome==3.9.7 # via python-jose 80 | pygit2==0.28.2 81 | pyinotify==0.9.6 82 | pynacl==1.3.0 # via paramiko 83 | pyopenssl==19.0.0 84 | pyparsing==2.4.5 # via packaging 85 | pyserial==3.4 # via junos-eznc 86 | pytest-helpers-namespace==2019.1.8 87 | pytest-salt-runtests-bridge==2019.7.10 88 | pytest-salt==2019.12.27 89 | pytest-salt-factories==0.10.4 90 | pytest-tempdir==2019.10.12 91 | pytest==4.6.6 92 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 93 | python-etcd==0.4.5 94 | python-gnupg==0.4.4 95 | python-jose==2.0.2 # via moto 96 | pytz==2019.1 # via moto, tempora 97 | pyvmomi==6.7.1.2018.12 98 | pyyaml==5.1.2 99 | pyzmq==18.0.1 ; python_version != "3.4" 100 | requests==2.21.0 101 | responses==0.10.6 # via moto 102 | rfc3987==1.3.8 103 | rsa==4.0 # via google-auth 104 | s3transfer==0.2.0 # via boto3 105 | salttesting==2017.6.1 106 | scp==0.13.2 # via junos-eznc 107 | setproctitle==1.1.10 108 | setuptools-scm==3.2.0 109 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 110 | smmap2==2.0.5 # via gitdb2 111 | strict-rfc3339==0.7 112 | tempora==1.14.1 # via portend 113 | timelib==0.2.4 114 | tornado==5.1.1; python_version < '3.0' 115 | tornado==6.0.4; python_version >= '3.0' 116 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 117 | vcert==0.7.3 118 | virtualenv==16.4.3 119 | watchdog==0.9.0 120 | wcwidth==0.1.7 # via pytest 121 | websocket-client==0.40.0 # via docker, kubernetes 122 | werkzeug==0.15.6 # via moto 123 | wrapt==1.11.1 # via aws-xray-sdk 124 | xmltodict==0.12.0 # via moto 125 | zc.lockfile==1.4 # via cherrypy 126 | zipp==0.6.0 # via importlib-metadata 127 | -------------------------------------------------------------------------------- /cent7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | # Install Python and other useful utilities 32 | RUN yum -y install epel-release 33 | RUN yum -y install wget curl gcc gcc-c++ git openssh-server python2-devel python3-devel vim iproute 34 | 35 | # Setup environment and UTF-8 locale 36 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 37 | ENV LANG=en_US.utf8 38 | ENV LC_ALL=en_US.utf8 39 | VOLUME /testing 40 | 41 | # Enable sshd 42 | RUN ln -sf /lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 43 | # Set root password to "changeme" and force a change on first login 44 | RUN echo root:changeme | chpasswd 45 | RUN passwd --expire root 46 | 47 | # Get pip installed 48 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 49 | RUN python2 /get-pip.py 50 | RUN python3 /get-pip.py 51 | 52 | # Install Python packages 53 | COPY requirements.txt /requirements.txt 54 | RUN python2 -m pip install -r /requirements.txt 55 | RUN python3 -m pip install -r /requirements.txt 56 | 57 | # Get rid of pudb welcome message, and turn on line numbers 58 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 59 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 60 | -------------------------------------------------------------------------------- /cent7/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==3.2 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /cent8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:8 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | # Install Python and other useful utilities 32 | RUN yum -y install epel-release 33 | RUN yum -y install wget curl gcc gcc-c++ git openssh-server python2-devel python3-devel vim iproute passwd glibc-locale-source glibc-langpack-en 34 | 35 | # Setup environment and UTF-8 locale 36 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 37 | ENV LANG=en_US.utf8 38 | ENV LC_ALL=en_US.utf8 39 | VOLUME /testing 40 | 41 | # Neither Python 2 nor 3 stake a claim on /usr/bin/python, so point it at 42 | # Python 3. Note that this can't be done for CentOS 7 because yum is a python 43 | # script which uses /usr/bin/python, and it is not Py3-compatible. 44 | RUN ln -s /usr/bin/python3 /usr/bin/python 45 | 46 | # Enable sshd 47 | RUN ln -sf /lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 48 | # Set root password to "changeme" and force a change on first login 49 | RUN echo root:changeme | chpasswd 50 | RUN passwd --expire root 51 | 52 | # Get pip installed 53 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 54 | RUN python2 /get-pip.py 55 | RUN python3 /get-pip.py 56 | 57 | # Install Python packages 58 | COPY requirements.txt /requirements.txt 59 | RUN python2 -m pip install -r /requirements.txt 60 | RUN python3 -m pip install -r /requirements.txt 61 | 62 | # Get rid of pudb welcome message, and turn on line numbers 63 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 64 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 65 | -------------------------------------------------------------------------------- /cent8/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /debian10/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | # Make sure 32-bit package installs are enabled 4 | RUN dpkg --add-architecture i386 5 | # Make sure /var/tmp exists 6 | RUN test -e /tmp || ln -s /var/tmp /tmp 7 | # Create some dirs for Salt 8 | RUN mkdir -p /etc/salt/master.d /etc/salt/minion.d /srv/salt /srv/pillar 9 | # Point the minion at localhost 10 | RUN echo "master: localhost" > /etc/salt/minion 11 | # Create a pillar top file and empty pillar SLS file 12 | RUN echo "base:\n test:\n - test" >/srv/pillar/top.sls 13 | RUN touch /srv/pillar/test.sls 14 | # Set a predictable minion ID 15 | RUN echo test >/etc/salt/minion_id 16 | 17 | # Create command stubs to ensure Python 3 is the default 18 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 19 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 20 | salt-syndic salt-unity spm; do \ 21 | echo "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 22 | chmod 0755 /usr/bin/$cmd; \ 23 | done 24 | 25 | # Now do Python 2 26 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 27 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 28 | salt-syndic salt-unity spm; do \ 29 | echo "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 30 | chmod 0755 /usr/bin/${cmd}2; \ 31 | done 32 | 33 | RUN apt-get update 34 | RUN DEBIAN_FRONTEND=noninteractive apt-get -y install wget curl gcc g++ git openssh-server python-dev python3-dev libgit2-dev libffi-dev libxslt-dev libxml2-dev libssl-dev vim iproute2 less locales 35 | 36 | # Make sure UTF8 locale is available 37 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 38 | RUN locale-gen 39 | 40 | # Setup environment and UTF-8 locale 41 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 42 | ENV LANG=en_US.utf8 43 | ENV LC_ALL=en_US.utf8 44 | VOLUME /testing 45 | 46 | # Enable sshd 47 | RUN ln -sf /lib/systemd/system/ssh.service /etc/systemd/system/multi-user.target.wants/ 48 | # Turn on password auth for root user 49 | RUN sed -i 's/.*PermitRootLogin.\+/PermitRootLogin yes/' /etc/ssh/sshd_config 50 | # Set root password to "changeme" and force a change on first login 51 | RUN echo root:changeme | chpasswd 52 | RUN passwd --expire root 53 | 54 | # Get pip installed 55 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 56 | RUN python2 /get-pip.py 57 | RUN python3 /get-pip.py 58 | 59 | # Install Python packages 60 | COPY requirements.txt /requirements.txt 61 | RUN python2 -m pip install -r /requirements.txt 62 | RUN python3 -m pip install -r /requirements.txt 63 | 64 | # Get rid of pudb welcome message, and turn on line numbers 65 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 66 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 67 | -------------------------------------------------------------------------------- /debian10/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /debian8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:jessie 2 | 3 | # Make sure 32-bit package installs are enabled 4 | RUN dpkg --add-architecture i386 5 | # Make sure /var/tmp exists 6 | RUN test -e /tmp || ln -s /var/tmp /tmp 7 | # Create some dirs for Salt 8 | RUN mkdir -p /etc/salt/master.d /etc/salt/minion.d /srv/salt /srv/pillar 9 | # Point the minion at localhost 10 | RUN echo "master: localhost" > /etc/salt/minion 11 | # Create a pillar top file and empty pillar SLS file 12 | RUN echo "base:\n test:\n - test" >/srv/pillar/top.sls 13 | RUN touch /srv/pillar/test.sls 14 | # Set a predictable minion ID 15 | RUN echo test >/etc/salt/minion_id 16 | 17 | # Create command stubs to ensure Python 3 is the default 18 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 19 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 20 | salt-syndic salt-unity spm; do \ 21 | echo "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 22 | chmod 0755 /usr/bin/$cmd; \ 23 | done 24 | 25 | # Now do Python 2 26 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 27 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 28 | salt-syndic salt-unity spm; do \ 29 | echo "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 30 | chmod 0755 /usr/bin/${cmd}2; \ 31 | done 32 | 33 | RUN apt-get update 34 | RUN DEBIAN_FRONTEND=noninteractive apt-get -y install wget curl gcc g++ git openssh-server python-dev python3-dev libgit2-dev libffi-dev libxslt-dev libxml2-dev libssl-dev vim iproute2 less locales 35 | 36 | # Make sure UTF8 locale is available 37 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 38 | RUN locale-gen 39 | 40 | # Setup environment and UTF-8 locale 41 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 42 | ENV LANG=en_US.utf8 43 | ENV LC_ALL=en_US.utf8 44 | VOLUME /testing 45 | 46 | # Enable sshd 47 | RUN ln -sf /lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 48 | # Turn on password auth for root user 49 | RUN sed -i 's/.*PermitRootLogin.\+/PermitRootLogin yes/' /etc/ssh/sshd_config 50 | # Set root password to "changeme" and force a change on first login 51 | RUN echo root:changeme | chpasswd 52 | RUN passwd --expire root 53 | 54 | # Get pip installed 55 | RUN curl https://bootstrap.pypa.io/3.4/get-pip.py >/get-pip.py 56 | RUN python2 /get-pip.py 57 | RUN python3 /get-pip.py 58 | 59 | # Install Python packages 60 | COPY requirements.txt /requirements.txt 61 | RUN python2 -m pip install -r /requirements.txt 62 | RUN python3 -m pip install -r /requirements.txt 63 | 64 | # Get rid of pudb welcome message, and turn on line numbers 65 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 66 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 67 | -------------------------------------------------------------------------------- /debian8/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==3.2 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1 114 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 115 | vcert==0.7.3 116 | virtualenv==16.4.3 117 | watchdog==0.9.0 118 | wcwidth==0.1.7 # via pytest 119 | websocket-client==0.40.0 # via docker, kubernetes 120 | werkzeug==0.15.6 # via moto 121 | wrapt==1.11.1 # via aws-xray-sdk 122 | xmltodict==0.12.0 # via moto 123 | zc.lockfile==1.4 # via cherrypy 124 | zipp==0.6.0 # via importlib-metadata 125 | -------------------------------------------------------------------------------- /debian9/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stretch 2 | 3 | # Make sure 32-bit package installs are enabled 4 | RUN dpkg --add-architecture i386 5 | # Make sure /var/tmp exists 6 | RUN test -e /tmp || ln -s /var/tmp /tmp 7 | # Create some dirs for Salt 8 | RUN mkdir -p /etc/salt/master.d /etc/salt/minion.d /srv/salt /srv/pillar 9 | # Point the minion at localhost 10 | RUN echo "master: localhost" > /etc/salt/minion 11 | # Create a pillar top file and empty pillar SLS file 12 | RUN echo "base:\n test:\n - test" >/srv/pillar/top.sls 13 | RUN touch /srv/pillar/test.sls 14 | # Set a predictable minion ID 15 | RUN echo test >/etc/salt/minion_id 16 | 17 | # Create command stubs to ensure Python 3 is the default 18 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 19 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 20 | salt-syndic salt-unity spm; do \ 21 | echo "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 22 | chmod 0755 /usr/bin/$cmd; \ 23 | done 24 | 25 | # Now do Python 2 26 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 27 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 28 | salt-syndic salt-unity spm; do \ 29 | echo "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 30 | chmod 0755 /usr/bin/${cmd}2; \ 31 | done 32 | 33 | RUN apt-get update 34 | RUN DEBIAN_FRONTEND=noninteractive apt-get -y install wget curl gcc g++ git openssh-server python-dev python3-dev libgit2-dev libffi-dev libxslt-dev libxml2-dev libssl-dev vim iproute2 less locales 35 | 36 | # Make sure UTF8 locale is available 37 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 38 | RUN locale-gen 39 | 40 | # Setup environment and UTF-8 locale 41 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 42 | ENV LANG=en_US.utf8 43 | ENV LC_ALL=en_US.utf8 44 | VOLUME /testing 45 | 46 | # Enable sshd 47 | RUN ln -sf /lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 48 | # Turn on password auth for root user 49 | RUN sed -i 's/.*PermitRootLogin.\+/PermitRootLogin yes/' /etc/ssh/sshd_config 50 | # Set root password to "changeme" and force a change on first login 51 | RUN echo root:changeme | chpasswd 52 | RUN passwd --expire root 53 | 54 | # Get pip installed 55 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 56 | RUN python2 /get-pip.py 57 | RUN python3 /get-pip.py 58 | 59 | # Install Python packages 60 | COPY requirements.txt /requirements.txt 61 | RUN python2 -m pip install -r /requirements.txt 62 | RUN python3 -m pip install -r /requirements.txt 63 | 64 | # Get rid of pudb welcome message, and turn on line numbers 65 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 66 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 67 | -------------------------------------------------------------------------------- /debian9/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /docker_salt.zsh: -------------------------------------------------------------------------------- 1 | LOCAL_VOLUME="${HOME}/devel/salt/" 2 | BARNACLE_DIR="${HOME}/devel/barnacle" 3 | LOCAL_FILEROOTS="/srv/salt" 4 | 5 | if [[ -e /usr/bin/sw_vers && `/usr/bin/sw_vers -productName` == "Mac OS X" ]]; then 6 | SUDO="" 7 | DOCKER="/usr/local/bin/docker" 8 | else 9 | SUDO="sudo" 10 | DOCKER="/usr/bin/docker" 11 | fi 12 | 13 | csalt_func() { 14 | image=$1 15 | shift 16 | $SUDO $DOCKER run --name salt-$image --rm -itv ${LOCAL_VOLUME}:/testing salt-$image ${@:-/bin/bash} 17 | } 18 | 19 | cexec_func() { 20 | image=$1 21 | shift 22 | $SUDO $DOCKER exec -ti salt-$image ${@:-/bin/bash} 23 | } 24 | 25 | ctest_func() { 26 | #function variables 27 | local no_clean='' 28 | local rm='--rm' 29 | local usage='False' 30 | local image=${1} 31 | local test=${2} 32 | 33 | # get all opts 34 | while test $# -gt 0;do 35 | case "$1" in 36 | '--no-clean') 37 | local rm='' 38 | local no_clean='--no-clean' 39 | ;; 40 | '--help'|'-h') 41 | local usage='True' 42 | ;; 43 | esac 44 | shift 45 | done 46 | 47 | # cannot call a usage funciton because it wont exit and will run docker command 48 | # so need to put in if function 49 | if [ ${usage} = 'True' ]; then 50 | echo "usage: cts " 51 | echo "example: cts ubuntu14 integration.modules.test" 52 | echo "options available:" 53 | echo "--no-clean -> will add --no-clean to runner and ensure -rm is not added to docker run cmd" 54 | echo "--help|-h -> will print out usage information" 55 | else 56 | $SUDO $DOCKER run ${rm} -itv ${LOCAL_VOLUME}:/testing salt-${image} python2 /testing/tests/runtests.py "${no_clean}" -n ${test} 57 | fi 58 | } 59 | 60 | cbuild_func() { 61 | sudo ${BARNACLE_DIR}/auto_build.sh $1 $2 62 | } 63 | 64 | csalt-call_cmd_func() { 65 | local image=$1 66 | local salt_cmd=$2 67 | local salt_args=$3 68 | $SUDO $DOCKER run --name salt-$image --rm -itv ${LOCAL_VOLUME}:/testing -v ${LOCAL_FILEROOTS}:/srv/salt/ salt-$image salt-call --local ${salt_cmd} ${salt_args} 69 | } 70 | 71 | cstart-systemd_func() { 72 | local container=$1 73 | local image=$2 74 | if test -z "$container"; then 75 | echo "Missing container name!" 1>&2 76 | exit 1 77 | fi 78 | if test -z "$image"; then 79 | echo "Missing image name!" 1>&2 80 | exit 2 81 | fi 82 | 83 | $SUDO $DOCKER run -d --name $container --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v ${LOCAL_VOLUME}:/testing salt-$image /usr/lib/systemd/systemd 84 | } 85 | 86 | cssh_func() { 87 | local container=$1 88 | if test -z "$container"; then 89 | echo "Missing container name!" 1>&2 90 | exit 1 91 | fi 92 | 93 | local ipaddr=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' $container) 94 | 95 | # Disable strict checking because docker will reuse IP addresses 96 | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "root@$ipaddr" 97 | } 98 | 99 | cdshell_func() { 100 | local container=$1 101 | local shell=$2 102 | if test -z "$container"; then 103 | echo "Missing container name!" 1>&2 104 | exit 1 105 | fi 106 | if test -x "$shell"; then 107 | echo "No shell specified, defaulting to bash" 1>&2 108 | shell=/bin/bash 109 | fi 110 | docker exec -ti $container $shell 111 | } 112 | 113 | # ALIASES 114 | alias cshell='csalt_func' 115 | alias cexec='cexec_func' 116 | alias cts='ctest_func' 117 | alias cbuild='cbuild_func' 118 | alias csalt-call='csalt-call_cmd_func' 119 | alias cstart-systemd='cstart-systemd_func' 120 | alias cssh='cssh_func' 121 | alias cdshell='cdshell_func()' 122 | -------------------------------------------------------------------------------- /fedora30/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fedora:30 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | # Install Python and other useful utilities 32 | RUN dnf -y install wget curl gcc gcc-c++ git openssh-server python2-devel python3-devel vim iproute passwd 33 | 34 | # Setup environment and UTF-8 locale 35 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 36 | ENV LANG=en_US.utf8 37 | ENV LC_ALL=en_US.utf8 38 | VOLUME /testing 39 | 40 | # Set root password to "changeme" and force a change on first login 41 | RUN echo root:changeme | chpasswd 42 | RUN passwd --expire root 43 | 44 | # Get pip installed 45 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 46 | RUN python /get-pip.py 47 | RUN python /get-pip.py 48 | 49 | # Install Python packages 50 | COPY requirements.txt /requirements.txt 51 | RUN python2 -m pip install -r /requirements.txt 52 | RUN python3 -m pip install -r /requirements.txt 53 | 54 | # Get rid of pudb welcome message, and turn on line numbers 55 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 56 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 57 | -------------------------------------------------------------------------------- /fedora30/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /fedora31/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fedora:31 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | # Install Python and other useful utilities 32 | RUN dnf -y install wget curl gcc gcc-c++ git openssh-server python2-devel python3-devel vim iproute passwd glibc-locale-source glibc-langpack-en 33 | 34 | # Setup environment and UTF-8 locale 35 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 36 | ENV LANG=en_US.utf8 37 | ENV LC_ALL=en_US.utf8 38 | VOLUME /testing 39 | 40 | # Set root password to "changeme" and force a change on first login 41 | RUN echo root:changeme | chpasswd 42 | RUN passwd --expire root 43 | 44 | # Get pip installed 45 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 46 | RUN python2 /get-pip.py 47 | RUN python3 /get-pip.py 48 | 49 | # Install Python packages 50 | COPY requirements.txt /requirements.txt 51 | RUN python2 -m pip install -r /requirements.txt 52 | RUN python3 -m pip install -r /requirements.txt 53 | 54 | # Get rid of pudb welcome message, and turn on line numbers 55 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 56 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 57 | -------------------------------------------------------------------------------- /fedora31/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /leap151/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM opensuse/leap:15.1 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | RUN zypper --non-interactive install wget curl gcc gcc-c++ git openssh python-devel python-xml python3-devel libgit2-devel libffi-devel libxslt-devel libxml2-devel vim iproute2 32 | 33 | # Setup environment and UTF-8 locale 34 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 35 | ENV LANG=en_US.utf8 36 | ENV LC_ALL=en_US.utf8 37 | VOLUME /testing 38 | 39 | # Enable openssh so we can login to the container 40 | RUN ln -s /usr/lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 41 | # Set root password to "changeme" and force a change on first login 42 | RUN echo root:changeme | chpasswd 43 | RUN passwd --expire root 44 | 45 | # Get pip installed 46 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 47 | RUN python2 /get-pip.py 48 | RUN python3 /get-pip.py 49 | 50 | # Install Python packages 51 | COPY requirements.txt /requirements.txt 52 | RUN python2 -m pip install -r /requirements.txt 53 | RUN python3 -m pip install -r /requirements.txt 54 | 55 | # Get rid of pudb welcome message, and turn on line numbers 56 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 57 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 58 | -------------------------------------------------------------------------------- /leap151/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /leap152/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM opensuse/leap:15.0 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | RUN zypper --non-interactive install wget curl gcc gcc-c++ git openssh python-devel python-xml python3-devel libgit2-devel libffi-devel libxslt-devel libxml2-devel vim iproute2 32 | 33 | # Setup environment and UTF-8 locale 34 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 35 | ENV LANG=en_US.utf8 36 | ENV LC_ALL=en_US.utf8 37 | VOLUME /testing 38 | 39 | # Enable openssh so we can login to the container 40 | RUN ln -s /usr/lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/ 41 | # Set root password to "changeme" and force a change on first login 42 | RUN echo root:changeme | chpasswd 43 | RUN passwd --expire root 44 | 45 | # Get pip installed 46 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 47 | RUN python2 /get-pip.py 48 | RUN python3 /get-pip.py 49 | 50 | # Install Python packages 51 | COPY requirements.txt /requirements.txt 52 | RUN python2 -m pip install -r /requirements.txt 53 | RUN python3 -m pip install -r /requirements.txt 54 | 55 | # Get rid of pudb welcome message, and turn on line numbers 56 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 57 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 58 | -------------------------------------------------------------------------------- /leap152/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /scripts/barnacle-build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import barnacle.build 4 | 5 | if __name__ == '__main__': 6 | barnacle.build.main() 7 | -------------------------------------------------------------------------------- /scripts/barnacle-shell: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import barnacle.shell 4 | 5 | if __name__ == '__main__': 6 | barnacle.shell.main() 7 | -------------------------------------------------------------------------------- /scripts/barnacle-test: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import barnacle.test 4 | 5 | if __name__ == '__main__': 6 | barnacle.test.main() 7 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | setup script for barnacle 4 | ''' 5 | from setuptools import setup 6 | 7 | setup( 8 | name='barnacle', 9 | version='0.1', 10 | packages=['barnacle'], 11 | license='Apache Software License 2.0', 12 | install_requires=[ 13 | 'docker', 14 | 'dockerpty', 15 | 'PyYaml', 16 | ], 17 | scripts=[ 18 | 'scripts/barnacle-test', 19 | 'scripts/barnacle-shell', 20 | 'scripts/barnacle-build', 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /tumbleweed/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM opensuse/tumbleweed:latest 2 | 3 | # Make sure /var/tmp exists 4 | RUN test -e /tmp || ln -s /var/tmp /tmp 5 | # Create some dirs for Salt 6 | RUN mkdir -p /etc/salt/{master,minion}.d /srv/salt /srv/pillar 7 | # Point the minion at localhost 8 | RUN echo "master: localhost" > /etc/salt/minion 9 | # Create a pillar top file and empty pillar SLS file 10 | RUN echo -e "base:\n test:\n - test" >/srv/pillar/top.sls 11 | RUN touch /srv/pillar/test.sls 12 | # Set a predictable minion ID 13 | RUN echo test >/etc/salt/minion_id 14 | 15 | # Create command stubs to ensure Python 3 is the default 16 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 17 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 18 | salt-syndic salt-unity spm; do \ 19 | echo -e "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 20 | chmod 0755 /usr/bin/$cmd; \ 21 | done 22 | 23 | # Now do Python 2 24 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 25 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 26 | salt-syndic salt-unity spm; do \ 27 | echo -e "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 28 | chmod 0755 /usr/bin/${cmd}2; \ 29 | done 30 | 31 | RUN zypper --non-interactive dup 32 | RUN zypper --non-interactive install wget curl gcc gcc-c++ git openssh python-devel python-xml python3-devel libgit2-devel libffi-devel libxslt-devel libxml2-devel vim iproute2 33 | 34 | # Setup environment and UTF-8 locale 35 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 36 | ENV LANG=en_US.utf8 37 | ENV LC_ALL=en_US.utf8 38 | VOLUME /testing 39 | 40 | # Set root password to "changeme" and force a change on first login 41 | RUN echo root:changeme | chpasswd 42 | RUN passwd --expire root 43 | 44 | # Get pip installed 45 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 46 | RUN python2 /get-pip.py 47 | RUN python3 /get-pip.py 48 | 49 | # Install Python packages 50 | COPY requirements.txt /requirements.txt 51 | RUN python2 -m pip install -r /requirements.txt 52 | RUN python3 -m pip install -r /requirements.txt 53 | 54 | # Get rid of pudb welcome message, and turn on line numbers 55 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 56 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 57 | -------------------------------------------------------------------------------- /tumbleweed/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==3.2 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==1.0.3; python_version >= '3.0' 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /ubuntu16/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | # Make sure 32-bit package installs are enabled 4 | RUN dpkg --add-architecture i386 5 | # Make sure /var/tmp exists 6 | RUN test -e /tmp || ln -s /var/tmp /tmp 7 | # Create some dirs for Salt 8 | RUN mkdir -p /etc/salt/master.d /etc/salt/minion.d /srv/salt /srv/pillar 9 | # Point the minion at localhost 10 | RUN echo "master: localhost" > /etc/salt/minion 11 | # Create a pillar top file and empty pillar SLS file 12 | RUN echo "base:\n test:\n - test" >/srv/pillar/top.sls 13 | RUN touch /srv/pillar/test.sls 14 | # Set a predictable minion ID 15 | RUN echo test >/etc/salt/minion_id 16 | 17 | # Create command stubs to ensure Python 3 is the default 18 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 19 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 20 | salt-syndic salt-unity spm; do \ 21 | echo "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 22 | chmod 0755 /usr/bin/$cmd; \ 23 | done 24 | 25 | # Now do Python 2 26 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 27 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 28 | salt-syndic salt-unity spm; do \ 29 | echo "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 30 | chmod 0755 /usr/bin/${cmd}2; \ 31 | done 32 | 33 | RUN apt-get update 34 | RUN apt-get -y install wget curl gcc g++ git openssh-server python-dev python3-dev vim iproute less locales 35 | 36 | # Make sure UTF8 locale is available 37 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 38 | RUN locale-gen 39 | 40 | # Setup environment and UTF-8 locale 41 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 42 | ENV LANG=en_US.utf8 43 | ENV LC_ALL=en_US.utf8 44 | VOLUME /testing 45 | 46 | # Turn on password auth for root user 47 | RUN sed -i 's/.*PermitRootLogin.\+/PermitRootLogin yes/' /etc/ssh/sshd_config 48 | # Set root password to "changeme" and force a change on first login 49 | RUN echo root:changeme | chpasswd 50 | RUN passwd --expire root 51 | 52 | # Get pip installed 53 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 54 | RUN python2 /get-pip.py 55 | RUN python3 /get-pip.py 56 | 57 | # Install Python packages 58 | COPY requirements.txt /requirements.txt 59 | RUN python2 -m pip install -r /requirements.txt 60 | RUN python3 -m pip install -r /requirements.txt 61 | 62 | # Get rid of pudb welcome message, and turn on line numbers 63 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 64 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 65 | -------------------------------------------------------------------------------- /ubuntu16/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /ubuntu18/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | # Make sure 32-bit package installs are enabled 4 | RUN dpkg --add-architecture i386 5 | # Make sure /var/tmp exists 6 | RUN test -e /tmp || ln -s /var/tmp /tmp 7 | # Create some dirs for Salt 8 | RUN mkdir -p /etc/salt/master.d /etc/salt/minion.d /srv/salt /srv/pillar 9 | # Point the minion at localhost 10 | RUN echo "master: localhost" > /etc/salt/minion 11 | # Create a pillar top file and empty pillar SLS file 12 | RUN echo "base:\n test:\n - test" >/srv/pillar/top.sls 13 | RUN touch /srv/pillar/test.sls 14 | # Set a predictable minion ID 15 | RUN echo test >/etc/salt/minion_id 16 | 17 | # Create command stubs to ensure Python 3 is the default 18 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 19 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 20 | salt-syndic salt-unity spm; do \ 21 | echo "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 22 | chmod 0755 /usr/bin/$cmd; \ 23 | done 24 | 25 | # Now do Python 2 26 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 27 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 28 | salt-syndic salt-unity spm; do \ 29 | echo "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 30 | chmod 0755 /usr/bin/${cmd}2; \ 31 | done 32 | 33 | RUN apt-get update 34 | RUN apt-get -y install wget curl gcc g++ git openssh-server python-dev python3-dev vim iproute2 less locales 35 | 36 | # Make sure UTF8 locale is available 37 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 38 | RUN locale-gen 39 | 40 | # Setup environment and UTF-8 locale 41 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 42 | ENV LANG=en_US.utf8 43 | ENV LC_ALL=en_US.utf8 44 | VOLUME /testing 45 | 46 | # Turn on password auth for root user 47 | RUN sed -i 's/.*PermitRootLogin.\+/PermitRootLogin yes/' /etc/ssh/sshd_config 48 | # Set root password to "changeme" and force a change on first login 49 | RUN echo root:changeme | chpasswd 50 | RUN passwd --expire root 51 | 52 | # Get pip installed 53 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 54 | RUN python2 /get-pip.py 55 | RUN python3 /get-pip.py 56 | 57 | # Install Python packages 58 | COPY requirements.txt /requirements.txt 59 | RUN python2 -m pip install -r /requirements.txt 60 | RUN python3 -m pip install -r /requirements.txt 61 | 62 | # Get rid of pudb welcome message, and turn on line numbers 63 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 64 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 65 | -------------------------------------------------------------------------------- /ubuntu18/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | -------------------------------------------------------------------------------- /ubuntu20/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:20.04 2 | 3 | # Make sure 32-bit package installs are enabled 4 | RUN dpkg --add-architecture i386 5 | # Make sure /var/tmp exists 6 | RUN test -e /tmp || ln -s /var/tmp /tmp 7 | # Create some dirs for Salt 8 | RUN mkdir -p /etc/salt/master.d /etc/salt/minion.d /srv/salt /srv/pillar 9 | # Point the minion at localhost 10 | RUN echo "master: localhost" > /etc/salt/minion 11 | # Create a pillar top file and empty pillar SLS file 12 | RUN echo "base:\n test:\n - test" >/srv/pillar/top.sls 13 | RUN touch /srv/pillar/test.sls 14 | # Set a predictable minion ID 15 | RUN echo test >/etc/salt/minion_id 16 | 17 | # Create command stubs to ensure Python 3 is the default 18 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 19 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 20 | salt-syndic salt-unity spm; do \ 21 | echo "#!/bin/bash\n\npython3 /testing/scripts/$cmd \"\$@\"" >/usr/bin/$cmd; \ 22 | chmod 0755 /usr/bin/$cmd; \ 23 | done 24 | 25 | # Now do Python 2 26 | RUN for cmd in salt salt-api salt-call salt-cloud salt-cp salt-extend \ 27 | salt-key salt-master salt-minion salt-proxy salt-run salt-ssh \ 28 | salt-syndic salt-unity spm; do \ 29 | echo "#!/bin/bash\n\npython2 /testing/scripts/$cmd \"\$@\"" >/usr/bin/${cmd}2; \ 30 | chmod 0755 /usr/bin/${cmd}2; \ 31 | done 32 | 33 | RUN apt-get update 34 | RUN DEBIAN_FRONTEND=noninteractive apt-get -y install wget curl gcc g++ git openssh-server python-dev python3-dev libgit2-dev libffi-dev libxslt-dev libxml2-dev vim iproute2 less locales 35 | 36 | # Make sure UTF8 locale is available 37 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 38 | RUN locale-gen 39 | 40 | # Setup environment and UTF-8 locale 41 | ENV PYTHONPATH=/testing/:/testing/salt-testing/ 42 | ENV LANG=en_US.utf8 43 | ENV LC_ALL=en_US.utf8 44 | VOLUME /testing 45 | 46 | # Turn on password auth for root user 47 | RUN sed -i 's/.*PermitRootLogin.\+/PermitRootLogin yes/' /etc/ssh/sshd_config 48 | # Set root password to "changeme" and force a change on first login 49 | RUN echo root:changeme | chpasswd 50 | RUN passwd --expire root 51 | 52 | # Get pip installed 53 | RUN curl https://bootstrap.pypa.io/get-pip.py >/get-pip.py 54 | RUN python2 /get-pip.py 55 | RUN python3 /get-pip.py 56 | 57 | # Install Python packages 58 | COPY requirements.txt /requirements.txt 59 | RUN python2 -m pip install -r /requirements.txt 60 | RUN python3 -m pip install -r /requirements.txt 61 | 62 | # Get rid of pudb welcome message, and turn on line numbers 63 | RUN sed -i 's/seen_welcome = .\+/seen_welcome = e999/' /root/.config/pudb/pudb.cfg 64 | RUN sed -i 's/line_numbers = .\+/line_numbers = True/' /root/.config/pudb/pudb.cfg 65 | -------------------------------------------------------------------------------- /ubuntu20/requirements.txt: -------------------------------------------------------------------------------- 1 | pudb 2 | 3 | backports-abc==0.5; python_version < '3.0' 4 | singledispatch==3.4.0.3; python_version < '3.4' 5 | futures>=2.0; python_version < '3.0' 6 | 7 | apache-libcloud==2.0.0 8 | argh==0.26.2 # via watchdog 9 | asn1crypto==1.3.0 # via certvalidator, cryptography, oscrypto 10 | atomicwrites==1.3.0 # via pytest 11 | attrs==19.1.0 # via pytest 12 | aws-xray-sdk==0.95 # via moto 13 | backports.functools-lru-cache==1.5 # via cheroot 14 | backports.ssl-match-hostname==3.7.0.1 # via websocket-client 15 | bcrypt==3.1.6 # via paramiko 16 | boto3==1.9.132 17 | boto==2.49.0 18 | botocore==1.12.132 # via boto3, moto, s3transfer 19 | cachetools==3.1.0 # via google-auth 20 | certifi==2019.3.9 21 | certvalidator==0.11.1 # via vcert 22 | cffi==1.12.2 23 | chardet==3.0.4 # via requests 24 | cheetah3==3.1.0 25 | cheroot==6.5.4 # via cherrypy 26 | cherrypy==17.3.0 27 | contextlib2==0.5.5 # via cherrypy 28 | croniter==0.3.29 29 | cryptography==2.6.1 # via moto, paramiko, pyopenssl, vcert 30 | dnspython==1.16.0 31 | distro==1.5.0 32 | docker-pycreds==0.4.0 # via docker 33 | docker==3.7.2 34 | docutils==0.14 # via botocore 35 | ecdsa==0.13.3 # via python-jose 36 | future==0.17.1 # via python-jose 37 | genshi==0.7.3 38 | gitdb2==2.0.5 # via gitpython 39 | gitpython==2.1.11 40 | google-auth==1.6.3 # via kubernetes 41 | hgtools==8.1.1 42 | idna==2.8 # via requests 43 | importlib-metadata==0.23 # via pluggy, pytest 44 | ipaddress==1.0.22 # via kubernetes 45 | jaraco.functools==2.0 # via tempora 46 | jinja2==2.10.1 47 | jmespath==0.9.4 48 | jsondiff==1.1.1 # via moto 49 | jsonpickle==1.1 # via aws-xray-sdk 50 | jsonschema==2.6.0 51 | junos-eznc==2.2.0 52 | jxmlease==1.0.1 53 | kazoo==2.6.1 54 | keyring==5.7.1 55 | kubernetes==3.0.0 56 | libnacl==1.7.1 57 | lxml==4.3.3 # via junos-eznc, ncclient 58 | mako==1.1.0 59 | markupsafe==1.1.1 60 | mock==3.0.5 61 | more-itertools==5.0.0 62 | moto==1.3.7 63 | msgpack==0.5.6 64 | ncclient==0.6.4 # via junos-eznc 65 | netaddr==0.7.19 # via junos-eznc 66 | oscrypto==1.2.0 # via certvalidator 67 | packaging==19.2 # via pytest 68 | paramiko==2.4.2 69 | pathtools==0.1.2 # via watchdog 70 | pluggy==0.13.0 # via pytest 71 | portend==2.4 # via cherrypy 72 | psutil==5.6.6 73 | py==1.8.0 # via pytest 74 | pyaml==19.4.1 # via moto 75 | pyasn1-modules==0.2.4 # via google-auth 76 | pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa 77 | pycparser==2.19 # via cffi 78 | pycryptodome==3.9.7 # via python-jose 79 | pygit2==0.28.2 80 | pyinotify==0.9.6 81 | pynacl==1.3.0 # via paramiko 82 | pyopenssl==19.0.0 83 | pyparsing==2.4.5 # via packaging 84 | pyserial==3.4 # via junos-eznc 85 | pytest-helpers-namespace==2019.1.8 86 | pytest-salt-runtests-bridge==2019.7.10 87 | pytest-salt==2019.12.27 88 | pytest-salt-factories==0.10.4 89 | pytest-tempdir==2019.10.12 90 | pytest==4.6.6 91 | python-dateutil==2.8.0 # via botocore, croniter, kubernetes, moto, vcert 92 | python-etcd==0.4.5 93 | python-gnupg==0.4.4 94 | python-jose==2.0.2 # via moto 95 | pytz==2019.1 # via moto, tempora 96 | pyvmomi==6.7.1.2018.12 97 | pyyaml==5.1.2 98 | pyzmq==18.0.1 ; python_version != "3.4" 99 | requests==2.21.0 100 | responses==0.10.6 # via moto 101 | rfc3987==1.3.8 102 | rsa==4.0 # via google-auth 103 | s3transfer==0.2.0 # via boto3 104 | salttesting==2017.6.1 105 | scp==0.13.2 # via junos-eznc 106 | setproctitle==1.1.10 107 | setuptools-scm==3.2.0 108 | six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kazoo, kubernetes, mock, more-itertools, moto, ncclient, packaging, pygit2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, tempora, vcert, websocket-client 109 | smmap2==2.0.5 # via gitdb2 110 | strict-rfc3339==0.7 111 | tempora==1.14.1 # via portend 112 | timelib==0.2.4 113 | tornado==5.1.1; python_version < '3.0' 114 | tornado==6.0.4; python_version >= '3.0' 115 | urllib3==1.24.2 # via botocore, kubernetes, python-etcd, requests 116 | vcert==0.7.3 117 | virtualenv==16.4.3 118 | watchdog==0.9.0 119 | wcwidth==0.1.7 # via pytest 120 | websocket-client==0.40.0 # via docker, kubernetes 121 | werkzeug==0.15.6 # via moto 122 | wrapt==1.11.1 # via aws-xray-sdk 123 | xmltodict==0.12.0 # via moto 124 | zc.lockfile==1.4 # via cherrypy 125 | zipp==0.6.0 # via importlib-metadata 126 | --------------------------------------------------------------------------------