Ansible Docker Module from OSX - docker

I am trying to use the Ansible Docker module at the moment but I am currently encountering this error when I try to run my playbook -
NameError: global name 'DEFAULT_DOCKER_API_VERSION' is not defined
I found an official bug regarding this at https://github.com/ansible/ansible-modules-core/issues/1792.
I have tried the workaround by installing docker-py but have had no joy as of yet.
Any ideas on what could be going wrong? I'm trying to run my Playbook from my local OSX host that connects to AWS.

After further investigation we managed to get it to work by using -
name: Install Docker PY
pip: name=docker-py==1.1.0
In our .yml file

pip is a package manager for python and installs with it. So what you want to do is installing python.
On OS X I recommend you to first install Homebrew, which is a package manager for OS X. The command to install Homebrew is
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
After Homebrew is installed you can install python and along with it pip with
brew install python

Normally it is related to the absence of pip or docker-py library.
I have this in my docker ansible role.
- name: install the required packages
apt: pkg={{ item }} state=present update_cache=yes
with_items:
- python-pip
- name: Install docker-py as a workaround for Ansible issue
pip: name=docker-py version=1.2.3

TLDR; -e use_tls=encrypt
I'm using the newest dockerpy==1.5.0
~/.bash_profile I have eval "$(docker-machine env default)" which will run
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/meyers/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
Now that your environment is setup let me tell you the fix. The docker module needs the parameter tls=encrypt. You can supply it to each invocation of the docker module in your Ansible task or you can set it "globally" via -e use_tls=encrypt or in your playbook:
- hosts: all
vars:
use_tls: 'encrypt'
tasks:
...

Related

Ansible Docker containers dynamic inventory on MacOS

I have started a Docker container using the following command:
docker run tomcat:latest
Then I created a file named docker.yml with the following contents:
plugin: community.docker.docker_containers
docker_host: unix://var/run/docker.sock
Finally I try to obtain a list of the currently running Docker containers using:
ansible-inventory -i docker.yml --list
However instead of a list of running containers, I only get the following result:
[WARNING]: * Failed to parse docker.yml with yaml plugin: Plugin configuration YAML file, not YAML inventory
[WARNING]: * Failed to parse docker.yml with constructed plugin: Incorrect plugin name in file: community.docker.docker_containers
[WARNING]: Unable to parse docker.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
Have I misunderstood the Ansible Docker containers dynamic inventory or am I doing something wrong?
I suspect I had a case of system in disarray and this was the cure:
I retained my current Python installation located at ~/Library/Python/3.9/.
Attempted to uninstall Ansible using pip:
pip uninstall ansible
Manually removed all things Ansible:
sudo rm -r /etc/ansible
sudo rm -r -/.ansible
sudo rm -r /usr/local/lib/python3.9/site-packages/ansible*
sudo rm /usr/local/bin/ansible*
Performed a fresh installation of Ansible:
pip install ez_setup
pip install --user ansible
Installed Ansible Docker collection prerequisite:
pip install docker
Installed Ansible Docker collection:
ansible-galaxy collection install community.docker
After the above, the Ansible Docker container dynamic inventory works as expected and without errors.

Docker: Openjdk:14 RHEL based imaged, cannot install yum/wget/netstat

In my dockerfile, I need a maven builder (3.6 at least) working on a OpenJDK (J14 is required).
FROM maven:3.6.3-openjdk-14 as builder
The problem is simple: I need netstat command because it is used in several scripts. The OpenJDK official image is RHEL based, so it comes without any of this package installed.
I tried to download it or yum via wget command but, as you can guess, it is not installed. I feel trapped because it seems like you cannot you can't install any package on it.
That image is actually based on Oracle
$ podman run -it maven:3.6.3-openjdk-14 /bin/bash -c 'cat /etc/os-release'
NAME="Oracle Linux Server"
VERSION="8.2"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.2"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:2:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.2
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.2
And this is actually a "slim" variant where dnf or yum aren't installed, but microdnf is. Try using that, instead:
RUN microdnf install /usr/bin/netstat
Or
RUN microdnf install net-tools

Error while running (docker_image) module ansible Playbook

