mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-05-11 20:12:18 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
abcc3e884c | ||
|
|
15799b2dd5 | ||
|
|
35af8a48ad | ||
|
|
8280bb78c0 | ||
|
|
2eca446f09 | ||
|
|
cd72b6d7df | ||
|
|
b50f1f2fc9 | ||
|
|
2594ac654b | ||
|
|
c11a255026 | ||
|
|
46494a18bd | ||
|
|
4ccb15d4ad | ||
|
|
58dba6bf22 | ||
|
|
b7345696cc | ||
|
|
98cb88a701 |
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -75,6 +75,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
python_version: ['3.7']
|
||||
ansible_version: ['==2.9.*', '==2.10.*', '']
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v2
|
||||
@@ -92,7 +93,7 @@ jobs:
|
||||
# The 3.3.0 release of molecule introduced a breaking change. See
|
||||
# https://github.com/ansible-community/molecule/issues/3083
|
||||
- name: Install molecule and kubernetes dependencies
|
||||
run: pip install ansible "molecule<3.3.0" yamllint kubernetes flake8 jsonpatch
|
||||
run: pip install ansible${{ matrix.ansible_version }} "molecule<3.3.0" yamllint kubernetes flake8 jsonpatch
|
||||
|
||||
# The latest release doesn't work with Molecule currently.
|
||||
# See: https://github.com/ansible-community/molecule/issues/2757
|
||||
|
||||
@@ -5,6 +5,40 @@ Kubernetes Collection Release Notes
|
||||
.. contents:: Topics
|
||||
|
||||
|
||||
v2.1.1
|
||||
======
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- check auth params for existence, not whether they are true (https://github.com/ansible-collections/kubernetes.core/pull/151).
|
||||
|
||||
v2.1.0
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- remove cloud.common as default dependency (https://github.com/ansible-collections/kubernetes.core/pull/148).
|
||||
- temporarily disable turbo mode (https://github.com/ansible-collections/kubernetes.core/pull/149).
|
||||
|
||||
v2.0.2
|
||||
======
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix apply for k8s module when an array attribute from definition contains empty dict (https://github.com/ansible-collections/kubernetes.core/issues/113).
|
||||
- rename the apply function to fix broken imports in Ansible 2.9 (https://github.com/ansible-collections/kubernetes.core/pull/135).
|
||||
|
||||
v2.0.1
|
||||
======
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- inventory - add community.kubernetes to list of plugin choices in k8s inventory (https://github.com/ansible-collections/kubernetes.core/pull/128).
|
||||
|
||||
v2.0.0
|
||||
======
|
||||
|
||||
|
||||
2
Makefile
2
Makefile
@@ -1,5 +1,5 @@
|
||||
# Also needs to be updated in galaxy.yml
|
||||
VERSION = 2.0.0
|
||||
VERSION = 2.1.1
|
||||
|
||||
TEST_ARGS ?= ""
|
||||
PYTHON_VERSION ?= `python -c 'import platform; print("{0}.{1}".format(platform.python_version_tuple()[0], platform.python_version_tuple()[1]))'`
|
||||
|
||||
@@ -82,7 +82,7 @@ You can also include it in a `requirements.yml` file and install it via `ansible
|
||||
---
|
||||
collections:
|
||||
- name: kubernetes.core
|
||||
version: 2.0.0
|
||||
version: 2.1.1
|
||||
```
|
||||
|
||||
### Installing the Kubernetes Python Library
|
||||
@@ -159,11 +159,6 @@ If upgrading older playbooks which were built prior to Ansible 2.10 and this col
|
||||
|
||||
For documentation on how to use individual modules and other content included in this collection, please see the links in the 'Included content' section earlier in this README.
|
||||
|
||||
## Ansible Turbo mode
|
||||
|
||||
The ``kubernetes.core`` collection supports Ansible Turbo mode via ``cloud.common`` collection. Please read more about Ansible Turbo mode - [here](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/ansible_turbo_mode.rst).
|
||||
|
||||
|
||||
## Testing and Development
|
||||
|
||||
If you want to develop new content for this collection or improve what's already here, the easiest way to work on the collection is to clone it into one of the configured [`COLLECTIONS_PATHS`](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#collections-paths), and work on it there.
|
||||
|
||||
@@ -395,3 +395,37 @@ releases:
|
||||
name: k8s_json_patch
|
||||
namespace: ''
|
||||
release_date: '2021-06-09'
|
||||
2.0.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- inventory - add community.kubernetes to list of plugin choices in k8s inventory
|
||||
(https://github.com/ansible-collections/kubernetes.core/pull/128).
|
||||
fragments:
|
||||
- 128-update-inventory-plugin-param.yaml
|
||||
release_date: '2021-06-11'
|
||||
2.0.2:
|
||||
changes:
|
||||
bugfixes:
|
||||
- Fix apply for k8s module when an array attribute from definition contains
|
||||
empty dict (https://github.com/ansible-collections/kubernetes.core/issues/113).
|
||||
- rename the apply function to fix broken imports in Ansible 2.9 (https://github.com/ansible-collections/kubernetes.core/pull/135).
|
||||
fragments:
|
||||
- 129-k8s-fix-apply-array-with-empty-dict.yml
|
||||
- 135-rename-apply-function.yml
|
||||
release_date: '2021-06-16'
|
||||
2.1.0:
|
||||
changes:
|
||||
minor_changes:
|
||||
- remove cloud.common as default dependency (https://github.com/ansible-collections/kubernetes.core/pull/148).
|
||||
- temporarily disable turbo mode (https://github.com/ansible-collections/kubernetes.core/pull/149).
|
||||
fragments:
|
||||
- 148-remove-cloud-common-dependency.yaml
|
||||
- 149-disable-turbo-mode.yaml
|
||||
release_date: '2021-06-23'
|
||||
2.1.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- check auth params for existence, not whether they are true (https://github.com/ansible-collections/kubernetes.core/pull/151).
|
||||
fragments:
|
||||
- 151-check-auth-params-for-existence.yaml
|
||||
release_date: '2021-06-24'
|
||||
|
||||
@@ -300,6 +300,7 @@ Parameters
|
||||
<ul style="margin: 0; padding: 0"><b>Choices:</b>
|
||||
<li>kubernetes.core.k8s</li>
|
||||
<li>k8s</li>
|
||||
<li>community.kubernetes.k8s</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -8,8 +8,6 @@ authors:
|
||||
- willthames (https://github.com/willthames)
|
||||
- mmazur (https://github.com/mmazur)
|
||||
- jamescassell (https://github.com/jamescassell)
|
||||
dependencies:
|
||||
cloud.common: '>=2.0.1'
|
||||
description: Kubernetes Collection for Ansible.
|
||||
documentation: ''
|
||||
homepage: ''
|
||||
@@ -27,7 +25,7 @@ tags:
|
||||
- openshift
|
||||
- okd
|
||||
- cluster
|
||||
version: 2.0.0
|
||||
version: 2.1.1
|
||||
build_ignore:
|
||||
- .DS_Store
|
||||
- '*.tar.gz'
|
||||
|
||||
@@ -836,6 +836,66 @@
|
||||
that:
|
||||
- k8s_secret is not changed
|
||||
|
||||
- name: Create network policy (egress array with empty dict)
|
||||
k8s:
|
||||
namespace: "{{ apply_namespace }}"
|
||||
apply: true
|
||||
definition:
|
||||
kind: NetworkPolicy
|
||||
apiVersion: networking.k8s.io/v1
|
||||
metadata:
|
||||
name: apply-netpolicy
|
||||
labels:
|
||||
app: apply-netpolicy
|
||||
annotations:
|
||||
{}
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: apply-netpolicy
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
- ports:
|
||||
- port: 9093
|
||||
protocol: TCP
|
||||
egress:
|
||||
- {}
|
||||
|
||||
- name: Apply network policy
|
||||
k8s:
|
||||
namespace: "{{ apply_namespace }}"
|
||||
definition:
|
||||
kind: NetworkPolicy
|
||||
apiVersion: networking.k8s.io/v1
|
||||
metadata:
|
||||
name: apply-netpolicy
|
||||
labels:
|
||||
app: apply-netpolicy
|
||||
annotations:
|
||||
{}
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: apply-netpolicy
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
- ports:
|
||||
- port: 9093
|
||||
protocol: TCP
|
||||
egress:
|
||||
- {}
|
||||
apply: true
|
||||
register: k8s_networkpolicy
|
||||
|
||||
- name: Check that nothing changed
|
||||
assert:
|
||||
that:
|
||||
- k8s_networkpolicy is not changed
|
||||
|
||||
always:
|
||||
- name: Remove namespace
|
||||
k8s:
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
|
||||
### https://github.com/ansible-collections/community.kubernetes/issues/111
|
||||
- set_fact:
|
||||
api_groups: "{{ lookup('k8s', cluster_info='api_groups') }}"
|
||||
api_groups: "{{ lookup('kubernetes.core.k8s', cluster_info='api_groups') }}"
|
||||
|
||||
- debug:
|
||||
var: api_groups
|
||||
|
||||
@@ -37,14 +37,23 @@
|
||||
k8s:
|
||||
definition: "{{ job_definition }}"
|
||||
|
||||
- name: Test that job's pod is running
|
||||
- name: Wait Job's pod
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: "{{ gc_namespace }}"
|
||||
label_selectors:
|
||||
- "job=gc"
|
||||
register: wait_job
|
||||
until: wait_job.resources
|
||||
retries: 5
|
||||
delay: 10
|
||||
|
||||
- name: Wait job's pod running
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: "{{ gc_namespace }}"
|
||||
name: "{{ wait_job.resources[0].metadata.name }}"
|
||||
wait: yes
|
||||
wait_timeout: 100
|
||||
register: job
|
||||
|
||||
- name: Assert job's pod is running
|
||||
@@ -78,14 +87,23 @@
|
||||
k8s:
|
||||
definition: "{{ job_definition }}"
|
||||
|
||||
- name: Test that job's pod is running
|
||||
- name: Wait Job's pod
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: "{{ gc_namespace }}"
|
||||
label_selectors:
|
||||
- "job=gc"
|
||||
register: wait_job
|
||||
until: wait_job.resources
|
||||
retries: 5
|
||||
delay: 10
|
||||
|
||||
- name: Wait job's pod running
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: "{{ gc_namespace }}"
|
||||
name: "{{ wait_job.resources[0].metadata.name }}"
|
||||
wait: yes
|
||||
wait_timeout: 100
|
||||
register: job
|
||||
|
||||
- name: Assert job's pod is running
|
||||
@@ -120,14 +138,23 @@
|
||||
k8s:
|
||||
definition: "{{ job_definition }}"
|
||||
|
||||
- name: Test that job's pod is running
|
||||
- name: Wait Job's pod
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: "{{ gc_namespace }}"
|
||||
label_selectors:
|
||||
- "job=gc"
|
||||
register: wait_job
|
||||
until: wait_job.resources
|
||||
retries: 5
|
||||
delay: 10
|
||||
|
||||
- name: Wait job's pod running
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: "{{ gc_namespace }}"
|
||||
name: "{{ wait_job.resources[0].metadata.name }}"
|
||||
wait: yes
|
||||
wait_timeout: 100
|
||||
register: job
|
||||
|
||||
- name: Assert job's pod is running
|
||||
|
||||
@@ -236,8 +236,8 @@
|
||||
assert:
|
||||
that:
|
||||
- resource is successful
|
||||
- resource.result.results | selectattr('changed') | length == 1
|
||||
- resource.result.results | selectattr('error', 'defined') | length == 1
|
||||
- resource.result.results | selectattr('changed') | list | length == 1
|
||||
- resource.result.results | selectattr('error', 'defined') | list | length == 1
|
||||
|
||||
- name: Remove Pod (Cleanup)
|
||||
kubernetes.core.k8s:
|
||||
|
||||
1
plugins/action/helm.py
Symbolic link
1
plugins/action/helm.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/helm_info.py
Symbolic link
1
plugins/action/helm_info.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/helm_plugin.py
Symbolic link
1
plugins/action/helm_plugin.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/helm_plugin_info.py
Symbolic link
1
plugins/action/helm_plugin_info.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/helm_repository.py
Symbolic link
1
plugins/action/helm_repository.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s.py
Symbolic link
1
plugins/action/k8s.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s_cluster_info.py
Symbolic link
1
plugins/action/k8s_cluster_info.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s_exec.py
Symbolic link
1
plugins/action/k8s_exec.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s_log.py
Symbolic link
1
plugins/action/k8s_log.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s_rollback.py
Symbolic link
1
plugins/action/k8s_rollback.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s_scale.py
Symbolic link
1
plugins/action/k8s_scale.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/k8s_service.py
Symbolic link
1
plugins/action/k8s_service.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
1
plugins/action/ks8_json_patch.py
Symbolic link
1
plugins/action/ks8_json_patch.py
Symbolic link
@@ -0,0 +1 @@
|
||||
k8s_info.py
|
||||
@@ -23,7 +23,7 @@ DOCUMENTATION = '''
|
||||
plugin:
|
||||
description: token that ensures this is a source file for the 'k8s' plugin.
|
||||
required: True
|
||||
choices: ['kubernetes.core.k8s', 'k8s']
|
||||
choices: ['kubernetes.core.k8s', 'k8s', 'community.kubernetes.k8s']
|
||||
connections:
|
||||
description:
|
||||
- Optional list of cluster connection settings. If no connections are provided, the default
|
||||
|
||||
@@ -3,10 +3,4 @@ from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
|
||||
try:
|
||||
from ansible_collections.cloud.common.plugins.module_utils.turbo.module import (
|
||||
AnsibleTurboModule as AnsibleModule,
|
||||
) # noqa: F401
|
||||
AnsibleModule.collection_name = "kubernetes.core"
|
||||
except ImportError:
|
||||
from ansible.module_utils.basic import AnsibleModule # noqa: F401
|
||||
from ansible.module_utils.basic import AnsibleModule # noqa: F401
|
||||
|
||||
@@ -18,10 +18,8 @@ __metaclass__ = type
|
||||
|
||||
from collections import OrderedDict
|
||||
import json
|
||||
import sys
|
||||
|
||||
from ansible.module_utils.common.dict_transformations import dict_merge
|
||||
from ansible.module_utils.six import PY3
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import ApplyException
|
||||
|
||||
try:
|
||||
@@ -29,8 +27,6 @@ try:
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
if PY3:
|
||||
unicode = str
|
||||
|
||||
LAST_APPLIED_CONFIG_ANNOTATION = 'kubectl.kubernetes.io/last-applied-configuration'
|
||||
|
||||
@@ -79,34 +75,6 @@ STRATEGIC_MERGE_PATCH_KEYS.update(
|
||||
)
|
||||
|
||||
|
||||
if sys.version_info.major >= 3:
|
||||
json_loads_byteified = json.loads
|
||||
else:
|
||||
# https://stackoverflow.com/a/33571117
|
||||
def json_loads_byteified(json_text):
|
||||
return _byteify(
|
||||
json.loads(json_text, object_hook=_byteify),
|
||||
ignore_dicts=True
|
||||
)
|
||||
|
||||
def _byteify(data, ignore_dicts=False):
|
||||
# if this is a unicode string, return its string representation
|
||||
if isinstance(data, unicode): # noqa: F821
|
||||
return data.encode('utf-8')
|
||||
# if this is a list of values, return list of byteified values
|
||||
if isinstance(data, list):
|
||||
return [_byteify(item, ignore_dicts=True) for item in data]
|
||||
# if this is a dictionary, return dictionary of byteified keys and values
|
||||
# but only if we haven't already byteified it
|
||||
if isinstance(data, dict) and not ignore_dicts:
|
||||
return {
|
||||
_byteify(key, ignore_dicts=True): _byteify(value, ignore_dicts=True)
|
||||
for key, value in data.items()
|
||||
}
|
||||
# if it's anything else, return it in its original form
|
||||
return data
|
||||
|
||||
|
||||
def annotate(desired):
|
||||
return dict(
|
||||
metadata=dict(
|
||||
@@ -123,7 +91,7 @@ def apply_patch(actual, desired):
|
||||
if last_applied:
|
||||
# ensure that last_applied doesn't come back as a dict of unicode key/value pairs
|
||||
# json.loads can be used if we stop supporting python 2
|
||||
last_applied = json_loads_byteified(last_applied)
|
||||
last_applied = json.loads(last_applied)
|
||||
patch = merge(dict_merge(last_applied, annotate(last_applied)),
|
||||
dict_merge(desired, annotate(desired)), actual)
|
||||
if patch:
|
||||
@@ -142,7 +110,7 @@ def apply_object(resource, definition):
|
||||
return apply_patch(actual.to_dict(), definition)
|
||||
|
||||
|
||||
def apply(resource, definition):
|
||||
def k8s_apply(resource, definition):
|
||||
existing, desired = apply_object(resource, definition)
|
||||
if not existing:
|
||||
return resource.create(body=desired, namespace=definition['metadata'].get('namespace'))
|
||||
@@ -284,7 +252,7 @@ def get_delta(last_applied, actual, desired, position=None):
|
||||
elif isinstance(desired_value, list):
|
||||
p = list_merge(last_applied.get(k, []), actual_value, desired_value, this_position)
|
||||
if p:
|
||||
patch[k] = [item for item in p if item]
|
||||
patch[k] = [item for item in p if item is not None]
|
||||
elif actual_value != desired_value:
|
||||
patch[k] = desired_value
|
||||
return patch
|
||||
|
||||
@@ -124,7 +124,7 @@ def get_api_client(module=None, **kwargs):
|
||||
|
||||
# If authorization variables aren't defined, look for them in environment variables
|
||||
for true_name, arg_name in AUTH_ARG_MAP.items():
|
||||
if module and module.params.get(arg_name):
|
||||
if module and module.params.get(arg_name) is not None:
|
||||
auth[true_name] = module.params.get(arg_name)
|
||||
elif arg_name in kwargs and kwargs.get(arg_name) is not None:
|
||||
auth[true_name] = kwargs.get(arg_name)
|
||||
|
||||
@@ -19,7 +19,7 @@ __metaclass__ = type
|
||||
|
||||
from kubernetes.dynamic import DynamicClient
|
||||
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.apply import apply
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.apply import k8s_apply
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import ApplyException
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class K8SDynamicClient(DynamicClient):
|
||||
if resource.namespaced:
|
||||
body['metadata']['namespace'] = super().ensure_namespace(resource, namespace, body)
|
||||
try:
|
||||
return apply(resource, body)
|
||||
return k8s_apply(resource, body)
|
||||
except ApplyException as e:
|
||||
raise ValueError("Could not apply strategic merge to %s/%s: %s" %
|
||||
(body['kind'], body['metadata']['name'], e))
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
collections:
|
||||
- cloud.common
|
||||
Reference in New Issue
Block a user