I have my docker images in nexus. When i am trying to run that playbook i am getting error
Playbook Code
---
- hosts: localhost
become: True
tasks:
- name: pull an image
docker_image:
name: 10.220.110.10:8083/halosys:f5a950f
source: pull
...
ERROR while running my playbook
TASK [pull an image] **************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (docker_image) module: source Supported parameters include: api_version, archive_path, buildargs, cacert_path, cert_path, container_limits, debug, docker_host, dockerfile, force, http_timeout, key_path, load_path, name, nocache, path, pull, push, repository, rm, ssl_version, state, tag, timeout, tls, tls_hostname, tls_verify, use_tls"}
Please help to fix this error
Option source was added in Ansible 2.8 - see documentation. The error message states it is missing, so you're using older version. To fix this you need to either update your Ansible installation to at least version 2.8 or check the documentation for your version.
For example, Ansible 2.7 documentation states that to pull an image you need to do:
- name: pull an image
docker_image:
name: 10.220.110.10:8083/halosys:f5a950f
To check what version of Ansible you're running use command
ansible --version
EDIT:
I can’t guarantee it’ll work, but I would try removing Ansible installed from system packages:
sudo yum remove ansible
followed by installing Python 3:
sudo yum install python36 python36-virtualenv python36-pip
then installing docker-py using pip:
python3 -m pip install docker-py
And finally installing Ansible with Python3 support:
python3 -m pip install ansible
Here’s Ansible documentation about Python3 support.
Also if package python36 is not available you can run
sudo yum list | grep python3
to find what version is available. As per documentation mentioned above you need at least python35 to make Ansible work.

How to make both javac and java on my path in ubuntu 16.04 LTS

I need to make both javac and java on my path.
I used the commands I got from other sites
$ sudo apt-get install default-jre
$ sudo apt-get install default-jdk
$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
$ which java
/usr/bin/java
$ sudo update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
Nothing to configure.
Now provided all of these information, how can I set the path? I am comfortable using vi ~/.bashrc. So please guide me step by step for the setup. I found other posts very confusing.
sudo vim .bashrc
(Check this path "/usr/lib/jvm/java-8-oracle" if jvm installed their)
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=$PATH:$JAVA_HOME/bin
save it.
run
bash
or
source .bashrc

Can't start elasticsearch server via Homebrew

So I have installed elasticsearch through brew:
$ brew install elasticsearch
Then when I run the elasticsearch server:
elasticsearch -f -D es.config=/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml
I get this error:
{0.20.4}: Setup Failed ...
- FailedToResolveConfigException[Failed to resolve config path [/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml], tried file path [/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml], path file [/usr/local/Cellar/elasticsearch/0.20.4/config/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml], and classpath]
How can I fix this? Any ideas och suggestions are welcome.
I did this and it had worked for me:
Get the package:
$ curl -k -L -o elasticsearch-0.20.2.tar.gz http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.2.tar.gz
Unzipp:
$ tar -zxvf elasticsearch-0.20.2.tar.gz
Run the elasticsearch server:
./elasticsearch-0.20.2/bin/elasticsearch -f
try with
elasticsearch -f -Des.path.conf=/usr/local/Cellar/elasticsearch/0.19.3/config/
That's weird, my install asked me to run elasticsearch slightly different. I got it running with:
Install
$ brew update
$ brew install elasticsearch
Run Elasticsearch
$ elasticsearch --config=/usr/local/opt/elasticsearch/config/elasticsearch.yml
As #karmi said, brew info elasticsearch shows how to run elasticsearch on your system.
Things haven't been changed in 2021.
Homebrew stops distributing newer version of elasticsearch, and kibana, although you can still get outdated versions in homebrew-core.
It's beacause Homebrew defers to the OSI's open source licence definition. The new license used by elastic softwares is not compatible with it, and Homebrew rufuses to distribute them.
So, elastic begins to distribute these software with its own custom tap.
# tap maintained by elastic organization
# https://github.com/elastic/homebrew-tap
brew tap elastic/tap
brew install elastic/tap/elasticsearch-full
# brew install elastic/tap/kibina-full
# brew install elastic/tap/logstash-full

Resources