Compare commits
1 Commits
v2.10.0
...
release-2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc1edbe79d |
@@ -1,16 +0,0 @@
|
||||
---
|
||||
parseable: true
|
||||
skip_list:
|
||||
# see https://docs.ansible.com/ansible-lint/rules/default_rules.html for a list of all default rules
|
||||
# The following rules throw errors.
|
||||
# These either still need to be corrected in the repository and the rules re-enabled or they are skipped on purpose.
|
||||
- '204'
|
||||
- '206'
|
||||
- '301'
|
||||
- '305'
|
||||
- '306'
|
||||
- '404'
|
||||
- '502'
|
||||
- '503'
|
||||
- '504'
|
||||
- '701'
|
||||
@@ -1,11 +1,16 @@
|
||||
---
|
||||
name: Bug Report
|
||||
about: Report a bug encountered while operating Kubernetes
|
||||
labels: kind/bug
|
||||
<!-- Thanks for filing an issue! Before hitting the button, please answer these questions.-->
|
||||
|
||||
**Is this a BUG REPORT or FEATURE REQUEST?** (choose one):
|
||||
|
||||
---
|
||||
<!--
|
||||
Please, be ready for followup questions, and please respond in a timely
|
||||
If this is a BUG REPORT, please:
|
||||
- Fill in as much of the template below as you can. If you leave out
|
||||
information, we can't help you as well.
|
||||
|
||||
If this is a FEATURE REQUEST, please:
|
||||
- Describe *in detail* the feature/behavior/change you'd like to see.
|
||||
|
||||
In both cases, be ready for followup questions, and please respond in a timely
|
||||
manner. If we can't reproduce a bug or think a feature already exists, we
|
||||
might close your issue. If we're wrong, PLEASE feel free to reopen it and
|
||||
explain why.
|
||||
11
.github/ISSUE_TEMPLATE/enhancement.md
vendored
@@ -1,11 +0,0 @@
|
||||
---
|
||||
name: Enhancement Request
|
||||
about: Suggest an enhancement to the Kubespray project
|
||||
labels: kind/feature
|
||||
|
||||
---
|
||||
<!-- Please only use this template for submitting enhancement requests -->
|
||||
|
||||
**What would you like to be added**:
|
||||
|
||||
**Why is this needed**:
|
||||
20
.github/ISSUE_TEMPLATE/failing-test.md
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Failing Test
|
||||
about: Report test failures in Kubespray CI jobs
|
||||
labels: kind/failing-test
|
||||
|
||||
---
|
||||
|
||||
<!-- Please only use this template for submitting reports about failing tests in Kubespray CI jobs -->
|
||||
|
||||
**Which jobs are failing**:
|
||||
|
||||
**Which test(s) are failing**:
|
||||
|
||||
**Since when has it been failing**:
|
||||
|
||||
**Testgrid link**:
|
||||
|
||||
**Reason for failure**:
|
||||
|
||||
**Anything else we need to know**:
|
||||
18
.github/ISSUE_TEMPLATE/support.md
vendored
@@ -1,18 +0,0 @@
|
||||
---
|
||||
name: Support Request
|
||||
about: Support request or question relating to Kubespray
|
||||
labels: triage/support
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
STOP -- PLEASE READ!
|
||||
|
||||
GitHub is not the right place for support requests.
|
||||
|
||||
If you're looking for help, check [Stack Overflow](https://stackoverflow.com/questions/tagged/kubespray) and the [troubleshooting guide](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/).
|
||||
|
||||
You can also post your question on the [Kubernetes Slack](http://slack.k8s.io/) or the [Discuss Kubernetes](https://discuss.kubernetes.io/) forum.
|
||||
|
||||
If the matter is security related, please disclose it privately via https://kubernetes.io/security/.
|
||||
-->
|
||||
44
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,44 +0,0 @@
|
||||
<!-- Thanks for sending a pull request! Here are some tips for you:
|
||||
|
||||
1. If this is your first time, please read our contributor guidelines: https://git.k8s.io/community/contributors/guide#your-first-contribution and developer guide https://git.k8s.io/community/contributors/devel/development.md#development-guide
|
||||
2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request. For reference on required PR/issue labels, read here:
|
||||
https://git.k8s.io/community/contributors/devel/release.md#issue-kind-label
|
||||
3. Ensure you have added or ran the appropriate tests for your PR: https://git.k8s.io/community/contributors/devel/testing.md
|
||||
4. If you want *faster* PR reviews, read how: https://git.k8s.io/community/contributors/guide/pull-requests.md#best-practices-for-faster-reviews
|
||||
5. Follow the instructions for writing a release note: https://git.k8s.io/community/contributors/guide/release-notes.md
|
||||
6. If the PR is unfinished, see how to mark it: https://git.k8s.io/community/contributors/guide/pull-requests.md#marking-unfinished-pull-requests
|
||||
-->
|
||||
|
||||
**What type of PR is this?**
|
||||
> Uncomment only one ` /kind <>` line, hit enter to put that in a new line, and remove leading whitespaces from that line:
|
||||
>
|
||||
> /kind api-change
|
||||
> /kind bug
|
||||
> /kind cleanup
|
||||
> /kind design
|
||||
> /kind documentation
|
||||
> /kind failing-test
|
||||
> /kind feature
|
||||
> /kind flake
|
||||
|
||||
**What this PR does / why we need it**:
|
||||
|
||||
**Which issue(s) this PR fixes**:
|
||||
<!--
|
||||
*Automatically closes linked issue when PR is merged.
|
||||
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
|
||||
_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
|
||||
-->
|
||||
Fixes #
|
||||
|
||||
**Special notes for your reviewer**:
|
||||
|
||||
**Does this PR introduce a user-facing change?**:
|
||||
<!--
|
||||
If no, just write "NONE" in the release-note block below.
|
||||
If yes, a release note is required:
|
||||
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
|
||||
-->
|
||||
```release-note
|
||||
|
||||
```
|
||||
785
.gitlab-ci.yml
@@ -4,7 +4,6 @@ stages:
|
||||
- moderator
|
||||
- deploy-part1
|
||||
- deploy-part2
|
||||
- deploy-gce
|
||||
- deploy-special
|
||||
|
||||
variables:
|
||||
@@ -28,43 +27,785 @@ variables:
|
||||
UPGRADE_TEST: "false"
|
||||
LOG_LEVEL: "-vv"
|
||||
|
||||
# asia-east1-a
|
||||
# asia-northeast1-a
|
||||
# europe-west1-b
|
||||
# us-central1-a
|
||||
# us-east1-b
|
||||
# us-west1-a
|
||||
|
||||
before_script:
|
||||
- ./tests/scripts/rebase.sh
|
||||
- /usr/bin/python -m pip install -r tests/requirements.txt
|
||||
- mkdir -p /.ssh
|
||||
|
||||
.job: &job
|
||||
tags:
|
||||
- packet
|
||||
variables:
|
||||
KUBESPRAY_VERSION: v2.9.0
|
||||
image: quay.io/kubespray/kubespray:$KUBESPRAY_VERSION
|
||||
- kubernetes
|
||||
- docker
|
||||
image: quay.io/kubespray/kubespray:v2.8
|
||||
|
||||
.docker_service: &docker_service
|
||||
services:
|
||||
- docker:dind
|
||||
|
||||
.create_cluster: &create_cluster
|
||||
<<: *job
|
||||
<<: *docker_service
|
||||
|
||||
.gce_variables: &gce_variables
|
||||
GCE_USER: travis
|
||||
SSH_USER: $GCE_USER
|
||||
CLOUD_MACHINE_TYPE: "g1-small"
|
||||
CI_PLATFORM: "gce"
|
||||
PRIVATE_KEY: $GCE_PRIVATE_KEY
|
||||
|
||||
.do_variables: &do_variables
|
||||
PRIVATE_KEY: $DO_PRIVATE_KEY
|
||||
CI_PLATFORM: "do"
|
||||
SSH_USER: root
|
||||
|
||||
|
||||
.testcases: &testcases
|
||||
<<: *job
|
||||
services:
|
||||
- docker:dind
|
||||
<<: *docker_service
|
||||
cache:
|
||||
key: "$CI_BUILD_REF_NAME"
|
||||
paths:
|
||||
- downloads/
|
||||
- $HOME/.cache
|
||||
before_script:
|
||||
- ./tests/scripts/rebase.sh
|
||||
- ./tests/scripts/testcases_prepare.sh
|
||||
- docker info
|
||||
- /usr/bin/python -m pip install -r requirements.txt
|
||||
- /usr/bin/python -m pip install -r tests/requirements.txt
|
||||
- mkdir -p /.ssh
|
||||
- mkdir -p $HOME/.ssh
|
||||
- ansible-playbook --version
|
||||
- export PYPATH=$([[ ! "$CI_JOB_NAME" =~ "coreos" ]] && echo /usr/bin/python || echo /opt/bin/python)
|
||||
- echo "CI_JOB_NAME is $CI_JOB_NAME"
|
||||
- echo "PYPATH is $PYPATH"
|
||||
script:
|
||||
- ./tests/scripts/testcases_run.sh
|
||||
after_script:
|
||||
- ./tests/scripts/testcases_cleanup.sh
|
||||
- pwd
|
||||
- ls
|
||||
- echo ${PWD}
|
||||
- echo "${STARTUP_SCRIPT}"
|
||||
- cd tests && make create-${CI_PLATFORM} -s ; cd -
|
||||
|
||||
# Check out latest tag if testing upgrade
|
||||
- test "${UPGRADE_TEST}" != "false" && git fetch --all && git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
|
||||
# Checkout the CI vars file so it is available
|
||||
- test "${UPGRADE_TEST}" != "false" && git checkout "${CI_BUILD_REF}" tests/files/${CI_JOB_NAME}.yml
|
||||
# Workaround https://github.com/kubernetes-sigs/kubespray/issues/2021
|
||||
- 'sh -c "echo ignore_assert_errors: true | tee -a tests/files/${CI_JOB_NAME}.yml"'
|
||||
|
||||
|
||||
# Create cluster
|
||||
- >
|
||||
ansible-playbook
|
||||
-i ${ANSIBLE_INVENTORY}
|
||||
-b --become-user=root
|
||||
--private-key=${HOME}/.ssh/id_rsa
|
||||
-u $SSH_USER
|
||||
${SSH_ARGS}
|
||||
${LOG_LEVEL}
|
||||
-e @${CI_TEST_VARS}
|
||||
-e ansible_ssh_user=${SSH_USER}
|
||||
-e local_release_dir=${PWD}/downloads
|
||||
--limit "all:!fake_hosts"
|
||||
cluster.yml
|
||||
|
||||
# Repeat deployment if testing upgrade
|
||||
- >
|
||||
if [ "${UPGRADE_TEST}" != "false" ]; then
|
||||
test "${UPGRADE_TEST}" == "basic" && PLAYBOOK="cluster.yml";
|
||||
test "${UPGRADE_TEST}" == "graceful" && PLAYBOOK="upgrade-cluster.yml";
|
||||
git checkout "${CI_BUILD_REF}";
|
||||
ansible-playbook
|
||||
-i ${ANSIBLE_INVENTORY}
|
||||
-b --become-user=root
|
||||
--private-key=${HOME}/.ssh/id_rsa
|
||||
-u $SSH_USER
|
||||
${SSH_ARGS}
|
||||
${LOG_LEVEL}
|
||||
-e @${CI_TEST_VARS}
|
||||
-e ansible_ssh_user=${SSH_USER}
|
||||
-e local_release_dir=${PWD}/downloads
|
||||
--limit "all:!fake_hosts"
|
||||
$PLAYBOOK;
|
||||
fi
|
||||
|
||||
# Tests Cases
|
||||
## Test Master API
|
||||
- ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/010_check-apiserver.yml $LOG_LEVEL
|
||||
|
||||
## Ping the between 2 pod
|
||||
- ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/030_check-network.yml $LOG_LEVEL
|
||||
|
||||
## Advanced DNS checks
|
||||
- ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/040_check-network-adv.yml $LOG_LEVEL
|
||||
|
||||
## Idempotency checks 1/5 (repeat deployment)
|
||||
- >
|
||||
if [ "${IDEMPOT_CHECK}" = "true" ]; then
|
||||
ansible-playbook
|
||||
-i ${ANSIBLE_INVENTORY}
|
||||
-b --become-user=root
|
||||
--private-key=${HOME}/.ssh/id_rsa
|
||||
-u $SSH_USER
|
||||
${SSH_ARGS}
|
||||
${LOG_LEVEL}
|
||||
-e @${CI_TEST_VARS}
|
||||
-e ansible_python_interpreter=${PYPATH}
|
||||
-e local_release_dir=${PWD}/downloads
|
||||
--limit "all:!fake_hosts"
|
||||
cluster.yml;
|
||||
fi
|
||||
|
||||
## Idempotency checks 2/5 (Advanced DNS checks)
|
||||
- >
|
||||
if [ "${IDEMPOT_CHECK}" = "true" ]; then
|
||||
ansible-playbook
|
||||
-i ${ANSIBLE_INVENTORY}
|
||||
-b --become-user=root
|
||||
--private-key=${HOME}/.ssh/id_rsa
|
||||
-u $SSH_USER
|
||||
${SSH_ARGS}
|
||||
${LOG_LEVEL}
|
||||
-e @${CI_TEST_VARS}
|
||||
--limit "all:!fake_hosts"
|
||||
tests/testcases/040_check-network-adv.yml $LOG_LEVEL;
|
||||
fi
|
||||
|
||||
## Idempotency checks 3/5 (reset deployment)
|
||||
- >
|
||||
if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
|
||||
ansible-playbook
|
||||
-i ${ANSIBLE_INVENTORY}
|
||||
-b --become-user=root
|
||||
--private-key=${HOME}/.ssh/id_rsa
|
||||
-u $SSH_USER
|
||||
${SSH_ARGS}
|
||||
${LOG_LEVEL}
|
||||
-e @${CI_TEST_VARS}
|
||||
-e ansible_python_interpreter=${PYPATH}
|
||||
-e reset_confirmation=yes
|
||||
--limit "all:!fake_hosts"
|
||||
reset.yml;
|
||||
fi
|
||||
|
||||
## Idempotency checks 4/5 (redeploy after reset)
|
||||
- >
|
||||
if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
|
||||
ansible-playbook
|
||||
-i ${ANSIBLE_INVENTORY}
|
||||
-b --become-user=root
|
||||
--private-key=${HOME}/.ssh/id_rsa
|
||||
-u $SSH_USER
|
||||
${SSH_ARGS}
|
||||
${LOG_LEVEL}
|
||||
-e @${CI_TEST_VARS}
|
||||
-e ansible_python_interpreter=${PYPATH}
|
||||
-e local_release_dir=${PWD}/downloads
|
||||
--limit "all:!fake_hosts"
|
||||
cluster.yml;
|
||||
fi
|
||||
|
||||
## Idempotency checks 5/5 (Advanced DNS checks)
|
||||
- >
|
||||
if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
|
||||
ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH}
|
||||
-u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root
|
||||
--limit "all:!fake_hosts"
|
||||
tests/testcases/040_check-network-adv.yml $LOG_LEVEL;
|
||||
fi
|
||||
|
||||
after_script:
|
||||
- cd tests && make delete-${CI_PLATFORM} -s ; cd -
|
||||
|
||||
.gce: &gce
|
||||
<<: *testcases
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
|
||||
.do: &do
|
||||
variables:
|
||||
<<: *do_variables
|
||||
<<: *testcases
|
||||
|
||||
# Test matrix. Leave the comments for markup scripts.
|
||||
.coreos_calico_aio_variables: &coreos_calico_aio_variables
|
||||
# stage: deploy-part1
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu18_flannel_aio_variables: &ubuntu18_flannel_aio_variables
|
||||
# stage: deploy-part1
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.centos_weave_kubeadm_variables: ¢os_weave_kubeadm_variables
|
||||
# stage: deploy-part1
|
||||
UPGRADE_TEST: "graceful"
|
||||
|
||||
.ubuntu_canal_kubeadm_variables: &ubuntu_canal_kubeadm_variables
|
||||
# stage: deploy-part1
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_canal_ha_variables: &ubuntu_canal_ha_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_contiv_sep_variables: &ubuntu_contiv_sep_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.coreos_cilium_variables: &coreos_cilium_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_cilium_sep_variables: &ubuntu_cilium_sep_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.rhel7_weave_variables: &rhel7_weave_variables
|
||||
# stage: deploy-part1
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.centos7_flannel_addons_variables: ¢os7_flannel_addons_variables
|
||||
# stage: deploy-part2
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.debian9_calico_variables: &debian9_calico_variables
|
||||
# stage: deploy-part2
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.coreos_canal_variables: &coreos_canal_variables
|
||||
# stage: deploy-part2
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.rhel7_canal_sep_variables: &rhel7_canal_sep_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_weave_sep_variables: &ubuntu_weave_sep_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.centos7_calico_ha_variables: ¢os7_calico_ha_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.centos7_kube_router_variables: ¢os7_kube_router_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.centos7_multus_calico_variables: ¢os7_multus_calico_variables
|
||||
# stage: deploy-part2
|
||||
UPGRADE_TEST: "graceful"
|
||||
|
||||
.coreos_alpha_weave_ha_variables: &coreos_alpha_weave_ha_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.coreos_kube_router_variables: &coreos_kube_router_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_rkt_sep_variables: &ubuntu_rkt_sep_variables
|
||||
# stage: deploy-part1
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_flannel_variables: &ubuntu_flannel_variables
|
||||
# stage: deploy-part2
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.ubuntu_kube_router_variables: &ubuntu_kube_router_variables
|
||||
# stage: deploy-special
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
.opensuse_canal_variables: &opensuse_canal_variables
|
||||
# stage: deploy-part2
|
||||
MOVED_TO_GROUP_VARS: "true"
|
||||
|
||||
|
||||
# Builds for PRs only (premoderated by unit-tests step) and triggers (auto)
|
||||
### PR JOBS PART1
|
||||
|
||||
gce_ubuntu18-flannel-aio:
|
||||
stage: deploy-part1
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *ubuntu18_flannel_aio_variables
|
||||
<<: *gce_variables
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
### PR JOBS PART2
|
||||
|
||||
gce_coreos-calico-aio:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *coreos_calico_aio_variables
|
||||
<<: *gce_variables
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
gce_centos7-flannel-addons:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos7_flannel_addons_variables
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
### MANUAL JOBS
|
||||
|
||||
gce_centos-weave-kubeadm-sep:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos_weave_kubeadm_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-weave-sep:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_weave_sep_variables
|
||||
when: manual
|
||||
only: ['triggers']
|
||||
|
||||
gce_coreos-calico-sep-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *coreos_calico_aio_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-canal-ha-triggers:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_canal_ha_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_centos7-flannel-addons-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos7_flannel_addons_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-weave-sep-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_weave_sep_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
# More builds for PRs/merges (manual) and triggers (auto)
|
||||
do_ubuntu-canal-ha:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *do
|
||||
variables:
|
||||
<<: *do_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-canal-ha:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_canal_ha_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-canal-kubeadm:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_canal_kubeadm_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-canal-kubeadm-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_canal_kubeadm_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-flannel-ha:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_flannel_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
|
||||
gce_centos-weave-kubeadm-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos_weave_kubeadm_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-contiv-sep:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_contiv_sep_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_coreos-cilium:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *coreos_cilium_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-cilium-sep:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_cilium_sep_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_rhel7-weave:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *rhel7_weave_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_rhel7-weave-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *rhel7_weave_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_debian9-calico-upgrade:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *debian9_calico_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_debian9-calico-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *debian9_calico_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_coreos-canal:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *coreos_canal_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_coreos-canal-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *coreos_canal_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_rhel7-canal-sep:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *rhel7_canal_sep_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_rhel7-canal-sep-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *rhel7_canal_sep_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_centos7-calico-ha:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos7_calico_ha_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_centos7-calico-ha-triggers:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos7_calico_ha_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_centos7-kube-router:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos7_kube_router_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_centos7-multus-calico:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *centos7_multus_calico_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_opensuse-canal:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *opensuse_canal_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
# no triggers yet https://github.com/kubernetes-incubator/kargo/issues/613
|
||||
gce_coreos-alpha-weave-ha:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *coreos_alpha_weave_ha_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_coreos-kube-router:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *coreos_kube_router_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-rkt-sep:
|
||||
stage: deploy-part2
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_rkt_sep_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-kube-router-sep:
|
||||
stage: deploy-special
|
||||
<<: *job
|
||||
<<: *gce
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
<<: *ubuntu_kube_router_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
# For failfast, at least 1 job must be defined in .gitlab-ci.yml
|
||||
# Premoderated with manual actions
|
||||
ci-authorized:
|
||||
extends: .job
|
||||
<<: *job
|
||||
stage: moderator
|
||||
before_script:
|
||||
- apt-get -y install jq
|
||||
script:
|
||||
- /bin/sh scripts/premoderator.sh
|
||||
except: ['triggers', 'master']
|
||||
|
||||
include:
|
||||
- .gitlab-ci/lint.yml
|
||||
- .gitlab-ci/shellcheck.yml
|
||||
- .gitlab-ci/gce.yml
|
||||
- .gitlab-ci/digital-ocean.yml
|
||||
- .gitlab-ci/terraform.yml
|
||||
- .gitlab-ci/packet.yml
|
||||
syntax-check:
|
||||
<<: *job
|
||||
stage: unit-tests
|
||||
script:
|
||||
- ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root cluster.yml -vvv --syntax-check
|
||||
- ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root upgrade-cluster.yml -vvv --syntax-check
|
||||
- ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root reset.yml -vvv --syntax-check
|
||||
- ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root extra_playbooks/upgrade-only-k8s.yml -vvv --syntax-check
|
||||
except: ['triggers', 'master']
|
||||
|
||||
yamllint:
|
||||
<<: *job
|
||||
stage: unit-tests
|
||||
script:
|
||||
- yamllint .
|
||||
except: ['triggers', 'master']
|
||||
|
||||
tox-inventory-builder:
|
||||
stage: unit-tests
|
||||
<<: *job
|
||||
script:
|
||||
- pip install tox
|
||||
- cd contrib/inventory_builder && tox
|
||||
when: manual
|
||||
except: ['triggers', 'master']
|
||||
|
||||
|
||||
# Tests for contrib/terraform/
|
||||
.terraform_install: &terraform_install
|
||||
<<: *job
|
||||
before_script:
|
||||
# Set Ansible config
|
||||
- cp ansible.cfg ~/.ansible.cfg
|
||||
# Install Terraform
|
||||
- apt-get install -y unzip
|
||||
- curl https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip > /tmp/terraform.zip
|
||||
- unzip /tmp/terraform.zip && mv ./terraform /usr/local/bin/ && terraform --version
|
||||
# Prepare inventory
|
||||
- cp -LRp contrib/terraform/$PROVIDER/sample-inventory inventory/$CLUSTER
|
||||
- cd inventory/$CLUSTER
|
||||
- ln -s ../../contrib/terraform/$PROVIDER/hosts
|
||||
- terraform init ../../contrib/terraform/$PROVIDER
|
||||
# Copy SSH keypair
|
||||
- mkdir -p ~/.ssh
|
||||
- echo "$PACKET_PRIVATE_KEY" | base64 -d > ~/.ssh/id_rsa
|
||||
- chmod 400 ~/.ssh/id_rsa
|
||||
- echo "$PACKET_PUBLIC_KEY" | base64 -d > ~/.ssh/id_rsa.pub
|
||||
- export TF_VAR_public_key_path=""
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
.terraform_validate: &terraform_validate
|
||||
<<: *terraform_install
|
||||
stage: unit-tests
|
||||
script:
|
||||
- terraform validate -var-file=cluster.tf ../../contrib/terraform/$PROVIDER
|
||||
- terraform fmt -check -diff ../../contrib/terraform/$PROVIDER
|
||||
|
||||
.terraform_apply: &terraform_apply
|
||||
<<: *terraform_install
|
||||
stage: deploy-part2
|
||||
when: manual
|
||||
script:
|
||||
- terraform apply -auto-approve ../../contrib/terraform/$PROVIDER
|
||||
- ansible-playbook -i hosts ../../cluster.yml
|
||||
after_script:
|
||||
# Cleanup regardless of exit code
|
||||
- cd inventory/$CLUSTER
|
||||
- terraform destroy -auto-approve ../../contrib/terraform/$PROVIDER
|
||||
|
||||
tf-validate-openstack:
|
||||
<<: *terraform_validate
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: openstack
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
|
||||
tf-validate-packet:
|
||||
<<: *terraform_validate
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: packet
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
|
||||
tf-apply-packet:
|
||||
<<: *terraform_apply
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: packet
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
TF_VAR_cluster_name: $CI_COMMIT_REF_NAME
|
||||
TF_VAR_number_of_k8s_masters: "1"
|
||||
TF_VAR_number_of_k8s_nodes: "1"
|
||||
TF_VAR_plan_k8s_masters: t1.small.x86
|
||||
TF_VAR_plan_k8s_nodes: t1.small.x86
|
||||
TF_VAR_facility: "ewr1"
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
.do_variables: &do_variables
|
||||
PRIVATE_KEY: $DO_PRIVATE_KEY
|
||||
CI_PLATFORM: "do"
|
||||
SSH_USER: root
|
||||
|
||||
.do: &do
|
||||
extends: .testcases
|
||||
tags:
|
||||
- do
|
||||
|
||||
do_ubuntu-canal-ha:
|
||||
stage: deploy-part2
|
||||
extends: .do
|
||||
variables:
|
||||
<<: *do_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
@@ -1,264 +0,0 @@
|
||||
---
|
||||
.gce_variables: &gce_variables
|
||||
GCE_USER: travis
|
||||
SSH_USER: $GCE_USER
|
||||
CLOUD_MACHINE_TYPE: "g1-small"
|
||||
CI_PLATFORM: "gce"
|
||||
PRIVATE_KEY: $GCE_PRIVATE_KEY
|
||||
|
||||
.cache: &cache
|
||||
cache:
|
||||
key: "$CI_BUILD_REF_NAME"
|
||||
paths:
|
||||
- downloads/
|
||||
- $HOME/.cache
|
||||
|
||||
.gce: &gce
|
||||
extends: .testcases
|
||||
<<: *cache
|
||||
variables:
|
||||
<<: *gce_variables
|
||||
tags:
|
||||
- gce
|
||||
|
||||
.centos_weave_kubeadm_variables: ¢os_weave_kubeadm_variables
|
||||
# stage: deploy-part1
|
||||
UPGRADE_TEST: "graceful"
|
||||
|
||||
.centos7_multus_calico_variables: ¢os7_multus_calico_variables
|
||||
# stage: deploy-gce
|
||||
UPGRADE_TEST: "graceful"
|
||||
|
||||
# Builds for PRs only (premoderated by unit-tests step) and triggers (auto)
|
||||
### PR JOBS PART1
|
||||
|
||||
gce_ubuntu18-flannel-aio:
|
||||
stage: deploy-part1
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
### PR JOBS PART2
|
||||
|
||||
gce_coreos-calico-aio:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
gce_centos7-flannel-addons:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
### MANUAL JOBS
|
||||
|
||||
gce_centos-weave-kubeadm-sep:
|
||||
stage: deploy-gce
|
||||
extends: .gce
|
||||
variables:
|
||||
<<: *centos_weave_kubeadm_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-weave-sep:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
only: ['triggers']
|
||||
|
||||
gce_coreos-calico-sep-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-canal-ha-triggers:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_centos7-flannel-addons-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-weave-sep-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
# More builds for PRs/merges (manual) and triggers (auto)
|
||||
|
||||
|
||||
gce_ubuntu-canal-ha:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-canal-kubeadm:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-canal-kubeadm-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-flannel-ha:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
|
||||
gce_centos-weave-kubeadm-triggers:
|
||||
stage: deploy-gce
|
||||
extends: .gce
|
||||
variables:
|
||||
<<: *centos_weave_kubeadm_variables
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_ubuntu-contiv-sep:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_coreos-cilium:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu18-cilium-sep:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_rhel7-weave:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_rhel7-weave-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_debian9-calico-upgrade:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_debian9-calico-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_coreos-canal:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_coreos-canal-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_rhel7-canal-sep:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_rhel7-canal-sep-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_centos7-calico-ha:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_centos7-calico-ha-triggers:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
gce_centos7-kube-router:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_centos7-multus-calico:
|
||||
stage: deploy-gce
|
||||
extends: .gce
|
||||
variables:
|
||||
<<: *centos7_multus_calico_variables
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_opensuse-canal:
|
||||
stage: deploy-gce
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
# no triggers yet https://github.com/kubernetes-incubator/kargo/issues/613
|
||||
gce_coreos-alpha-weave-ha:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_coreos-kube-router:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
gce_ubuntu-kube-router-sep:
|
||||
stage: deploy-special
|
||||
<<: *gce
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
@@ -1,40 +0,0 @@
|
||||
---
|
||||
yamllint:
|
||||
extends: .job
|
||||
stage: unit-tests
|
||||
script:
|
||||
- yamllint --strict .
|
||||
except: ['triggers', 'master']
|
||||
|
||||
ansible-lint:
|
||||
extends: .job
|
||||
stage: unit-tests
|
||||
# lint every yml/yaml file that looks like it contains Ansible plays
|
||||
script: |-
|
||||
grep -Rl '^- hosts: \|^ hosts: ' --include \*.yml --include \*.yaml . | xargs -P 4 -n 25 ansible-lint -v
|
||||
except: ['triggers', 'master']
|
||||
|
||||
syntax-check:
|
||||
extends: .job
|
||||
stage: unit-tests
|
||||
variables:
|
||||
ANSIBLE_INVENTORY: inventory/local-tests.cfg
|
||||
ANSIBLE_REMOTE_USER: root
|
||||
ANSIBLE_BECOME: "true"
|
||||
ANSIBLE_BECOME_USER: root
|
||||
ANSIBLE_VERBOSITY: "3"
|
||||
script:
|
||||
- ansible-playbook --syntax-check cluster.yml
|
||||
- ansible-playbook --syntax-check upgrade-cluster.yml
|
||||
- ansible-playbook --syntax-check reset.yml
|
||||
- ansible-playbook --syntax-check extra_playbooks/upgrade-only-k8s.yml
|
||||
except: ['triggers', 'master']
|
||||
|
||||
tox-inventory-builder:
|
||||
stage: unit-tests
|
||||
extends: .job
|
||||
script:
|
||||
- pip install tox
|
||||
- cd contrib/inventory_builder && tox
|
||||
when: manual
|
||||
except: ['triggers', 'master']
|
||||
@@ -1,123 +0,0 @@
|
||||
---
|
||||
.packet_variables: &packet_variables
|
||||
CI_PLATFORM: "packet"
|
||||
SSH_USER: "kubespray"
|
||||
|
||||
.packet: &packet
|
||||
extends: .testcases
|
||||
variables:
|
||||
<<: *packet_variables
|
||||
tags:
|
||||
- packet
|
||||
|
||||
.test-upgrade: &test-upgrade
|
||||
variables:
|
||||
UPGRADE_TEST: "graceful"
|
||||
|
||||
packet_ubuntu18-calico-aio:
|
||||
stage: deploy-part1
|
||||
<<: *packet
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
# ### PR JOBS PART2
|
||||
|
||||
packet_centos7-flannel-addons:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: [/^pr-.*$/]
|
||||
|
||||
# ### MANUAL JOBS
|
||||
|
||||
packet_centos-weave-kubeadm-sep:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: on_success
|
||||
only: ['triggers']
|
||||
|
||||
packet_ubuntu-weave-sep:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: manual
|
||||
only: ['triggers']
|
||||
|
||||
# # More builds for PRs/merges (manual) and triggers (auto)
|
||||
|
||||
packet_ubuntu-canal-ha:
|
||||
stage: deploy-special
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_ubuntu-canal-kubeadm:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_ubuntu-flannel-ha:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
|
||||
packet_ubuntu-contiv-sep:
|
||||
stage: deploy-special
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_ubuntu18-cilium-sep:
|
||||
stage: deploy-special
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_debian9-calico-upgrade:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_centos7-calico-ha:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: on_success
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_centos7-kube-router:
|
||||
stage: deploy-special
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_centos7-multus-calico:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_opensuse-canal:
|
||||
stage: deploy-part2
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
packet_ubuntu-kube-router-sep:
|
||||
stage: deploy-special
|
||||
<<: *packet
|
||||
when: manual
|
||||
except: ['triggers']
|
||||
only: ['master', /^pr-.*$/]
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
shellcheck:
|
||||
extends: .job
|
||||
stage: unit-tests
|
||||
variables:
|
||||
SHELLCHECK_VERSION: v0.6.0
|
||||
before_script:
|
||||
- ./tests/scripts/rebase.sh
|
||||
- curl --silent "https://storage.googleapis.com/shellcheck/shellcheck-"${SHELLCHECK_VERSION}".linux.x86_64.tar.xz" | tar -xJv
|
||||
- cp shellcheck-"${SHELLCHECK_VERSION}"/shellcheck /usr/bin/
|
||||
- shellcheck --version
|
||||
script:
|
||||
# Run shellcheck for all *.sh except contrib/
|
||||
- find . -name '*.sh' -not -path './contrib/*' | xargs shellcheck --severity error
|
||||
except: ['triggers', 'master']
|
||||
@@ -1,133 +0,0 @@
|
||||
---
|
||||
# Tests for contrib/terraform/
|
||||
.terraform_install:
|
||||
extends: .job
|
||||
before_script:
|
||||
- ./tests/scripts/rebase.sh
|
||||
# Set Ansible config
|
||||
- cp ansible.cfg ~/.ansible.cfg
|
||||
# Install Terraform
|
||||
- apt-get install -y unzip
|
||||
- curl https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip > /tmp/terraform.zip
|
||||
- unzip /tmp/terraform.zip && mv ./terraform /usr/local/bin/ && terraform --version
|
||||
# Prepare inventory
|
||||
- cp -LRp contrib/terraform/$PROVIDER/sample-inventory inventory/$CLUSTER
|
||||
- cd inventory/$CLUSTER
|
||||
- ln -s ../../contrib/terraform/$PROVIDER/hosts
|
||||
- terraform init ../../contrib/terraform/$PROVIDER
|
||||
# Copy SSH keypair
|
||||
- mkdir -p ~/.ssh
|
||||
- echo "$PACKET_PRIVATE_KEY" | base64 -d > ~/.ssh/id_rsa
|
||||
- chmod 400 ~/.ssh/id_rsa
|
||||
- echo "$PACKET_PUBLIC_KEY" | base64 -d > ~/.ssh/id_rsa.pub
|
||||
only: ['master', /^pr-.*$/]
|
||||
|
||||
.terraform_validate:
|
||||
extends: .terraform_install
|
||||
stage: unit-tests
|
||||
script:
|
||||
- terraform validate -var-file=cluster.tf ../../contrib/terraform/$PROVIDER
|
||||
- terraform fmt -check -diff ../../contrib/terraform/$PROVIDER
|
||||
|
||||
.terraform_apply:
|
||||
extends: .terraform_install
|
||||
stage: deploy-part2
|
||||
when: manual
|
||||
variables:
|
||||
ANSIBLE_INVENTORY_UNPARSED_FAILED: "true"
|
||||
script:
|
||||
- terraform apply -auto-approve ../../contrib/terraform/$PROVIDER
|
||||
- ansible-playbook -i hosts ../../cluster.yml --become
|
||||
after_script:
|
||||
# Cleanup regardless of exit code
|
||||
- cd inventory/$CLUSTER
|
||||
- terraform destroy -auto-approve ../../contrib/terraform/$PROVIDER
|
||||
|
||||
tf-validate-openstack:
|
||||
extends: .terraform_validate
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: openstack
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
|
||||
tf-validate-packet:
|
||||
extends: .terraform_validate
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: packet
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
|
||||
tf-validate-aws:
|
||||
extends: .terraform_validate
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: aws
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
|
||||
tf-packet-ubuntu16-default:
|
||||
extends: .terraform_apply
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: packet
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
TF_VAR_cluster_name: $CI_COMMIT_REF_SLUG
|
||||
TF_VAR_number_of_k8s_masters: "1"
|
||||
TF_VAR_number_of_k8s_nodes: "1"
|
||||
TF_VAR_plan_k8s_masters: t1.small.x86
|
||||
TF_VAR_plan_k8s_nodes: t1.small.x86
|
||||
TF_VAR_facility: ewr1
|
||||
TF_VAR_public_key_path: ""
|
||||
TF_VAR_operating_system: ubuntu_16_04
|
||||
|
||||
tf-packet-ubuntu18-default:
|
||||
extends: .terraform_apply
|
||||
variables:
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: packet
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
TF_VAR_cluster_name: $CI_COMMIT_REF_SLUG
|
||||
TF_VAR_number_of_k8s_masters: "1"
|
||||
TF_VAR_number_of_k8s_nodes: "1"
|
||||
TF_VAR_plan_k8s_masters: t1.small.x86
|
||||
TF_VAR_plan_k8s_nodes: t1.small.x86
|
||||
TF_VAR_facility: ams1
|
||||
TF_VAR_public_key_path: ""
|
||||
TF_VAR_operating_system: ubuntu_18_04
|
||||
|
||||
.ovh_variables: &ovh_variables
|
||||
OS_AUTH_URL: https://auth.cloud.ovh.net/v3
|
||||
OS_PROJECT_ID: 8d3cd5d737d74227ace462dee0b903fe
|
||||
OS_PROJECT_NAME: "9361447987648822"
|
||||
OS_USER_DOMAIN_NAME: Default
|
||||
OS_PROJECT_DOMAIN_ID: default
|
||||
OS_USERNAME: 8XuhBMfkKVrk
|
||||
OS_REGION_NAME: UK1
|
||||
OS_INTERFACE: public
|
||||
OS_IDENTITY_API_VERSION: "3"
|
||||
|
||||
tf-apply-ovh:
|
||||
extends: .terraform_apply
|
||||
variables:
|
||||
<<: *ovh_variables
|
||||
TF_VERSION: 0.11.11
|
||||
PROVIDER: openstack
|
||||
CLUSTER: $CI_COMMIT_REF_NAME
|
||||
ANSIBLE_TIMEOUT: "60"
|
||||
TF_VAR_cluster_name: $CI_COMMIT_REF_SLUG
|
||||
TF_VAR_number_of_k8s_masters: "0"
|
||||
TF_VAR_number_of_k8s_masters_no_floating_ip: "1"
|
||||
TF_VAR_number_of_k8s_masters_no_floating_ip_no_etcd: "0"
|
||||
TF_VAR_number_of_etcd: "0"
|
||||
TF_VAR_number_of_k8s_nodes: "0"
|
||||
TF_VAR_number_of_k8s_nodes_no_floating_ip: "1"
|
||||
TF_VAR_number_of_gfs_nodes_no_floating_ip: "0"
|
||||
TF_VAR_number_of_bastions: "0"
|
||||
TF_VAR_number_of_k8s_masters_no_etcd: "0"
|
||||
TF_VAR_use_neutron: "0"
|
||||
TF_VAR_floatingip_pool: "Ext-Net"
|
||||
TF_VAR_external_net: "6011fbc9-4cbf-46a4-8452-6890a340b60b"
|
||||
TF_VAR_network_name: "Ext-Net"
|
||||
TF_VAR_flavor_k8s_master: "defa64c3-bd46-43b4-858a-d93bbae0a229" # s1-8
|
||||
TF_VAR_flavor_k8s_node: "defa64c3-bd46-43b4-858a-d93bbae0a229" # s1-8
|
||||
TF_VAR_image: "Ubuntu 18.04"
|
||||
TF_VAR_k8s_allowed_remote_ips: '["0.0.0.0/0"]'
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM ubuntu:18.04
|
||||
FROM ubuntu:16.04
|
||||
|
||||
RUN mkdir /kubespray
|
||||
WORKDIR /kubespray
|
||||
@@ -14,5 +14,6 @@ RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - &&
|
||||
&& apt update -y && apt-get install docker-ce -y
|
||||
COPY . .
|
||||
RUN /usr/bin/python -m pip install pip -U && /usr/bin/python -m pip install -r tests/requirements.txt && python -m pip install -r requirements.txt
|
||||
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.13.5/bin/linux/amd64/kubectl \
|
||||
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.11.3/bin/linux/amd64/kubectl \
|
||||
&& chmod a+x kubectl && cp kubectl /usr/local/bin/kubectl
|
||||
|
||||
|
||||
19
README.md
@@ -29,7 +29,7 @@ To deploy the cluster you can use :
|
||||
|
||||
# Update Ansible inventory file with inventory builder
|
||||
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
|
||||
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
|
||||
CONFIG_FILE=inventory/mycluster/hosts.ini python3 contrib/inventory_builder/inventory.py ${IPS[@]}
|
||||
|
||||
# Review and change parameters under ``inventory/mycluster/group_vars``
|
||||
cat inventory/mycluster/group_vars/all/all.yml
|
||||
@@ -39,7 +39,7 @@ To deploy the cluster you can use :
|
||||
# The option `-b` is required, as for example writing SSL keys in /etc/,
|
||||
# installing packages and interacting with various systemd daemons.
|
||||
# Without -b the playbook will fail to run!
|
||||
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml
|
||||
ansible-playbook -i inventory/mycluster/hosts.ini --become --become-user=root cluster.yml
|
||||
|
||||
Note: When Ansible is already installed via system packages on the control machine, other python packages installed via `sudo pip install -r requirements.txt` will go to a different directory tree (e.g. `/usr/local/lib/python2.7/dist-packages` on Ubuntu) from Ansible's (e.g. `/usr/lib/python2.7/dist-packages/ansible` still on Ubuntu).
|
||||
As a consequence, `ansible-playbook` command will fail with:
|
||||
@@ -108,9 +108,10 @@ Supported Components
|
||||
--------------------
|
||||
|
||||
- Core
|
||||
- [kubernetes](https://github.com/kubernetes/kubernetes) v1.14.1
|
||||
- [kubernetes](https://github.com/kubernetes/kubernetes) v1.13.5
|
||||
- [etcd](https://github.com/coreos/etcd) v3.2.26
|
||||
- [docker](https://www.docker.com/) v18.06 (see note)
|
||||
- [rkt](https://github.com/rkt/rkt) v1.21.0 (see Note 2)
|
||||
- [cri-o](http://cri-o.io/) v1.11.5 (experimental: see [CRI-O Note](docs/cri-o.md). Only on centos based OS)
|
||||
- Network Plugin
|
||||
- [calico](https://github.com/projectcalico/calico) v3.4.0
|
||||
@@ -123,17 +124,21 @@ Supported Components
|
||||
- [weave](https://github.com/weaveworks/weave) v2.5.1
|
||||
- Application
|
||||
- [cephfs-provisioner](https://github.com/kubernetes-incubator/external-storage) v2.1.0-k8s1.11
|
||||
- [rbd-provisioner](https://github.com/kubernetes-incubator/external-storage) v2.1.1-k8s1.11
|
||||
- [cert-manager](https://github.com/jetstack/cert-manager) v0.5.2
|
||||
- [coredns](https://github.com/coredns/coredns) v1.5.0
|
||||
- [coredns](https://github.com/coredns/coredns) v1.4.0
|
||||
- [ingress-nginx](https://github.com/kubernetes/ingress-nginx) v0.21.0
|
||||
|
||||
Note: The list of validated [docker versions](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md) was updated to 1.11.1, 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06. kubeadm now properly recognizes Docker 18.09.0 and newer, but still treats 18.06 as the default supported version. The kubelet might break on docker's non-standard version numbering (it no longer uses semantic versioning). To ensure auto-updates don't break your cluster look into e.g. yum versionlock plugin or apt pin).
|
||||
|
||||
Note 2: rkt support as docker alternative is limited to control plane (etcd and
|
||||
kubelet). Docker is still used for Kubernetes cluster workloads and network
|
||||
plugins' related OS services. Also note, only one of the supported network
|
||||
plugins can be deployed for a given single cluster.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
- **Ansible v2.7.8 (or newer) and python-netaddr is installed on the machine
|
||||
- **Ansible v2.7.6 (or newer) and python-netaddr is installed on the machine
|
||||
that will run Ansible commands**
|
||||
- **Jinja 2.9 (or newer) is required to run the Ansible Playbooks**
|
||||
- The target servers must have **access to the Internet** in order to pull docker images. Otherwise, additional configuration is required (See [Offline Environment](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/downloads.md#offline-environment))
|
||||
@@ -200,7 +205,7 @@ Tools and projects on top of Kubespray
|
||||
CI Tests
|
||||
--------
|
||||
|
||||
[](https://gitlab.com/kargo-ci/kubernetes-sigs-kubespray/pipelines)
|
||||
[](https://gitlab.com/kubespray-ci/kubernetes-incubator__kubespray/pipelines)
|
||||
|
||||
CI/end-to-end tests sponsored by Google (GCE)
|
||||
See the [test matrix](docs/test_cases.md) for details.
|
||||
|
||||
3
Vagrantfile
vendored
@@ -184,8 +184,7 @@ Vagrant.configure("2") do |config|
|
||||
"download_run_once": "False",
|
||||
"download_localhost": "False",
|
||||
"local_path_provisioner_enabled": "#{$local_path_provisioner_enabled}",
|
||||
"local_path_provisioner_claim_root": "#{$local_path_provisioner_claim_root}",
|
||||
"ansible_ssh_user": SUPPORTED_OS[$os][:user]
|
||||
"local_path_provisioner_claim_root": "#{$local_path_provisioner_claim_root}"
|
||||
}
|
||||
|
||||
# Only execute the Ansible provisioner once, when all the machines are up and ready.
|
||||
|
||||
17
cluster.yml
@@ -3,11 +3,11 @@
|
||||
gather_facts: false
|
||||
become: no
|
||||
tasks:
|
||||
- name: "Check ansible version >=2.7.8"
|
||||
- name: "Check ansible version >=2.7.6"
|
||||
assert:
|
||||
msg: "Ansible must be v2.7.8 or higher"
|
||||
msg: "Ansible must be v2.7.6 or higher"
|
||||
that:
|
||||
- ansible_version.string is version("2.7.8", ">=")
|
||||
- ansible_version.string is version("2.7.6", ">=")
|
||||
tags:
|
||||
- check
|
||||
vars:
|
||||
@@ -22,6 +22,10 @@
|
||||
- hosts: k8s-cluster:etcd:calico-rr
|
||||
any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
|
||||
gather_facts: false
|
||||
vars:
|
||||
# Need to disable pipelining for bootstrap-os as some systems have requiretty in sudoers set, which makes pipelining
|
||||
# fail. bootstrap-os fixes this on these systems, so in later plays it can be enabled.
|
||||
ansible_ssh_pipelining: false
|
||||
roles:
|
||||
- { role: kubespray-defaults}
|
||||
- { role: bootstrap-os, tags: bootstrap-os}
|
||||
@@ -109,10 +113,5 @@
|
||||
roles:
|
||||
- { role: kubespray-defaults}
|
||||
- { role: kubernetes-apps, tags: apps }
|
||||
environment: "{{proxy_env}}"
|
||||
|
||||
- hosts: k8s-cluster
|
||||
any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
|
||||
roles:
|
||||
- { role: kubespray-defaults}
|
||||
- { role: kubernetes/preinstall, when: "dns_mode != 'none' and resolvconf_mode == 'host_resolvconf'", tags: resolvconf, dns_late: true }
|
||||
environment: "{{proxy_env}}"
|
||||
|
||||
@@ -79,7 +79,6 @@
|
||||
with_items: "{{ containers.results }}"
|
||||
|
||||
- name: Early hack image install to adapt for DIND
|
||||
# noqa 302 - this task uses the raw module intentionally
|
||||
raw: |
|
||||
rm -fv /usr/bin/udevadm /usr/sbin/udevadm
|
||||
delegate_to: "{{ item._ansible_item_label|default(item.item) }}"
|
||||
|
||||
@@ -93,15 +93,14 @@ class KubesprayInventory(object):
|
||||
self.purge_invalid_hosts(self.hosts.keys(), PROTECTED_NAMES)
|
||||
self.set_all(self.hosts)
|
||||
self.set_k8s_cluster()
|
||||
etcd_hosts_count = 3 if len(self.hosts.keys()) >= 3 else 1
|
||||
self.set_etcd(list(self.hosts.keys())[:etcd_hosts_count])
|
||||
self.set_etcd(list(self.hosts.keys())[:3])
|
||||
if len(self.hosts) >= SCALE_THRESHOLD:
|
||||
self.set_kube_master(list(self.hosts.keys())[etcd_hosts_count:5])
|
||||
self.set_kube_master(list(self.hosts.keys())[3:5])
|
||||
else:
|
||||
self.set_kube_master(list(self.hosts.keys())[:2])
|
||||
self.set_kube_node(self.hosts.keys())
|
||||
if len(self.hosts) >= SCALE_THRESHOLD:
|
||||
self.set_calico_rr(list(self.hosts.keys())[:etcd_hosts_count])
|
||||
self.set_calico_rr(list(self.hosts.keys())[:3])
|
||||
else: # Show help if no options
|
||||
self.show_help()
|
||||
sys.exit(0)
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
---
|
||||
|
||||
- name: Upgrade all packages to the latest version (yum)
|
||||
yum:
|
||||
name: '*'
|
||||
state: latest
|
||||
when: ansible_os_family == "RedHat"
|
||||
|
||||
- name: Install required packages
|
||||
yum:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
state: latest
|
||||
with_items:
|
||||
- bind-utils
|
||||
- ntp
|
||||
@@ -15,13 +21,23 @@
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
state: latest
|
||||
install_recommends: no
|
||||
with_items:
|
||||
- dnsutils
|
||||
- ntp
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: Upgrade all packages to the latest version (apt)
|
||||
shell: apt-get -o \
|
||||
Dpkg::Options::=--force-confdef -o \
|
||||
Dpkg::Options::=--force-confold -q -y \
|
||||
dist-upgrade
|
||||
environment:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
|
||||
# Create deployment user if required
|
||||
- include: user.yml
|
||||
when: k8s_deployment_user is defined
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
},
|
||||
"readinessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 3,
|
||||
"initialDelaySeconds": 60,
|
||||
"exec": {
|
||||
"command": [
|
||||
"/bin/bash",
|
||||
@@ -80,7 +80,7 @@
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 10,
|
||||
"initialDelaySeconds": 60,
|
||||
"exec": {
|
||||
"command": [
|
||||
"/bin/bash",
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 10,
|
||||
"initialDelaySeconds": 30,
|
||||
"httpGet": {
|
||||
"path": "/hello",
|
||||
"port": 8080
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 10,
|
||||
"initialDelaySeconds": 30,
|
||||
"httpGet": {
|
||||
"path": "/hello",
|
||||
"port": 8080
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
#Global Vars
|
||||
aws_cluster_name = "devtest"
|
||||
|
||||
#VPC Vars
|
||||
aws_vpc_cidr_block = "10.250.192.0/18"
|
||||
|
||||
aws_cidr_subnets_private = ["10.250.192.0/20", "10.250.208.0/20"]
|
||||
|
||||
aws_cidr_subnets_public = ["10.250.224.0/20", "10.250.240.0/20"]
|
||||
|
||||
#Bastion Host
|
||||
aws_bastion_size = "t2.medium"
|
||||
|
||||
#Kubernetes Cluster
|
||||
|
||||
aws_kube_master_num = 3
|
||||
|
||||
aws_kube_master_size = "t2.medium"
|
||||
|
||||
aws_etcd_num = 3
|
||||
|
||||
aws_etcd_size = "t2.medium"
|
||||
|
||||
aws_kube_worker_num = 4
|
||||
|
||||
aws_kube_worker_size = "t2.medium"
|
||||
|
||||
#Settings AWS ELB
|
||||
|
||||
aws_elb_api_port = 6443
|
||||
|
||||
k8s_secure_api_port = 6443
|
||||
|
||||
kube_insecure_apiserver_address = "0.0.0.0"
|
||||
|
||||
default_tags = {
|
||||
# Env = "devtest" # Product = "kubernetes"
|
||||
}
|
||||
|
||||
inventory_file = "../../../inventory/hosts"
|
||||
|
||||
## Credentials
|
||||
#AWS Access Key
|
||||
AWS_ACCESS_KEY_ID = ""
|
||||
|
||||
#AWS Secret Key
|
||||
AWS_SECRET_ACCESS_KEY = ""
|
||||
|
||||
#EC2 SSH Key Name
|
||||
AWS_SSH_KEY_NAME = ""
|
||||
|
||||
#AWS Region
|
||||
AWS_DEFAULT_REGION = "eu-central-1"
|
||||
@@ -1 +0,0 @@
|
||||
../../../../inventory/sample/group_vars
|
||||
@@ -243,8 +243,6 @@ For your cluster, edit `inventory/$CLUSTER/cluster.tf`.
|
||||
|`supplementary_master_groups` | To add ansible groups to the masters, such as `kube-node` for tainting them as nodes, empty by default. |
|
||||
|`supplementary_node_groups` | To add ansible groups to the nodes, such as `kube-ingress` for running ingress controller pods, empty by default. |
|
||||
|`bastion_allowed_remote_ips` | List of CIDR allowed to initiate a SSH connection, `["0.0.0.0/0"]` by default |
|
||||
|`master_allowed_remote_ips` | List of CIDR blocks allowed to initiate an API connection, `["0.0.0.0/0"]` by default |
|
||||
|`k8s_allowed_remote_ips` | List of CIDR allowed to initiate a SSH connection, empty by default |
|
||||
|`worker_allowed_ports` | List of ports to open on worker nodes, `[{ "protocol" = "tcp", "port_range_min" = 30000, "port_range_max" = 32767, "remote_ip_prefix" = "0.0.0.0/0"}]` by default |
|
||||
|
||||
#### Terraform state files
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
provider "openstack" {
|
||||
version = "~> 1.17"
|
||||
}
|
||||
|
||||
module "network" {
|
||||
source = "modules/network"
|
||||
|
||||
@@ -53,13 +49,9 @@ module "compute" {
|
||||
network_name = "${var.network_name}"
|
||||
flavor_bastion = "${var.flavor_bastion}"
|
||||
k8s_master_fips = "${module.ips.k8s_master_fips}"
|
||||
k8s_master_no_etcd_fips = "${module.ips.k8s_master_no_etcd_fips}"
|
||||
k8s_node_fips = "${module.ips.k8s_node_fips}"
|
||||
bastion_fips = "${module.ips.bastion_fips}"
|
||||
bastion_allowed_remote_ips = "${var.bastion_allowed_remote_ips}"
|
||||
master_allowed_remote_ips = "${var.master_allowed_remote_ips}"
|
||||
k8s_allowed_remote_ips = "${var.k8s_allowed_remote_ips}"
|
||||
k8s_allowed_egress_ips = "${var.k8s_allowed_egress_ips}"
|
||||
supplementary_master_groups = "${var.supplementary_master_groups}"
|
||||
supplementary_node_groups = "${var.supplementary_node_groups}"
|
||||
worker_allowed_ports = "${var.worker_allowed_ports}"
|
||||
@@ -80,7 +72,7 @@ output "router_id" {
|
||||
}
|
||||
|
||||
output "k8s_master_fips" {
|
||||
value = "${concat(module.ips.k8s_master_fips, module.ips.k8s_master_no_etcd_fips)}"
|
||||
value = "${module.ips.k8s_master_fips}"
|
||||
}
|
||||
|
||||
output "k8s_node_fips" {
|
||||
|
||||
@@ -4,27 +4,24 @@ resource "openstack_compute_keypair_v2" "k8s" {
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_v2" "k8s_master" {
|
||||
name = "${var.cluster_name}-k8s-master"
|
||||
description = "${var.cluster_name} - Kubernetes Master"
|
||||
delete_default_rules = true
|
||||
name = "${var.cluster_name}-k8s-master"
|
||||
description = "${var.cluster_name} - Kubernetes Master"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_rule_v2" "k8s_master" {
|
||||
count = "${length(var.master_allowed_remote_ips)}"
|
||||
direction = "ingress"
|
||||
ethertype = "IPv4"
|
||||
protocol = "tcp"
|
||||
port_range_min = "6443"
|
||||
port_range_max = "6443"
|
||||
remote_ip_prefix = "${var.master_allowed_remote_ips[count.index]}"
|
||||
remote_ip_prefix = "0.0.0.0/0"
|
||||
security_group_id = "${openstack_networking_secgroup_v2.k8s_master.id}"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_v2" "bastion" {
|
||||
name = "${var.cluster_name}-bastion"
|
||||
count = "${var.number_of_bastions ? 1 : 0}"
|
||||
description = "${var.cluster_name} - Bastion Server"
|
||||
delete_default_rules = true
|
||||
name = "${var.cluster_name}-bastion"
|
||||
count = "${var.number_of_bastions ? 1 : 0}"
|
||||
description = "${var.cluster_name} - Bastion Server"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_rule_v2" "bastion" {
|
||||
@@ -39,9 +36,8 @@ resource "openstack_networking_secgroup_rule_v2" "bastion" {
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_v2" "k8s" {
|
||||
name = "${var.cluster_name}-k8s"
|
||||
description = "${var.cluster_name} - Kubernetes"
|
||||
delete_default_rules = true
|
||||
name = "${var.cluster_name}-k8s"
|
||||
description = "${var.cluster_name} - Kubernetes"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_rule_v2" "k8s" {
|
||||
@@ -51,29 +47,9 @@ resource "openstack_networking_secgroup_rule_v2" "k8s" {
|
||||
security_group_id = "${openstack_networking_secgroup_v2.k8s.id}"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_rule_v2" "k8s_allowed_remote_ips" {
|
||||
count = "${length(var.k8s_allowed_remote_ips)}"
|
||||
direction = "ingress"
|
||||
ethertype = "IPv4"
|
||||
protocol = "tcp"
|
||||
port_range_min = "22"
|
||||
port_range_max = "22"
|
||||
remote_ip_prefix = "${var.k8s_allowed_remote_ips[count.index]}"
|
||||
security_group_id = "${openstack_networking_secgroup_v2.k8s.id}"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_rule_v2" "egress" {
|
||||
count = "${length(var.k8s_allowed_egress_ips)}"
|
||||
direction = "egress"
|
||||
ethertype = "IPv4"
|
||||
remote_ip_prefix = "${var.k8s_allowed_egress_ips[count.index]}"
|
||||
security_group_id = "${openstack_networking_secgroup_v2.k8s.id}"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_v2" "worker" {
|
||||
name = "${var.cluster_name}-k8s-worker"
|
||||
description = "${var.cluster_name} - Kubernetes worker nodes"
|
||||
delete_default_rules = true
|
||||
name = "${var.cluster_name}-k8s-worker"
|
||||
description = "${var.cluster_name} - Kubernetes worker nodes"
|
||||
}
|
||||
|
||||
resource "openstack_networking_secgroup_rule_v2" "worker" {
|
||||
@@ -100,6 +76,7 @@ resource "openstack_compute_instance_v2" "bastion" {
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s.name}",
|
||||
"${openstack_networking_secgroup_v2.bastion.name}",
|
||||
"default",
|
||||
]
|
||||
|
||||
metadata = {
|
||||
@@ -125,16 +102,20 @@ resource "openstack_compute_instance_v2" "k8s_master" {
|
||||
name = "${var.network_name}"
|
||||
}
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s_master.name}",
|
||||
"${openstack_networking_secgroup_v2.k8s.name}",
|
||||
]
|
||||
# The join() hack is described here: https://github.com/hashicorp/terraform/issues/11566
|
||||
# As a workaround for creating "dynamic" lists (when, for example, no bastion host is created)
|
||||
|
||||
security_groups = ["${compact(list(
|
||||
openstack_networking_secgroup_v2.k8s_master.name,
|
||||
join(" ", openstack_networking_secgroup_v2.bastion.*.id),
|
||||
openstack_networking_secgroup_v2.k8s.name,
|
||||
"default",
|
||||
))}"]
|
||||
metadata = {
|
||||
ssh_user = "${var.ssh_user}"
|
||||
kubespray_groups = "etcd,kube-master,${var.supplementary_master_groups},k8s-cluster,vault"
|
||||
depends_on = "${var.network_id}"
|
||||
}
|
||||
|
||||
provisioner "local-exec" {
|
||||
command = "sed s/USER/${var.ssh_user}/ contrib/terraform/openstack/ansible_bastion_template.txt | sed s/BASTION_ADDRESS/${element( concat(var.bastion_fips, var.k8s_master_fips), 0)}/ > contrib/terraform/group_vars/no-floating.yml"
|
||||
}
|
||||
@@ -152,9 +133,11 @@ resource "openstack_compute_instance_v2" "k8s_master_no_etcd" {
|
||||
name = "${var.network_name}"
|
||||
}
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s_master.name}",
|
||||
"${openstack_networking_secgroup_v2.k8s.name}",
|
||||
]
|
||||
security_groups = ["${compact(list(
|
||||
openstack_networking_secgroup_v2.k8s_master.name,
|
||||
join(" ", openstack_networking_secgroup_v2.bastion.*.id),
|
||||
openstack_networking_secgroup_v2.k8s.name,
|
||||
))}"]
|
||||
|
||||
metadata = {
|
||||
ssh_user = "${var.ssh_user}"
|
||||
@@ -202,6 +185,7 @@ resource "openstack_compute_instance_v2" "k8s_master_no_floating_ip" {
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s_master.name}",
|
||||
"${openstack_networking_secgroup_v2.k8s.name}",
|
||||
"default",
|
||||
]
|
||||
|
||||
metadata = {
|
||||
@@ -246,9 +230,12 @@ resource "openstack_compute_instance_v2" "k8s_node" {
|
||||
name = "${var.network_name}"
|
||||
}
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s.name}",
|
||||
"${openstack_networking_secgroup_v2.worker.name}",
|
||||
]
|
||||
security_groups = ["${compact(list(
|
||||
openstack_networking_secgroup_v2.k8s_master.name,
|
||||
join(" ", openstack_networking_secgroup_v2.bastion.*.id),
|
||||
openstack_networking_secgroup_v2.k8s.name,
|
||||
"default",
|
||||
))}"]
|
||||
|
||||
metadata = {
|
||||
ssh_user = "${var.ssh_user}"
|
||||
@@ -275,6 +262,7 @@ resource "openstack_compute_instance_v2" "k8s_node_no_floating_ip" {
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s.name}",
|
||||
"${openstack_networking_secgroup_v2.worker.name}",
|
||||
"default",
|
||||
]
|
||||
|
||||
metadata = {
|
||||
@@ -296,12 +284,6 @@ resource "openstack_compute_floatingip_associate_v2" "k8s_master" {
|
||||
floating_ip = "${var.k8s_master_fips[count.index]}"
|
||||
}
|
||||
|
||||
resource "openstack_compute_floatingip_associate_v2" "k8s_master_no_etcd" {
|
||||
count = "${var.number_of_k8s_masters_no_etcd}"
|
||||
instance_id = "${element(openstack_compute_instance_v2.k8s_master_no_etcd.*.id, count.index)}"
|
||||
floating_ip = "${var.k8s_master_no_etcd_fips[count.index]}"
|
||||
}
|
||||
|
||||
resource "openstack_compute_floatingip_associate_v2" "k8s_node" {
|
||||
count = "${var.number_of_k8s_nodes}"
|
||||
floating_ip = "${var.k8s_node_fips[count.index]}"
|
||||
@@ -327,7 +309,9 @@ resource "openstack_compute_instance_v2" "glusterfs_node_no_floating_ip" {
|
||||
name = "${var.network_name}"
|
||||
}
|
||||
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s.name}"]
|
||||
security_groups = ["${openstack_networking_secgroup_v2.k8s.name}",
|
||||
"default",
|
||||
]
|
||||
|
||||
metadata = {
|
||||
ssh_user = "${var.ssh_user_gfs}"
|
||||
|
||||
@@ -54,10 +54,6 @@ variable "k8s_master_fips" {
|
||||
type = "list"
|
||||
}
|
||||
|
||||
variable "k8s_master_no_etcd_fips" {
|
||||
type = "list"
|
||||
}
|
||||
|
||||
variable "k8s_node_fips" {
|
||||
type = "list"
|
||||
}
|
||||
@@ -70,18 +66,6 @@ variable "bastion_allowed_remote_ips" {
|
||||
type = "list"
|
||||
}
|
||||
|
||||
variable "master_allowed_remote_ips" {
|
||||
type = "list"
|
||||
}
|
||||
|
||||
variable "k8s_allowed_remote_ips" {
|
||||
type = "list"
|
||||
}
|
||||
|
||||
variable "k8s_allowed_egress_ips" {
|
||||
type = "list"
|
||||
}
|
||||
|
||||
variable "supplementary_master_groups" {
|
||||
default = ""
|
||||
}
|
||||
|
||||
@@ -10,12 +10,6 @@ resource "openstack_networking_floatingip_v2" "k8s_master" {
|
||||
depends_on = ["null_resource.dummy_dependency"]
|
||||
}
|
||||
|
||||
resource "openstack_networking_floatingip_v2" "k8s_master_no_etcd" {
|
||||
count = "${var.number_of_k8s_masters_no_etcd}"
|
||||
pool = "${var.floatingip_pool}"
|
||||
depends_on = ["null_resource.dummy_dependency"]
|
||||
}
|
||||
|
||||
resource "openstack_networking_floatingip_v2" "k8s_node" {
|
||||
count = "${var.number_of_k8s_nodes}"
|
||||
pool = "${var.floatingip_pool}"
|
||||
|
||||
@@ -2,10 +2,6 @@ output "k8s_master_fips" {
|
||||
value = ["${openstack_networking_floatingip_v2.k8s_master.*.address}"]
|
||||
}
|
||||
|
||||
output "k8s_master_no_etcd_fips" {
|
||||
value = ["${openstack_networking_floatingip_v2.k8s_master_no_etcd.*.address}"]
|
||||
}
|
||||
|
||||
output "k8s_node_fips" {
|
||||
value = ["${openstack_networking_floatingip_v2.k8s_node.*.address}"]
|
||||
}
|
||||
|
||||
@@ -145,24 +145,6 @@ variable "bastion_allowed_remote_ips" {
|
||||
default = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
variable "master_allowed_remote_ips" {
|
||||
description = "An array of CIDRs allowed to access API of masters"
|
||||
type = "list"
|
||||
default = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
variable "k8s_allowed_remote_ips" {
|
||||
description = "An array of CIDRs allowed to SSH to hosts"
|
||||
type = "list"
|
||||
default = []
|
||||
}
|
||||
|
||||
variable "k8s_allowed_egress_ips" {
|
||||
description = "An array of CIDRs allowed for egress traffic"
|
||||
type = "list"
|
||||
default = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
variable "worker_allowed_ports" {
|
||||
type = "list"
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
# Configure the Packet Provider
|
||||
provider "packet" {
|
||||
version = "~> 2.0"
|
||||
}
|
||||
provider "packet" {}
|
||||
|
||||
resource "packet_ssh_key" "k8s" {
|
||||
count = "${var.public_key_path != "" ? 1 : 0}"
|
||||
@@ -15,7 +13,7 @@ resource "packet_device" "k8s_master" {
|
||||
count = "${var.number_of_k8s_masters}"
|
||||
hostname = "${var.cluster_name}-k8s-master-${count.index+1}"
|
||||
plan = "${var.plan_k8s_masters}"
|
||||
facilities = ["${var.facility}"]
|
||||
facility = "${var.facility}"
|
||||
operating_system = "${var.operating_system}"
|
||||
billing_cycle = "${var.billing_cycle}"
|
||||
project_id = "${var.packet_project_id}"
|
||||
@@ -28,7 +26,7 @@ resource "packet_device" "k8s_master_no_etcd" {
|
||||
count = "${var.number_of_k8s_masters_no_etcd}"
|
||||
hostname = "${var.cluster_name}-k8s-master-${count.index+1}"
|
||||
plan = "${var.plan_k8s_masters_no_etcd}"
|
||||
facilities = ["${var.facility}"]
|
||||
facility = "${var.facility}"
|
||||
operating_system = "${var.operating_system}"
|
||||
billing_cycle = "${var.billing_cycle}"
|
||||
project_id = "${var.packet_project_id}"
|
||||
@@ -41,7 +39,7 @@ resource "packet_device" "k8s_etcd" {
|
||||
count = "${var.number_of_etcd}"
|
||||
hostname = "${var.cluster_name}-etcd-${count.index+1}"
|
||||
plan = "${var.plan_etcd}"
|
||||
facilities = ["${var.facility}"]
|
||||
facility = "${var.facility}"
|
||||
operating_system = "${var.operating_system}"
|
||||
billing_cycle = "${var.billing_cycle}"
|
||||
project_id = "${var.packet_project_id}"
|
||||
@@ -54,7 +52,7 @@ resource "packet_device" "k8s_node" {
|
||||
count = "${var.number_of_k8s_nodes}"
|
||||
hostname = "${var.cluster_name}-k8s-node-${count.index+1}"
|
||||
plan = "${var.plan_k8s_nodes}"
|
||||
facilities = ["${var.facility}"]
|
||||
facility = "${var.facility}"
|
||||
operating_system = "${var.operating_system}"
|
||||
billing_cycle = "${var.billing_cycle}"
|
||||
project_id = "${var.packet_project_id}"
|
||||
|
||||
@@ -149,6 +149,75 @@ def parse_bool(string_form):
|
||||
raise ValueError('could not convert %r to a bool' % string_form)
|
||||
|
||||
|
||||
@parses('triton_machine')
|
||||
@calculate_mantl_vars
|
||||
def triton_machine(resource, module_name):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
name = raw_attrs.get('name')
|
||||
groups = []
|
||||
|
||||
attrs = {
|
||||
'id': raw_attrs['id'],
|
||||
'dataset': raw_attrs['dataset'],
|
||||
'disk': raw_attrs['disk'],
|
||||
'firewall_enabled': parse_bool(raw_attrs['firewall_enabled']),
|
||||
'image': raw_attrs['image'],
|
||||
'ips': parse_list(raw_attrs, 'ips'),
|
||||
'memory': raw_attrs['memory'],
|
||||
'name': raw_attrs['name'],
|
||||
'networks': parse_list(raw_attrs, 'networks'),
|
||||
'package': raw_attrs['package'],
|
||||
'primary_ip': raw_attrs['primaryip'],
|
||||
'root_authorized_keys': raw_attrs['root_authorized_keys'],
|
||||
'state': raw_attrs['state'],
|
||||
'tags': parse_dict(raw_attrs, 'tags'),
|
||||
'type': raw_attrs['type'],
|
||||
'user_data': raw_attrs['user_data'],
|
||||
'user_script': raw_attrs['user_script'],
|
||||
|
||||
# ansible
|
||||
'ansible_ssh_host': raw_attrs['primaryip'],
|
||||
'ansible_ssh_port': 22,
|
||||
'ansible_ssh_user': 'root', # it's "root" on Triton by default
|
||||
|
||||
# generic
|
||||
'public_ipv4': raw_attrs['primaryip'],
|
||||
'provider': 'triton',
|
||||
}
|
||||
|
||||
# private IPv4
|
||||
for ip in attrs['ips']:
|
||||
if ip.startswith('10') or ip.startswith('192.168'): # private IPs
|
||||
attrs['private_ipv4'] = ip
|
||||
break
|
||||
|
||||
if 'private_ipv4' not in attrs:
|
||||
attrs['private_ipv4'] = attrs['public_ipv4']
|
||||
|
||||
# attrs specific to Mantl
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['tags'].get('dc', 'none')),
|
||||
'role': attrs['tags'].get('role', 'none'),
|
||||
'ansible_python_interpreter': attrs['tags'].get('python_bin', 'python')
|
||||
})
|
||||
|
||||
# add groups based on attrs
|
||||
groups.append('triton_image=' + attrs['image'])
|
||||
groups.append('triton_package=' + attrs['package'])
|
||||
groups.append('triton_state=' + attrs['state'])
|
||||
groups.append('triton_firewall_enabled=%s' % attrs['firewall_enabled'])
|
||||
groups.extend('triton_tags_%s=%s' % item
|
||||
for item in attrs['tags'].items())
|
||||
groups.extend('triton_network=' + network
|
||||
for network in attrs['networks'])
|
||||
|
||||
# groups specific to Mantl
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('packet_device')
|
||||
def packet_device(resource, tfvars=None):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
@@ -157,7 +226,7 @@ def packet_device(resource, tfvars=None):
|
||||
|
||||
attrs = {
|
||||
'id': raw_attrs['id'],
|
||||
'facilities': parse_list(raw_attrs, 'facilities'),
|
||||
'facility': raw_attrs['facility'],
|
||||
'hostname': raw_attrs['hostname'],
|
||||
'operating_system': raw_attrs['operating_system'],
|
||||
'locked': parse_bool(raw_attrs['locked']),
|
||||
@@ -178,6 +247,7 @@ def packet_device(resource, tfvars=None):
|
||||
}
|
||||
|
||||
# add groups based on attrs
|
||||
groups.append('packet_facility=' + attrs['facility'])
|
||||
groups.append('packet_operating_system=' + attrs['operating_system'])
|
||||
groups.append('packet_locked=%s' % attrs['locked'])
|
||||
groups.append('packet_state=' + attrs['state'])
|
||||
@@ -189,6 +259,94 @@ def packet_device(resource, tfvars=None):
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('digitalocean_droplet')
|
||||
@calculate_mantl_vars
|
||||
def digitalocean_host(resource, tfvars=None):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
name = raw_attrs['name']
|
||||
groups = []
|
||||
|
||||
attrs = {
|
||||
'id': raw_attrs['id'],
|
||||
'image': raw_attrs['image'],
|
||||
'ipv4_address': raw_attrs['ipv4_address'],
|
||||
'locked': parse_bool(raw_attrs['locked']),
|
||||
'metadata': json.loads(raw_attrs.get('user_data', '{}')),
|
||||
'region': raw_attrs['region'],
|
||||
'size': raw_attrs['size'],
|
||||
'ssh_keys': parse_list(raw_attrs, 'ssh_keys'),
|
||||
'status': raw_attrs['status'],
|
||||
# ansible
|
||||
'ansible_ssh_host': raw_attrs['ipv4_address'],
|
||||
'ansible_ssh_port': 22,
|
||||
'ansible_ssh_user': 'root', # it's always "root" on DO
|
||||
# generic
|
||||
'public_ipv4': raw_attrs['ipv4_address'],
|
||||
'private_ipv4': raw_attrs.get('ipv4_address_private',
|
||||
raw_attrs['ipv4_address']),
|
||||
'provider': 'digitalocean',
|
||||
}
|
||||
|
||||
# attrs specific to Mantl
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['metadata'].get('dc', attrs['region'])),
|
||||
'role': attrs['metadata'].get('role', 'none'),
|
||||
'ansible_python_interpreter': attrs['metadata'].get('python_bin','python')
|
||||
})
|
||||
|
||||
# add groups based on attrs
|
||||
groups.append('do_image=' + attrs['image'])
|
||||
groups.append('do_locked=%s' % attrs['locked'])
|
||||
groups.append('do_region=' + attrs['region'])
|
||||
groups.append('do_size=' + attrs['size'])
|
||||
groups.append('do_status=' + attrs['status'])
|
||||
groups.extend('do_metadata_%s=%s' % item
|
||||
for item in attrs['metadata'].items())
|
||||
|
||||
# groups specific to Mantl
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('softlayer_virtualserver')
|
||||
@calculate_mantl_vars
|
||||
def softlayer_host(resource, module_name):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
name = raw_attrs['name']
|
||||
groups = []
|
||||
|
||||
attrs = {
|
||||
'id': raw_attrs['id'],
|
||||
'image': raw_attrs['image'],
|
||||
'ipv4_address': raw_attrs['ipv4_address'],
|
||||
'metadata': json.loads(raw_attrs.get('user_data', '{}')),
|
||||
'region': raw_attrs['region'],
|
||||
'ram': raw_attrs['ram'],
|
||||
'cpu': raw_attrs['cpu'],
|
||||
'ssh_keys': parse_list(raw_attrs, 'ssh_keys'),
|
||||
'public_ipv4': raw_attrs['ipv4_address'],
|
||||
'private_ipv4': raw_attrs['ipv4_address_private'],
|
||||
'ansible_ssh_host': raw_attrs['ipv4_address'],
|
||||
'ansible_ssh_port': 22,
|
||||
'ansible_ssh_user': 'root',
|
||||
'provider': 'softlayer',
|
||||
}
|
||||
|
||||
# attrs specific to Mantl
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['metadata'].get('dc', attrs['region'])),
|
||||
'role': attrs['metadata'].get('role', 'none'),
|
||||
'ansible_python_interpreter': attrs['metadata'].get('python_bin','python')
|
||||
})
|
||||
|
||||
# groups specific to Mantl
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
def openstack_floating_ips(resource):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
attrs = {
|
||||
@@ -286,6 +444,281 @@ def openstack_host(resource, module_name):
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('aws_instance')
|
||||
@calculate_mantl_vars
|
||||
def aws_host(resource, module_name):
|
||||
name = resource['primary']['attributes']['tags.Name']
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
|
||||
groups = []
|
||||
|
||||
attrs = {
|
||||
'ami': raw_attrs['ami'],
|
||||
'availability_zone': raw_attrs['availability_zone'],
|
||||
'ebs_block_device': parse_attr_list(raw_attrs, 'ebs_block_device'),
|
||||
'ebs_optimized': parse_bool(raw_attrs['ebs_optimized']),
|
||||
'ephemeral_block_device': parse_attr_list(raw_attrs,
|
||||
'ephemeral_block_device'),
|
||||
'id': raw_attrs['id'],
|
||||
'key_name': raw_attrs['key_name'],
|
||||
'private': parse_dict(raw_attrs, 'private',
|
||||
sep='_'),
|
||||
'public': parse_dict(raw_attrs, 'public',
|
||||
sep='_'),
|
||||
'root_block_device': parse_attr_list(raw_attrs, 'root_block_device'),
|
||||
'security_groups': parse_list(raw_attrs, 'security_groups'),
|
||||
'subnet': parse_dict(raw_attrs, 'subnet',
|
||||
sep='_'),
|
||||
'tags': parse_dict(raw_attrs, 'tags'),
|
||||
'tenancy': raw_attrs['tenancy'],
|
||||
'vpc_security_group_ids': parse_list(raw_attrs,
|
||||
'vpc_security_group_ids'),
|
||||
# ansible-specific
|
||||
'ansible_ssh_port': 22,
|
||||
'ansible_ssh_host': raw_attrs['public_ip'],
|
||||
# generic
|
||||
'public_ipv4': raw_attrs['public_ip'],
|
||||
'private_ipv4': raw_attrs['private_ip'],
|
||||
'provider': 'aws',
|
||||
}
|
||||
|
||||
# attrs specific to Ansible
|
||||
if 'tags.sshUser' in raw_attrs:
|
||||
attrs['ansible_ssh_user'] = raw_attrs['tags.sshUser']
|
||||
if 'tags.sshPrivateIp' in raw_attrs:
|
||||
attrs['ansible_ssh_host'] = raw_attrs['private_ip']
|
||||
|
||||
# attrs specific to Mantl
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['tags'].get('dc', module_name)),
|
||||
'role': attrs['tags'].get('role', 'none'),
|
||||
'ansible_python_interpreter': attrs['tags'].get('python_bin','python')
|
||||
})
|
||||
|
||||
# groups specific to Mantl
|
||||
groups.extend(['aws_ami=' + attrs['ami'],
|
||||
'aws_az=' + attrs['availability_zone'],
|
||||
'aws_key_name=' + attrs['key_name'],
|
||||
'aws_tenancy=' + attrs['tenancy']])
|
||||
groups.extend('aws_tag_%s=%s' % item for item in attrs['tags'].items())
|
||||
groups.extend('aws_vpc_security_group=' + group
|
||||
for group in attrs['vpc_security_group_ids'])
|
||||
groups.extend('aws_subnet_%s=%s' % subnet
|
||||
for subnet in attrs['subnet'].items())
|
||||
|
||||
# groups specific to Mantl
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('google_compute_instance')
|
||||
@calculate_mantl_vars
|
||||
def gce_host(resource, module_name):
|
||||
name = resource['primary']['id']
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
groups = []
|
||||
|
||||
# network interfaces
|
||||
interfaces = parse_attr_list(raw_attrs, 'network_interface')
|
||||
for interface in interfaces:
|
||||
interface['access_config'] = parse_attr_list(interface,
|
||||
'access_config')
|
||||
for key in interface.keys():
|
||||
if '.' in key:
|
||||
del interface[key]
|
||||
|
||||
# general attrs
|
||||
attrs = {
|
||||
'can_ip_forward': raw_attrs['can_ip_forward'] == 'true',
|
||||
'disks': parse_attr_list(raw_attrs, 'disk'),
|
||||
'machine_type': raw_attrs['machine_type'],
|
||||
'metadata': parse_dict(raw_attrs, 'metadata'),
|
||||
'network': parse_attr_list(raw_attrs, 'network'),
|
||||
'network_interface': interfaces,
|
||||
'self_link': raw_attrs['self_link'],
|
||||
'service_account': parse_attr_list(raw_attrs, 'service_account'),
|
||||
'tags': parse_list(raw_attrs, 'tags'),
|
||||
'zone': raw_attrs['zone'],
|
||||
# ansible
|
||||
'ansible_ssh_port': 22,
|
||||
'provider': 'gce',
|
||||
}
|
||||
|
||||
# attrs specific to Ansible
|
||||
if 'metadata.ssh_user' in raw_attrs:
|
||||
attrs['ansible_ssh_user'] = raw_attrs['metadata.ssh_user']
|
||||
|
||||
# attrs specific to Mantl
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['metadata'].get('dc', module_name)),
|
||||
'role': attrs['metadata'].get('role', 'none'),
|
||||
'ansible_python_interpreter': attrs['metadata'].get('python_bin','python')
|
||||
})
|
||||
|
||||
try:
|
||||
attrs.update({
|
||||
'ansible_ssh_host': interfaces[0]['access_config'][0]['nat_ip'] or interfaces[0]['access_config'][0]['assigned_nat_ip'],
|
||||
'public_ipv4': interfaces[0]['access_config'][0]['nat_ip'] or interfaces[0]['access_config'][0]['assigned_nat_ip'],
|
||||
'private_ipv4': interfaces[0]['address'],
|
||||
'publicly_routable': True,
|
||||
})
|
||||
except (KeyError, ValueError):
|
||||
attrs.update({'ansible_ssh_host': '', 'publicly_routable': False})
|
||||
|
||||
# add groups based on attrs
|
||||
groups.extend('gce_image=' + disk['image'] for disk in attrs['disks'])
|
||||
groups.append('gce_machine_type=' + attrs['machine_type'])
|
||||
groups.extend('gce_metadata_%s=%s' % (key, value)
|
||||
for (key, value) in attrs['metadata'].items()
|
||||
if key not in set(['sshKeys']))
|
||||
groups.extend('gce_tag=' + tag for tag in attrs['tags'])
|
||||
groups.append('gce_zone=' + attrs['zone'])
|
||||
|
||||
if attrs['can_ip_forward']:
|
||||
groups.append('gce_ip_forward')
|
||||
if attrs['publicly_routable']:
|
||||
groups.append('gce_publicly_routable')
|
||||
|
||||
# groups specific to Mantl
|
||||
groups.append('role=' + attrs['metadata'].get('role', 'none'))
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('vsphere_virtual_machine')
|
||||
@calculate_mantl_vars
|
||||
def vsphere_host(resource, module_name):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
network_attrs = parse_dict(raw_attrs, 'network_interface')
|
||||
network = parse_dict(network_attrs, '0')
|
||||
ip_address = network.get('ipv4_address', network['ip_address'])
|
||||
name = raw_attrs['name']
|
||||
groups = []
|
||||
|
||||
attrs = {
|
||||
'id': raw_attrs['id'],
|
||||
'ip_address': ip_address,
|
||||
'private_ipv4': ip_address,
|
||||
'public_ipv4': ip_address,
|
||||
'metadata': parse_dict(raw_attrs, 'custom_configuration_parameters'),
|
||||
'ansible_ssh_port': 22,
|
||||
'provider': 'vsphere',
|
||||
}
|
||||
|
||||
try:
|
||||
attrs.update({
|
||||
'ansible_ssh_host': ip_address,
|
||||
})
|
||||
except (KeyError, ValueError):
|
||||
attrs.update({'ansible_ssh_host': '', })
|
||||
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['metadata'].get('consul_dc', module_name)),
|
||||
'role': attrs['metadata'].get('role', 'none'),
|
||||
'ansible_python_interpreter': attrs['metadata'].get('python_bin','python')
|
||||
})
|
||||
|
||||
# attrs specific to Ansible
|
||||
if 'ssh_user' in attrs['metadata']:
|
||||
attrs['ansible_ssh_user'] = attrs['metadata']['ssh_user']
|
||||
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
@parses('azure_instance')
|
||||
@calculate_mantl_vars
|
||||
def azure_host(resource, module_name):
|
||||
name = resource['primary']['attributes']['name']
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
|
||||
groups = []
|
||||
|
||||
attrs = {
|
||||
'automatic_updates': raw_attrs['automatic_updates'],
|
||||
'description': raw_attrs['description'],
|
||||
'hosted_service_name': raw_attrs['hosted_service_name'],
|
||||
'id': raw_attrs['id'],
|
||||
'image': raw_attrs['image'],
|
||||
'ip_address': raw_attrs['ip_address'],
|
||||
'location': raw_attrs['location'],
|
||||
'name': raw_attrs['name'],
|
||||
'reverse_dns': raw_attrs['reverse_dns'],
|
||||
'security_group': raw_attrs['security_group'],
|
||||
'size': raw_attrs['size'],
|
||||
'ssh_key_thumbprint': raw_attrs['ssh_key_thumbprint'],
|
||||
'subnet': raw_attrs['subnet'],
|
||||
'username': raw_attrs['username'],
|
||||
'vip_address': raw_attrs['vip_address'],
|
||||
'virtual_network': raw_attrs['virtual_network'],
|
||||
'endpoint': parse_attr_list(raw_attrs, 'endpoint'),
|
||||
# ansible
|
||||
'ansible_ssh_port': 22,
|
||||
'ansible_ssh_user': raw_attrs['username'],
|
||||
'ansible_ssh_host': raw_attrs['vip_address'],
|
||||
}
|
||||
|
||||
# attrs specific to mantl
|
||||
attrs.update({
|
||||
'consul_dc': attrs['location'].lower().replace(" ", "-"),
|
||||
'role': attrs['description']
|
||||
})
|
||||
|
||||
# groups specific to mantl
|
||||
groups.extend(['azure_image=' + attrs['image'],
|
||||
'azure_location=' + attrs['location'].lower().replace(" ", "-"),
|
||||
'azure_username=' + attrs['username'],
|
||||
'azure_security_group=' + attrs['security_group']])
|
||||
|
||||
# groups specific to mantl
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
@parses('clc_server')
|
||||
@calculate_mantl_vars
|
||||
def clc_server(resource, module_name):
|
||||
raw_attrs = resource['primary']['attributes']
|
||||
name = raw_attrs.get('id')
|
||||
groups = []
|
||||
md = parse_dict(raw_attrs, 'metadata')
|
||||
attrs = {
|
||||
'metadata': md,
|
||||
'ansible_ssh_port': md.get('ssh_port', 22),
|
||||
'ansible_ssh_user': md.get('ssh_user', 'root'),
|
||||
'provider': 'clc',
|
||||
'publicly_routable': False,
|
||||
}
|
||||
|
||||
try:
|
||||
attrs.update({
|
||||
'public_ipv4': raw_attrs['public_ip_address'],
|
||||
'private_ipv4': raw_attrs['private_ip_address'],
|
||||
'ansible_ssh_host': raw_attrs['public_ip_address'],
|
||||
'publicly_routable': True,
|
||||
})
|
||||
except (KeyError, ValueError):
|
||||
attrs.update({
|
||||
'ansible_ssh_host': raw_attrs['private_ip_address'],
|
||||
'private_ipv4': raw_attrs['private_ip_address'],
|
||||
})
|
||||
|
||||
attrs.update({
|
||||
'consul_dc': _clean_dc(attrs['metadata'].get('dc', module_name)),
|
||||
'role': attrs['metadata'].get('role', 'none'),
|
||||
})
|
||||
|
||||
groups.append('role=' + attrs['role'])
|
||||
groups.append('dc=' + attrs['consul_dc'])
|
||||
return name, attrs, groups
|
||||
|
||||
|
||||
def iter_host_ips(hosts, ips):
|
||||
'''Update hosts that have an entry in the floating IP list'''
|
||||
for host in hosts:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
# Stop temporary Vault if it's running (can linger if playbook fails out)
|
||||
- name: stop vault-temp container
|
||||
shell: docker stop {{ vault_temp_container_name }}
|
||||
shell: docker stop {{ vault_temp_container_name }} || rkt stop {{ vault_temp_container_name }}
|
||||
failed_when: false
|
||||
register: vault_temp_stop
|
||||
changed_when: vault_temp_stop is succeeded
|
||||
|
||||
@@ -5,19 +5,17 @@
|
||||
set_fact:
|
||||
sync_file_dir: "{{ sync_file_path | dirname }}"
|
||||
sync_file: "{{ sync_file_path | basename }}"
|
||||
when:
|
||||
- sync_file_path is defined
|
||||
- sync_file_path
|
||||
when: sync_file_path is defined and sync_file_path != ''
|
||||
|
||||
- name: "sync_file | Set fact for sync_file_path when undefined"
|
||||
set_fact:
|
||||
sync_file_path: "{{ (sync_file_dir, sync_file)|join('/') }}"
|
||||
when: sync_file_path is not defined or not sync_file_path
|
||||
when: sync_file_path is not defined or sync_file_path == ''
|
||||
|
||||
- name: "sync_file | Set fact for key path name"
|
||||
set_fact:
|
||||
sync_file_key_path: "{{ sync_file_path.rsplit('.', 1)|first + '-key.' + sync_file_path.rsplit('.', 1)|last }}"
|
||||
when: sync_file_key_path is not defined or not sync_file_key_path
|
||||
when: sync_file_key_path is not defined or sync_file_key_path == ''
|
||||
|
||||
- name: "sync_file | Check if {{sync_file_path}} file exists"
|
||||
stat:
|
||||
@@ -48,17 +46,17 @@
|
||||
- name: "sync_file | Remove sync sources with files that do not match sync_file_srcs|first"
|
||||
set_fact:
|
||||
_: "{% if inventory_hostname in sync_file_srcs %}{{ sync_file_srcs.remove(inventory_hostname) }}{% endif %}"
|
||||
when:
|
||||
- sync_file_srcs|d([])|length > 1
|
||||
- inventory_hostname != sync_file_srcs|first
|
||||
when: >-
|
||||
sync_file_srcs|d([])|length > 1 and
|
||||
inventory_hostname != sync_file_srcs|first
|
||||
|
||||
- name: "sync_file | Remove sync sources with keys that do not match sync_file_srcs|first"
|
||||
set_fact:
|
||||
_: "{% if inventory_hostname in sync_file_srcs %}{{ sync_file_srcs.remove(inventory_hostname) }}{% endif %}"
|
||||
when:
|
||||
- sync_file_is_cert|d()
|
||||
- sync_file_key_srcs|d([])|length > 1
|
||||
- inventory_hostname != sync_file_key_srcs|first
|
||||
when: >-
|
||||
sync_file_is_cert|d() and
|
||||
sync_file_key_srcs|d([])|length > 1 and
|
||||
inventory_hostname != sync_file_key_srcs|first
|
||||
|
||||
- name: "sync_file | Consolidate file and key sources"
|
||||
set_fact:
|
||||
|
||||
45
contrib/vault/roles/vault/templates/rkt.service.j2
Normal file
@@ -0,0 +1,45 @@
|
||||
[Unit]
|
||||
Description=hashicorp vault on rkt
|
||||
Documentation=https://github.com/hashicorp/vault
|
||||
Wants=network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
Restart=on-failure
|
||||
RestartSec=10s
|
||||
TimeoutStartSec=5
|
||||
LimitNOFILE=40000
|
||||
# Container has the following internal mount points:
|
||||
# /vault/file/ # File backend storage location
|
||||
# /vault/logs/ # Log files
|
||||
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/run/vault.uuid
|
||||
|
||||
ExecStart=/usr/bin/rkt run \
|
||||
--insecure-options=image \
|
||||
--volume hosts,kind=host,source=/etc/hosts,readOnly=true \
|
||||
--mount volume=hosts,target=/etc/hosts \
|
||||
--volume=volume-vault-file,kind=host,source=/var/lib/vault \
|
||||
--volume=volume-vault-logs,kind=host,source={{ vault_log_dir }} \
|
||||
--volume=vault-cert-dir,kind=host,source={{ vault_cert_dir }} \
|
||||
--mount=volume=vault-cert-dir,target={{ vault_cert_dir }} \
|
||||
--volume=vault-conf-dir,kind=host,source={{ vault_config_dir }} \
|
||||
--mount=volume=vault-conf-dir,target={{ vault_config_dir }} \
|
||||
--volume=vault-secrets-dir,kind=host,source={{ vault_secrets_dir }} \
|
||||
--mount=volume=vault-secrets-dir,target={{ vault_secrets_dir }} \
|
||||
--volume=vault-roles-dir,kind=host,source={{ vault_roles_dir }} \
|
||||
--mount=volume=vault-roles-dir,target={{ vault_roles_dir }} \
|
||||
--volume=etcd-cert-dir,kind=host,source={{ etcd_cert_dir }} \
|
||||
--mount=volume=etcd-cert-dir,target={{ etcd_cert_dir }} \
|
||||
docker://{{ vault_image_repo }}:{{ vault_image_tag }} \
|
||||
--uuid-file-save=/var/run/vault.uuid \
|
||||
--name={{ vault_container_name }} \
|
||||
--net=host \
|
||||
--caps-retain=CAP_IPC_LOCK \
|
||||
--exec vault -- \
|
||||
server \
|
||||
--config={{ vault_config_dir }}/config.json
|
||||
|
||||
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/run/vault.uuid
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -93,6 +93,6 @@ Potential Work
|
||||
- Change the Vault role to not run certain tasks when ``root_token`` and
|
||||
``unseal_keys`` are not present. Alternatively, allow user input for these
|
||||
values when missing.
|
||||
- Add the ability to start temp Vault with Host or Docker
|
||||
- Add the ability to start temp Vault with Host, Rkt, or Docker
|
||||
- Add a dynamic way to change out the backend role creation during Bootstrap,
|
||||
so other services can be used (such as Consul)
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
* [AWS](docs/aws.md)
|
||||
* [Azure](docs/azure.md)
|
||||
* [OpenStack](/docs/openstack.md)
|
||||
* [Packet](/docs/packet.md)
|
||||
* [vSphere](/docs/vsphere.md)
|
||||
* Operating Systems
|
||||
* [Atomic](docs/atomic.md)
|
||||
|
||||
@@ -35,12 +35,12 @@ Below is a complete inventory example:
|
||||
```
|
||||
## Configure 'ip' variable to bind kubernetes services on a
|
||||
## different ip than the default iface
|
||||
node1 ansible_host=95.54.0.12 ip=10.3.0.1
|
||||
node2 ansible_host=95.54.0.13 ip=10.3.0.2
|
||||
node3 ansible_host=95.54.0.14 ip=10.3.0.3
|
||||
node4 ansible_host=95.54.0.15 ip=10.3.0.4
|
||||
node5 ansible_host=95.54.0.16 ip=10.3.0.5
|
||||
node6 ansible_host=95.54.0.17 ip=10.3.0.6
|
||||
node1 ansible_ssh_host=95.54.0.12 ip=10.3.0.1
|
||||
node2 ansible_ssh_host=95.54.0.13 ip=10.3.0.2
|
||||
node3 ansible_ssh_host=95.54.0.14 ip=10.3.0.3
|
||||
node4 ansible_ssh_host=95.54.0.15 ip=10.3.0.4
|
||||
node5 ansible_ssh_host=95.54.0.16 ip=10.3.0.5
|
||||
node6 ansible_ssh_host=95.54.0.17 ip=10.3.0.6
|
||||
|
||||
[kube-master]
|
||||
node1
|
||||
@@ -70,7 +70,7 @@ The group variables to control main deployment options are located in the direct
|
||||
Optional variables are located in the `inventory/sample/group_vars/all.yml`.
|
||||
Mandatory variables that are common for at least one role (or a node group) can be found in the
|
||||
`inventory/sample/group_vars/k8s-cluster.yml`.
|
||||
There are also role vars for docker, kubernetes preinstall and master roles.
|
||||
There are also role vars for docker, rkt, kubernetes preinstall and master roles.
|
||||
According to the [ansible docs](http://docs.ansible.com/ansible/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable),
|
||||
those cannot be overridden from the group vars. In order to override, one should use
|
||||
the `-e ` runtime flags (most simple way) or other layers described in the docs.
|
||||
@@ -175,8 +175,7 @@ simply add a line to your inventory, where you have to replace x.x.x.x with the
|
||||
bastion host.
|
||||
|
||||
```
|
||||
[bastion]
|
||||
bastion ansible_host=x.x.x.x
|
||||
bastion ansible_ssh_host=x.x.x.x
|
||||
```
|
||||
|
||||
For more information about Ansible and bastion hosts, read
|
||||
|
||||
16
docs/arch.md
@@ -1,16 +0,0 @@
|
||||
## Architecture compatibility
|
||||
|
||||
The following table shows the impact of the CPU architecture on compatible features:
|
||||
- amd64: Cluster using only x86/amd64 CPUs
|
||||
- arm64: Cluster using only arm64 CPUs
|
||||
- amd64 + arm64: Cluster with a mix of x86/amd64 and arm64 CPUs
|
||||
|
||||
| kube_network_plugin | amd64 | arm64 | amd64 + arm64 |
|
||||
| ------------------- | ----- | ----- | ------------- |
|
||||
| Calico | Y | Y | Y |
|
||||
| Weave | Y | Y | Y |
|
||||
| Flannel | Y | N | N |
|
||||
| Canal | Y | N | N |
|
||||
| Cilium | Y | N | N |
|
||||
| Contib | Y | N | N |
|
||||
| kube-router | Y | N | N |
|
||||
@@ -51,25 +51,6 @@ This is the AppId from the last command
|
||||
|
||||
azure\_aad\_client\_id must be set to the AppId, azure\_aad\_client\_secret is your choosen secret.
|
||||
|
||||
#### azure\_loadbalancer\_sku
|
||||
Sku of Load Balancer and Public IP. Candidate values are: basic and standard.
|
||||
|
||||
#### azure\_exclude\_master\_from\_standard\_lb
|
||||
azure\_exclude\_master\_from\_standard\_lb excludes master nodes from `standard` load balancer.
|
||||
|
||||
#### azure\_disable\_outbound\_snat
|
||||
azure\_disable\_outbound\_snat disables the outbound SNAT for public load balancer rules. It should only be set when azure\_exclude\_master\_from\_standard\_lb is `standard`.
|
||||
|
||||
#### azure\_primary\_availability\_set\_name
|
||||
(Optional) The name of the availability set that should be used as the load balancer backend .If this is set, the Azure
|
||||
cloudprovider will only add nodes from that availability set to the load balancer backend pool. If this is not set, and
|
||||
multiple agent pools (availability sets) are used, then the cloudprovider will try to add all nodes to a single backend
|
||||
pool which is forbidden. In other words, if you use multiple agent pools (availability sets), you MUST set this field.
|
||||
|
||||
#### azure\_use\_instance\_metadata
|
||||
Use instance metadata service where possible
|
||||
|
||||
|
||||
## Provisioning Azure with Resource Group Templates
|
||||
|
||||
You'll find Resource Group Templates and scripts to provision the required infrastructure to Azure in [*contrib/azurerm*](../contrib/azurerm/README.md)
|
||||
|
||||
10
docs/cni.md
@@ -1,10 +0,0 @@
|
||||
CNI
|
||||
==============
|
||||
|
||||
This network plugin only unpacks CNI plugins version `cni_version` into `/opt/cni/bin` and instructs kubelet to use cni, that is adds following cli params:
|
||||
|
||||
`KUBELET_NETWORK_PLUGIN="--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"`
|
||||
|
||||
It's intended usage is for custom CNI configuration, e.g. manual routing tables + bridge + loopback CNI plugin outside kubespray scope. Furthermore, it's used for non-kubespray supported CNI plugins which you can install afterward.
|
||||
|
||||
You are required to fill `/etc/cni/net.d` with valid CNI configuration after using kubespray.
|
||||
@@ -6,7 +6,7 @@ Building your own inventory
|
||||
|
||||
Ansible inventory can be stored in 3 formats: YAML, JSON, or INI-like. There is
|
||||
an example inventory located
|
||||
[here](https://github.com/kubernetes-sigs/kubespray/blob/master/inventory/sample/inventory.ini).
|
||||
[here](https://github.com/kubernetes-sigs/kubespray/blob/master/inventory/sample/hosts.ini).
|
||||
|
||||
You can use an
|
||||
[inventory generator](https://github.com/kubernetes-sigs/kubespray/blob/master/contrib/inventory_builder/inventory.py)
|
||||
@@ -20,9 +20,7 @@ Example inventory generator usage:
|
||||
|
||||
cp -r inventory/sample inventory/mycluster
|
||||
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
|
||||
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
|
||||
|
||||
Then use `inventory/mycluster/hosts.yml` as inventory file.
|
||||
CONFIG_FILE=inventory/mycluster/hosts.ini python3 contrib/inventory_builder/inventory.py ${IPS[@]}
|
||||
|
||||
Starting custom deployment
|
||||
--------------------------
|
||||
@@ -32,7 +30,7 @@ and start the deployment:
|
||||
|
||||
**IMPORTANT**: Edit my\_inventory/groups\_vars/\*.yaml to override data vars:
|
||||
|
||||
ansible-playbook -i inventory/mycluster/hosts.yml cluster.yml -b -v \
|
||||
ansible-playbook -i inventory/mycluster/hosts.ini cluster.yml -b -v \
|
||||
--private-key=~/.ssh/private_key
|
||||
|
||||
See more details in the [ansible guide](ansible.md).
|
||||
@@ -45,7 +43,7 @@ You may want to add worker, master or etcd nodes to your existing cluster. This
|
||||
- Add the new worker node to your inventory in the appropriate group (or utilize a [dynamic inventory](https://docs.ansible.com/ansible/intro_dynamic_inventory.html)).
|
||||
- Run the ansible-playbook command, substituting `cluster.yml` for `scale.yml`:
|
||||
|
||||
ansible-playbook -i inventory/mycluster/hosts.yml scale.yml -b -v \
|
||||
ansible-playbook -i inventory/mycluster/hosts.ini scale.yml -b -v \
|
||||
--private-key=~/.ssh/private_key
|
||||
|
||||
Remove nodes
|
||||
@@ -55,12 +53,12 @@ You may want to remove **worker** nodes to your existing cluster. This can be do
|
||||
|
||||
Add worker nodes to the list under kube-node if you want to delete them (or utilize a [dynamic inventory](https://docs.ansible.com/ansible/intro_dynamic_inventory.html)).
|
||||
|
||||
ansible-playbook -i inventory/mycluster/hosts.yml remove-node.yml -b -v \
|
||||
ansible-playbook -i inventory/mycluster/hosts.ini remove-node.yml -b -v \
|
||||
--private-key=~/.ssh/private_key
|
||||
|
||||
Use `--extra-vars "node=<nodename>,<nodename2>"` to select the node you want to delete.
|
||||
```
|
||||
ansible-playbook -i inventory/mycluster/hosts.yml remove-node.yml -b -v \
|
||||
ansible-playbook -i inventory/mycluster/hosts.ini remove-node.yml -b -v \
|
||||
--private-key=~/.ssh/private_key \
|
||||
--extra-vars "node=nodename,nodename2"
|
||||
```
|
||||
|
||||
@@ -24,7 +24,7 @@ where an external LB or virtual IP management is inconvenient. This option is
|
||||
configured by the variable `loadbalancer_apiserver_localhost` (defaults to
|
||||
`True`. Or `False`, if there is an external `loadbalancer_apiserver` defined).
|
||||
You may also define the port the local internal loadbalancer uses by changing,
|
||||
`loadbalancer_apiserver_port`. This defaults to the value of
|
||||
`nginx_kube_apiserver_port`. This defaults to the value of
|
||||
`kube_apiserver_port`. It is also important to note that Kubespray will only
|
||||
configure kubelet and kube-proxy on non-master nodes to use the local internal
|
||||
loadbalancer.
|
||||
@@ -114,7 +114,7 @@ Where:
|
||||
* `ext` - Externally load balanced VIP:port and FQDN, not managed by Kubespray;
|
||||
* `lc` - localhost;
|
||||
* `bip` - a custom bind IP or localhost for the default bind IP '0.0.0.0';
|
||||
* `nsp` - nginx secure port, `loadbalancer_apiserver_port`, defers to `sp`;
|
||||
* `nsp` - nginx secure port, `nginx_kube_apiserver_port`, defers to `sp`;
|
||||
* `sp` - secure port, `kube_apiserver_port`;
|
||||
* `lp` - LB port, `loadbalancer_apiserver.port`, defers to the secure port;
|
||||
* `ip` - the node IP, defers to the ansible IP;
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
|
||||
Recovering the control plane
|
||||
============================
|
||||
|
||||
To recover from broken nodes in the control plane use the "recover\-control\-plane.yml" playbook.
|
||||
|
||||
* Backup what you can
|
||||
* Provision new nodes to replace the broken ones
|
||||
* Place the surviving nodes of the control plane first in the "etcd" and "kube-master" groups
|
||||
* Add the new nodes below the surviving control plane nodes in the "etcd" and "kube-master" groups
|
||||
|
||||
Examples of what broken means in this context:
|
||||
|
||||
* One or more bare metal node(s) suffer from unrecoverable hardware failure
|
||||
* One or more node(s) fail during patching or upgrading
|
||||
* Etcd database corruption
|
||||
* Other node related failures leaving your control plane degraded or nonfunctional
|
||||
|
||||
__Note that you need at least one functional node to be able to recover using this method.__
|
||||
|
||||
## If etcd quorum is intact
|
||||
|
||||
* Set the etcd member names of the broken node(s) in the variable "old\_etcd\_members", this variable is used to remove the broken nodes from the etcd cluster.
|
||||
```old_etcd_members=etcd2,etcd3```
|
||||
* If you reuse identities for your etcd nodes add the inventory names for those nodes to the variable "old\_etcds". This will remove any previously generated certificates for those nodes.
|
||||
```old_etcds=etcd2.example.com,etcd3.example.com```
|
||||
* If you would like to remove the broken node objects from the kubernetes cluster add their inventory names to the variable "old\_kube\_masters"
|
||||
```old_kube_masters=master2.example.com,master3.example.com```
|
||||
|
||||
Then run the playbook with ```--limit etcd,kube-master```
|
||||
|
||||
When finished you should have a fully working and highly available control plane again.
|
||||
|
||||
## If etcd quorum is lost
|
||||
|
||||
* If you reuse identities for your etcd nodes add the inventory names for those nodes to the variable "old\_etcds". This will remove any previously generated certificates for those nodes.
|
||||
```old_etcds=etcd2.example.com,etcd3.example.com```
|
||||
* If you would like to remove the broken node objects from the kubernetes cluster add their inventory names to the variable "old\_kube\_masters"
|
||||
```old_kube_masters=master2.example.com,master3.example.com```
|
||||
|
||||
Then run the playbook with ```--limit etcd,kube-master```
|
||||
|
||||
When finished you should have a fully working and highly available control plane again.
|
||||
|
||||
The playbook will attempt to take a snapshot from the first node in the "etcd" group and restore from that. If you would like to restore from an alternate snapshot set the path to that snapshot in the "etcd\_snapshot" variable.
|
||||
|
||||
```etcd_snapshot=/tmp/etcd_snapshot```
|
||||
|
||||
## Caveats
|
||||
|
||||
* The playbook has only been tested on control planes where the etcd and kube-master nodes are the same, the playbook will warn if run on a cluster with separate etcd and kube-master nodes.
|
||||
* The playbook has only been tested with fairly small etcd databases.
|
||||
* If your new control plane nodes have new ip addresses you may have to change settings in various places.
|
||||
* There may be disruptions while running the playbook.
|
||||
* There are absolutely no guarantees.
|
||||
|
||||
If possible try to break a cluster in the same way that your target cluster is broken and test to recover that before trying on the real target cluster.
|
||||
@@ -2,7 +2,7 @@ Kubespray's roadmap
|
||||
=================
|
||||
|
||||
### Self deployment (pull-mode) [#320](https://github.com/kubespray/kubespray/issues/320)
|
||||
- the playbook would install and configure docker and the etcd cluster
|
||||
- the playbook would install and configure docker/rkt and the etcd cluster
|
||||
- the following data would be inserted into etcd: certs,tokens,users,inventory,group_vars.
|
||||
- a "kubespray" container would be deployed (kubespray-cli, ansible-playbook)
|
||||
- to be discussed, a way to provide the inventory
|
||||
|
||||
@@ -1,3 +1,24 @@
|
||||
Travis CI test matrix
|
||||
=====================
|
||||
|
||||
GCE instances
|
||||
-------------
|
||||
|
||||
Here is the test matrix for the CI gates:
|
||||
|
||||
| Network plugin| OS type| GCE region| Nodes layout|
|
||||
|-------------------------|-------------------------|-------------------------|-------------------------|
|
||||
| canal| debian-8-kubespray| asia-east1-a| ha-scale|
|
||||
| calico| debian-8-kubespray| europe-west1-c| default|
|
||||
| flannel| centos-7| asia-northeast1-c| default|
|
||||
| calico| centos-7| us-central1-b| ha|
|
||||
| weave| rhel-7| us-east1-c| default|
|
||||
| canal| coreos-stable| us-west1-b| ha-scale|
|
||||
| canal| rhel-7| asia-northeast1-b| separate|
|
||||
| weave| ubuntu-1604-xenial| europe-west1-d| separate|
|
||||
| calico| coreos-stable| us-central1-f| separate|
|
||||
|
||||
|
||||
Node Layouts
|
||||
------------
|
||||
|
||||
@@ -20,6 +41,15 @@ never actually deployed, but certificates are generated for them.
|
||||
|
||||
Note, the canal network plugin deploys flannel as well plus calico policy controller.
|
||||
|
||||
Hint: the command
|
||||
```
|
||||
bash scripts/gen_matrix.sh
|
||||
```
|
||||
will (hopefully) generate the CI test cases from the current ``.travis.yml``.
|
||||
|
||||
Gitlab CI test matrix
|
||||
=====================
|
||||
|
||||
GCE instances
|
||||
-------------
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ Stack](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/dns-stack.m
|
||||
proxy. Note that no_proxy defaults to all internal cluster IPs and hostnames
|
||||
that correspond to each node.
|
||||
* *kubelet_deployment_type* - Controls which platform to deploy kubelet on.
|
||||
Available options are ``host`` and ``docker``. ``docker`` mode
|
||||
Available options are ``host``, ``rkt``, and ``docker``. ``docker`` mode
|
||||
is unlikely to work on newer releases. Starting with Kubernetes v1.7
|
||||
series, this now defaults to ``host``. Before v1.7, the default was Docker.
|
||||
This is because of cgroup [issues](https://github.com/kubernetes/kubernetes/issues/43704).
|
||||
@@ -113,7 +113,7 @@ Stack](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/dns-stack.m
|
||||
* *kubelet_cgroup_driver* - Allows manual override of the
|
||||
cgroup-driver option for Kubelet. By default autodetection is used
|
||||
to match Docker configuration.
|
||||
* *kubelet_rotate_certificates* - Auto rotate the kubelet client certificates by requesting new certificates
|
||||
* *kubelet_rotate_certificates* - Auto rotate the kubelet client certificates by requesting new certificates
|
||||
from the kube-apiserver when the certificate expiration approaches.
|
||||
* *node_labels* - Labels applied to nodes via kubelet --node-labels parameter.
|
||||
For example, labels can be set in the inventory as variables or more widely in group_vars.
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
loadSidebar: 'docs/_sidebar.md',
|
||||
repo: 'https://github.com/kubernetes-sigs/kubespray',
|
||||
auto2top: true,
|
||||
logo: '/logo/logo-clear.png'
|
||||
}
|
||||
</script>
|
||||
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
|
||||
|
||||
@@ -21,15 +21,12 @@ bin_dir: /usr/local/bin
|
||||
|
||||
## Internal loadbalancers for apiservers
|
||||
# loadbalancer_apiserver_localhost: true
|
||||
# valid options are "nginx" or "haproxy"
|
||||
# loadbalancer_apiserver_type: nginx # valid values "nginx" or "haproxy"
|
||||
|
||||
## Local loadbalancer should use this port
|
||||
## And must be set port 6443
|
||||
loadbalancer_apiserver_port: 6443
|
||||
|
||||
## If loadbalancer_apiserver_healthcheck_port variable defined, enables proxy liveness check for nginx.
|
||||
loadbalancer_apiserver_healthcheck_port: 8081
|
||||
nginx_kube_apiserver_port: 6443
|
||||
## If nginx_kube_apiserver_healthcheck_port variable defined, enables proxy liveness check.
|
||||
nginx_kube_apiserver_healthcheck_port: 8081
|
||||
|
||||
### OTHER OPTIONAL VARIABLES
|
||||
## For some things, kubelet needs to load kernel modules. For example, dynamic kernel services are needed
|
||||
|
||||
@@ -56,30 +56,11 @@ cephfs_provisioner_enabled: false
|
||||
# cephfs_provisioner_claim_root: /volumes
|
||||
# cephfs_provisioner_deterministic_names: true
|
||||
|
||||
# RBD provisioner deployment
|
||||
rbd_provisioner_enabled: false
|
||||
# rbd_provisioner_namespace: rbd-provisioner
|
||||
# rbd_provisioner_replicas: 2
|
||||
# rbd_provisioner_monitors: "172.24.0.1:6789,172.24.0.2:6789,172.24.0.3:6789"
|
||||
# rbd_provisioner_pool: kube
|
||||
# rbd_provisioner_admin_id: admin
|
||||
# rbd_provisioner_secret_name: ceph-secret-admin
|
||||
# rbd_provisioner_secret: ceph-key-admin
|
||||
# rbd_provisioner_user_id: kube
|
||||
# rbd_provisioner_user_secret_name: ceph-secret-user
|
||||
# rbd_provisioner_user_secret: ceph-key-user
|
||||
# rbd_provisioner_user_secret_namespace: rbd-provisioner
|
||||
# rbd_provisioner_fs_type: ext4
|
||||
# rbd_provisioner_image_format: "2"
|
||||
# rbd_provisioner_image_features: layering
|
||||
# rbd_provisioner_storage_class: rbd
|
||||
# rbd_provisioner_reclaim_policy: Delete
|
||||
|
||||
# Nginx ingress controller deployment
|
||||
ingress_nginx_enabled: false
|
||||
# ingress_nginx_host_network: false
|
||||
# ingress_nginx_nodeselector:
|
||||
# beta.kubernetes.io/os: "linux": ""
|
||||
# node-role.kubernetes.io/node: ""
|
||||
# ingress_nginx_tolerations:
|
||||
# - key: "node-role.kubernetes.io/master"
|
||||
# operator: "Equal"
|
||||
|
||||
@@ -20,7 +20,7 @@ kube_users_dir: "{{ kube_config_dir }}/users"
|
||||
kube_api_anonymous_auth: true
|
||||
|
||||
## Change this to use another Kubernetes version, e.g. a current beta release
|
||||
kube_version: v1.14.1
|
||||
kube_version: v1.13.5
|
||||
|
||||
# kubernetes image repo define
|
||||
kube_image_repo: "gcr.io/google-containers"
|
||||
@@ -70,7 +70,7 @@ kube_users:
|
||||
# kube_oidc_groups_prefix: oidc:
|
||||
|
||||
|
||||
# Choose network plugin (cilium, calico, contiv, weave or flannel. Use cni for generic cni plugin)
|
||||
# Choose network plugin (cilium, calico, contiv, weave or flannel)
|
||||
# Can also be set to 'cloud', which lets the cloud provider setup appropriate routing
|
||||
kube_network_plugin: calico
|
||||
|
||||
@@ -132,7 +132,7 @@ dns_mode: coredns
|
||||
# Set manual server if using a custom cluster DNS server
|
||||
# manual_dns_server: 10.x.x.x
|
||||
# Enable nodelocal dns cache
|
||||
enable_nodelocaldns: true
|
||||
enable_nodelocaldns: False
|
||||
nodelocaldns_ip: 169.254.25.10
|
||||
|
||||
# Can be docker_dns, host_resolvconf or none
|
||||
@@ -153,10 +153,6 @@ etcd_deployment_type: docker
|
||||
kubelet_deployment_type: host
|
||||
helm_deployment_type: host
|
||||
|
||||
# Enable kubeadm experimental control plane
|
||||
kubeadm_control_plane: false
|
||||
kubeadm_certificate_key: "{{ lookup('password', credentials_dir + '/kubeadm_certificate_key.creds length=64 chars=hexdigits') | lower }}"
|
||||
|
||||
# K8s image pull policy (imagePullPolicy)
|
||||
k8s_image_pull_policy: IfNotPresent
|
||||
|
||||
|
||||
@@ -24,12 +24,3 @@
|
||||
|
||||
# Advertise Cluster IPs
|
||||
# calico_advertise_cluster_ips: true
|
||||
|
||||
# Choose data store type for calico: "etcd" or "kdd" (kubernetes datastore)
|
||||
# calico_datastore: "etcd"
|
||||
|
||||
# Use typha (only with kdd)
|
||||
# typha_enabled: false
|
||||
|
||||
# Number of typha replicas
|
||||
# typha_replicas: 1
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
# The Kubespray logo files are licensed under a choice of either Apache-2.0 or CC-BY-4.0 (Creative Commons Attribution 4.0 International).
|
||||
@@ -1,4 +0,0 @@
|
||||
# See the OWNERS docs at https://go.k8s.io/owners
|
||||
|
||||
approvers:
|
||||
- thomeced
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
@@ -1,80 +0,0 @@
|
||||
<svg width="165" height="140" xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata id="metadata8">image/svg+xml</metadata>
|
||||
<defs>
|
||||
<clipPath id="clipPath18" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path16" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath510" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path508" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath518" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path516" d="m80.333,608.499l52.426,0l0,-23.87l-52.426,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath534" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path532" d="m724.334,608.499l93.213,0l0,-23.87l-93.213,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect x="-1" y="-1" width="167" height="142" id="canvas_background" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="svg_2">
|
||||
<g id="g296" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path298" d="m94.554101,710.072549c1.045,-0.572 2.892,-1.582 3.936,-2.152c0.429,-0.235 1.126,-0.235 1.555,0l3.936,2.152c0.429,0.232 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.431,-0.235 -0.431,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g300" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path302" d="m99.666391,705.922159l0,-4.232c0,-0.491 0.348,-0.698 0.777,-0.461l3.936,2.152c0.43,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.347,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g304" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path306" d="m101.084301,699.754159c1.045,-0.572 2.891,-1.58 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.152c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g308" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path310" d="m106.196701,695.603729l0,-4.232c-0.001,-0.489 0.348,-0.696 0.778,-0.461l3.936,2.152c0.429,0.236 0.777,0.822 0.777,1.312l0,4.233c0,0.488 -0.348,0.695 -0.777,0.461c-1.045,-0.572 -2.891,-1.58 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g312" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path314" d="m107.334301,689.222939c1.045,-0.572 2.891,-1.582 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.152c0.428,0.232 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g316" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path318" d="m112.446701,685.072549l0,-4.232c-0.001,-0.491 0.348,-0.698 0.778,-0.461l3.936,2.152c0.429,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.348,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g320" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path322" d="m96.160501,689.222939c1.045,-0.572 2.892,-1.582 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.152c0.429,0.232 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g324" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path326" d="m101.273801,685.072549l0,-4.232c-0.001,-0.491 0.348,-0.698 0.777,-0.461l3.936,2.152c0.43,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.347,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g328" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path330" d="m89.834301,699.754159c1.045,-0.572 2.892,-1.58 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.152c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g332" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path334" d="m94.947601,695.603729l0,-4.232c-0.001,-0.489 0.348,-0.696 0.777,-0.461l3.936,2.152c0.43,0.236 0.777,0.822 0.777,1.312l0,4.233c0,0.488 -0.347,0.695 -0.777,0.461c-1.045,-0.572 -2.891,-1.58 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g336" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path338" d="m84.758211,689.222939c1.045,-0.572 2.891,-1.582 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.152c0.428,0.232 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g340" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path342" d="m89.870501,685.072549l0,-4.232c-0.001,-0.491 0.348,-0.698 0.778,-0.461l3.936,2.152c0.429,0.234 0.77699,0.822 0.77699,1.312l0,4.231c0,0.49 -0.348,0.697 -0.77699,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.43001,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g368" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path370" d="m42.914401,682.793249c2.115,1.223 5.543,1.223 7.661,0l12.443,-7.184c0.431,-0.248 0.839,-0.584 1.226,-0.959l14.191,7.756c2.909,1.59 2.909,4.166 0,5.756l-26.639,14.565c-2.907,1.589 -7.622,1.589 -10.529,0l-26.641,-14.565c-2.907,-1.59 -2.907,-4.166 0.001,-5.756c3.812,-2.082 9.198,-5.027 14.463,-7.904c0.429,0.441 0.892,0.824 1.382,1.107l12.442,7.184z" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g372" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path374" d="m81.133211,677.767859c-3.787,-2.07 -9.131,-4.992 -14.363,-7.854c0.051,-0.318 0.078,-0.632 0.078,-0.939l0,-14.369c0,-2.443 -1.713,-5.41 -3.83,-6.631l-12.443,-7.184c-0.403,-0.232 -0.864,-0.406 -1.343,-0.55l-0.001,-14.567c0,-3.314 2.357,-4.711 5.263,-3.121l26.64,14.569c2.907,1.589 5.265,5.566 5.265,8.878l0,28.647c0,3.312 -2.358,4.711 -5.266,3.121" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g376" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path378" d="m30.472001,647.974839c-2.114,1.221 -3.827,4.188 -3.827,6.631l0,14.369c0,0.258 0.029,0.525 0.066,0.793c-5.338,2.918 -10.828,5.92 -14.695,8.035c-2.908,1.59 -5.266,0.192 -5.266,-3.121l0,-28.639c0,-3.314 2.358,-7.289 5.265,-8.879l26.64,-14.57c2.906,-1.59 5.263,-0.191 5.263,3.121l-0.002,14.629c-0.353,0.125 -0.694,0.27 -1.002,0.447l-12.442,7.184z" fill-rule="nonzero" fill="#273945"/>
|
||||
</g>
|
||||
<g id="g380" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path382" d="m58.904701,652.707249c-2.338,1.277 -6.203,3.391 -8.982,4.908c-0.465,0.256 -0.908,0.496 -1.299,0.711c-1.123,0.613 -2.942,0.613 -4.065,0l-1.316,-0.719l-8.965,-4.9c-1.123,-0.613 -1.123,-1.607 0,-2.223l9.639,-5.269l0.642,-0.352c1.123,-0.613 2.942,-0.613 4.065,0l0.608,0.332l9.674,5.289c1.122,0.616 1.122,1.61 -0.001,2.223" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g384" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path386" d="m42.517901,662.119339c1.121,0.613 2.031,2.148 2.031,3.426l0,1.273l0,9.785c0,1.28 -0.909,1.81901 -2.031,1.205l-9.735,-5.324l-0.546,-0.299c-1.123,-0.613 -2.032,-2.148 -2.032,-3.427l0,-0.901l0,-10.156c0,-1.279 0.91,-1.818 2.032,-1.205c2.279,1.248 6.008,3.285 8.768,4.795c0.544,0.299 1.064,0.582 1.513,0.828" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g388" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path390" d="m60.914401,672.168249l-0.604,0.33l-9.679,5.293c-1.121,0.613 -2.031,0.076 -2.031,-1.205l0.001,-9.752l0,-1.303c0,-1.279 0.911,-2.814 2.032,-3.427c0.452,-0.247 0.975,-0.534 1.523,-0.832c2.76,-1.51 6.481,-3.543 8.758,-4.79c1.121,-0.611 2.031,-0.074 2.031,1.207l0,10.133l0,0.92c0,1.28 -0.91,2.813 -2.031,3.426" fill-rule="nonzero" fill="#273945"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
@@ -1,83 +0,0 @@
|
||||
<svg width="175" height="195" xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata id="metadata8">image/svg+xml</metadata>
|
||||
<defs>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
|
||||
<path d="m0,720l1280,0l0,-720l-1280,0l0,720z" id="path16"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath510">
|
||||
<path d="m0,720l1280,0l0,-720l-1280,0l0,720z" id="path508"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath518">
|
||||
<path d="m80.333,608.499l52.426,0l0,-23.87l-52.426,0l0,23.87z" id="path516"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath534">
|
||||
<path d="m724.334,608.499l93.213,0l0,-23.87l-93.213,0l0,23.87z" id="path532"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect fill="none" id="canvas_background" height="197" width="177" y="-1" x="-1"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="svg_1">
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g244">
|
||||
<path fill="#3d647f" fill-rule="nonzero" d="m120.688,602.382294l-43.031,-24.842c-6.374,-3.681 -16.707,-3.681 -23.082,0l-43.033,24.842c-6.375,3.68 -11.542,12.631 -11.542,19.992l0,49.688c0,7.358 5.167,16.312 11.542,19.992l43.033,24.843c6.375,3.682 16.708,3.682 23.082,0l43.031,-24.843c6.374,-3.68 11.541,-12.634 11.541,-19.992l0,-49.688c0,-7.361 -5.167,-16.312 -11.541,-19.992" id="path246"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g248">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m99.737805,687.627411c1.045,-0.571 2.892,-1.581 3.936,-2.151c0.429,-0.235 1.126,-0.235 1.555,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.431,-0.235 -0.431,-0.616 0,-0.85" id="path250"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g252">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m104.850095,683.477509l0,-4.232c0,-0.49 0.348,-0.697 0.777,-0.461l3.936,2.152c0.43,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.234 -0.777,-0.822 -0.777,-1.312" id="path254"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g256">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m106.268094,677.309601c1.045,-0.571 2.891,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" id="path258"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g260">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m111.380399,673.159698l0,-4.232c-0.001,-0.49 0.348,-0.697 0.778,-0.461l3.936,2.152c0.429,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.234 -0.778,-0.822 -0.778,-1.312" id="path262"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g264">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m112.518094,666.777802c1.045,-0.571 2.891,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" id="path266"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g268">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m117.630399,662.627899l0,-4.232c-0.001,-0.49 0.348,-0.697 0.778,-0.461l3.936,2.152c0.429,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.234 -0.778,-0.822 -0.778,-1.312" id="path270"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g272">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m101.344205,666.777802c1.045,-0.571 2.892,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" id="path274"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g276">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m106.457501,662.627899l0,-4.232c-0.001,-0.49 0.348,-0.697 0.777,-0.461l3.936,2.152c0.43,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.234 -0.777,-0.822 -0.777,-1.312" id="path278"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g280">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m95.018094,677.309601c1.045,-0.571 2.892,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" id="path282"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g284">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m100.131299,673.159698l0,-4.232c-0.001,-0.49 0.348,-0.697 0.777,-0.461l3.936,2.152c0.43,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.234 -0.777,-0.822 -0.777,-1.312" id="path286"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g288">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m89.941891,666.777802c1.045,-0.571 2.891,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" id="path290"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g292">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m95.054196,662.627899l0,-4.232c-0.001,-0.49 0.348,-0.697 0.778,-0.461l3.936,2.152c0.429,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.234 -0.778,-0.822 -0.778,-1.312" id="path294"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g344">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m48.098096,660.348114c2.115,1.223 5.543,1.223 7.661,0l12.443,-7.183c0.431,-0.249 0.839,-0.585 1.226,-0.96l14.191,7.757c2.909,1.589 2.909,4.166 0,5.756l-26.639,14.565c-2.907,1.59 -7.622,1.59 -10.529,0l-26.641,-14.565c-2.907,-1.59 -2.907,-4.166 0.001,-5.755c3.812,-2.084 9.198,-5.028 14.463,-7.905c0.429,0.441 0.892,0.825 1.382,1.107l12.442,7.183z" id="path346"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g348">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m86.316891,655.3237c-3.787,-2.071 -9.131,-4.993 -14.363,-7.854c0.051,-0.319 0.078,-0.633 0.078,-0.94l0,-14.368c0,-2.444 -1.713,-5.411 -3.83,-6.632l-12.443,-7.183c-0.403,-0.233 -0.864,-0.407 -1.343,-0.551l-0.001,-14.567c0,-3.313 2.357,-4.711 5.263,-3.121l26.64,14.57c2.907,1.589 5.265,5.565 5.265,8.878l0,28.646c0,3.314 -2.358,4.711 -5.266,3.122" id="path350"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g352">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m35.655797,625.529785c-2.114,1.221 -3.827,4.188 -3.827,6.632l0,14.368c0,0.259 0.029,0.526 0.066,0.794c-5.338,2.918 -10.828,5.92 -14.695,8.035c-2.908,1.589 -5.266,0.192 -5.266,-3.122l0,-28.638c0,-3.314 2.358,-7.289 5.265,-8.879l26.64,-14.569c2.906,-1.59 5.263,-0.193 5.263,3.121l-0.002,14.627c-0.353,0.126 -0.694,0.27 -1.002,0.448l-12.442,7.183z" id="path354"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g356">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m64.088399,630.262207c-2.338,1.278 -6.203,3.392 -8.982,4.91c-0.465,0.254 -0.908,0.496 -1.299,0.71c-1.123,0.613 -2.942,0.613 -4.065,0l-1.316,-0.72l-8.965,-4.9c-1.123,-0.613 -1.123,-1.607 0,-2.221l9.639,-5.27l0.642,-0.352c1.123,-0.614 2.942,-0.614 4.065,0l0.608,0.333l9.674,5.289c1.122,0.614 1.122,1.608 -0.001,2.221" id="path358"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g360">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m47.701695,639.674805c1.121,0.614 2.031,2.148 2.031,3.427l0,1.273l0,9.785c0,1.278 -0.909,1.818 -2.031,1.204l-9.735,-5.324l-0.546,-0.299c-1.123,-0.613 -2.032,-2.148 -2.032,-3.427l0,-0.9l0,-10.156c0,-1.279 0.91,-1.819 2.032,-1.205c2.279,1.247 6.008,3.285 8.768,4.795c0.544,0.297 1.064,0.581 1.513,0.827" id="path362"/>
|
||||
</g>
|
||||
<g transform="matrix(1.3333333,0,0,-1.3333333,0,960) " id="g364">
|
||||
<path fill="#ffffff" fill-rule="nonzero" d="m66.098096,649.724609l-0.604,0.33l-9.679,5.293c-1.121,0.613 -2.031,0.075 -2.031,-1.205l0.001,-9.753l0,-1.302c0,-1.279 0.911,-2.814 2.032,-3.428c0.452,-0.247 0.975,-0.533 1.523,-0.833c2.76,-1.508 6.481,-3.542 8.758,-4.788c1.121,-0.612 2.031,-0.074 2.031,1.206l0,10.133l0,0.92c0,1.279 -0.91,2.813 -2.031,3.427" id="path366"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -1,107 +0,0 @@
|
||||
<svg width="680" height="130" xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata id="metadata8">image/svg+xml</metadata>
|
||||
<defs>
|
||||
<clipPath id="clipPath18" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path16" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath510" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path508" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath518" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path516" d="m80.333,608.499l52.426,0l0,-23.87l-52.426,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath534" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path532" d="m724.334,608.499l93.213,0l0,-23.87l-93.213,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect x="-1" y="-1" width="682" height="132" id="canvas_background" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="svg_5">
|
||||
<g id="g124" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path126" d="m87.803987,716.822533c1.045,-0.572 2.892,-1.582 3.936,-2.152c0.429,-0.235 1.126,-0.235 1.555,0l3.936,2.152c0.429,0.232 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.431,-0.235 -0.431,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g128" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path130" d="m92.916287,712.672133l0,-4.232c0,-0.491 0.348,-0.698 0.777,-0.461l3.936,2.152c0.43,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.347,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g132" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path134" d="m94.334317,706.504233c1.045,-0.572 2.891,-1.58 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.152c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g136" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path138" d="m99.446627,702.353833l0,-4.232c-0.001,-0.489 0.348,-0.696 0.778,-0.461l3.936,2.152c0.429,0.236 0.777,0.822 0.777,1.312l0,4.233c0,0.488 -0.348,0.695 -0.777,0.461c-1.045,-0.572 -2.891,-1.58 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g140" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path142" d="m100.584317,695.972933c1.045,-0.572 2.891,-1.582 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.152c0.428,0.232 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g144" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path146" d="m105.696627,691.822533l0,-4.232c-0.001,-0.491 0.348,-0.698 0.778,-0.461l3.936,2.152c0.429,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.348,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g148" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path150" d="m89.410367,695.972933c1.045,-0.572 2.892,-1.582 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.152c0.429,0.232 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g152" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path154" d="m94.523717,691.822533l0,-4.232c-0.001,-0.491 0.348,-0.698 0.777,-0.461l3.936,2.152c0.43,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.347,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g156" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path158" d="m83.084317,706.504233c1.045,-0.572 2.892,-1.58 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.152c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g160" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path162" d="m88.197477,702.353833l0,-4.232c-0.001,-0.489 0.348,-0.696 0.777,-0.461l3.936,2.152c0.43,0.236 0.777,0.822 0.777,1.312l0,4.233c0,0.488 -0.347,0.695 -0.777,0.461c-1.045,-0.572 -2.891,-1.58 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g164" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path166" d="m78.008087,695.972933c1.045,-0.572 2.891,-1.582 3.936,-2.152c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.152c0.428,0.232 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.618 0,-0.85" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g168" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path170" d="m83.120397,691.822533l0,-4.232c-0.001,-0.491 0.34799,-0.698 0.778,-0.461l3.936,2.152c0.429,0.234 0.777,0.822 0.777,1.312l0,4.231c0,0.49 -0.348,0.697 -0.777,0.463c-1.045,-0.572 -2.891,-1.582 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g220" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path222" d="m36.164277,689.543233c2.115,1.223 5.543,1.223 7.661,0l12.443,-7.184c0.431,-0.248 0.839,-0.584 1.226,-0.959l14.191,7.756c2.909,1.59 2.909,4.166 0,5.756l-26.639,14.565c-2.907,1.589 -7.622,1.589 -10.529,0l-26.641,-14.565c-2.907,-1.59 -2.907,-4.166 0.001,-5.756c3.812,-2.082 9.198,-5.027 14.463,-7.904c0.429,0.441 0.892,0.824 1.382,1.107l12.442,7.184z" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g224" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path226" d="m74.383087,684.517933c-3.787,-2.07 -9.131,-4.992 -14.363,-7.854c0.051,-0.318 0.078,-0.632 0.078,-0.939l0,-14.369c0,-2.443 -1.713,-5.41 -3.83,-6.631l-12.443,-7.184c-0.403,-0.232 -0.864,-0.406 -1.343,-0.55l-0.001,-14.567c0,-3.314 2.357,-4.711 5.263,-3.121l26.64,14.569c2.907,1.589 5.265,5.566 5.265,8.878l0,28.647c0,3.312 -2.358,4.711 -5.266,3.121" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g228" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path230" d="m23.722017,654.724933c-2.114,1.221 -3.827,4.188 -3.827,6.631l0,14.369c0,0.258 0.029,0.525 0.066,0.793c-5.338,2.918 -10.828,5.92 -14.695,8.035c-2.908,1.59 -5.266,0.192 -5.266,-3.121l0,-28.639c0,-3.314 2.358,-7.289 5.265,-8.879l26.64,-14.57c2.906,-1.59 5.263,-0.191 5.263,3.121l-0.002,14.629c-0.353,0.125 -0.694,0.27 -1.002,0.447l-12.442,7.184z" fill-rule="nonzero" fill="#273945"/>
|
||||
</g>
|
||||
<g id="g232" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path234" d="m52.154577,659.457333c-2.338,1.277 -6.203,3.391 -8.982,4.908c-0.46501,0.256 -0.908,0.496 -1.299,0.711c-1.123,0.613 -2.942,0.613 -4.06501,0l-1.316,-0.719l-8.965,-4.9c-1.123,-0.613 -1.123,-1.607 0,-2.223l9.639,-5.269l0.642,-0.352c1.12301,-0.613 2.94201,-0.613 4.06501,0l0.60799,0.332l9.674,5.289c1.122,0.616 1.122,1.61 -0.00099,2.223" fill-rule="nonzero" fill="#518db5"/>
|
||||
</g>
|
||||
<g id="g236" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path238" d="m35.767917,668.869433c1.121,0.613 2.031,2.148 2.031,3.426l0,1.273l0,9.785c0,1.28 -0.909,1.819 -2.031,1.205l-9.735,-5.324l-0.546,-0.299c-1.123,-0.613 -2.032,-2.148 -2.032,-3.427l0,-0.901l0,-10.156c0,-1.279 0.91,-1.818 2.032,-1.205c2.279,1.248 6.008,3.285 8.768,4.795c0.544,0.299 1.064,0.582 1.513,0.828" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g240" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path242" d="m54.164277,678.918233l-0.604,0.33l-9.679,5.293c-1.121,0.613 -2.031,0.076 -2.031,-1.205l0.001,-9.752l0,-1.303c0,-1.279 0.911,-2.814 2.032,-3.427c0.452,-0.247 0.975,-0.534 1.523,-0.832c2.76,-1.51 6.481,-3.543 8.758,-4.79c1.121,-0.611 2.031,-0.074 2.031,1.207l0,10.133l0,0.92c0,1.28 -0.91,2.813 -2.031,3.426" fill-rule="nonzero" fill="#273945"/>
|
||||
</g>
|
||||
<g id="g464" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path466" d="m133.525727,689.519833l4.193,0c1.5,0 2.723,-1.217 2.723,-2.723l0,-13.179c0,-1.504 0.852,-1.854 1.904,-0.78l14.459,14.739c1.049,1.074 3.124,1.943 4.629,1.943l6.516,0c1.504,0 1.861,-0.863 0.803,-1.93l-14.764,-14.83c-1.059,-1.066 -1.218,-2.926 -0.352,-4.154l16.662,-23.59c0.868,-1.228 0.352,-2.223 -1.153,-2.223l-5.85,0c-1.504,0 -3.422,1 -4.287,2.229l-12.158,17.367c-0.861,1.231 -2.425,1.369 -3.489,0.309l-0.994,-0.991c-1.064,-1.06 -1.926,-3.138 -1.926,-4.644l0,-11.545c0,-1.506 -1.223,-2.725 -2.723,-2.725l-4.193,0c-1.502,0 -2.723,1.219 -2.723,2.725l0,41.279c0,1.506 1.221,2.723 2.723,2.723" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g468" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path470" d="m179.244417,646.090133c-3.145,2.725 -4.719,6.639 -4.719,11.734l0,28.973c0,1.506 1.221,2.723 2.723,2.723l4.191,0c1.502,0 2.723,-1.217 2.723,-2.723l0,-28.973c0,-2.441 0.673,-4.425 2.023,-5.947c1.354,-1.525 3.646,-2.287 6.88,-2.287c3.058,0 5.316,0.783 6.779,2.352c1.463,1.568 2.19,3.574 2.19,6.015l0,28.84c0,1.506 1.218,2.723 2.724,2.723l4.191,0c1.505,0 2.723,-1.217 2.723,-2.723l0,-28.973c0,-5.009 -1.54,-8.898 -4.619,-11.664c-3.078,-2.771 -7.676,-4.154 -13.788,-4.154c-6.203,0 -10.876,1.361 -14.021,4.084" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g472" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path474" d="m230.939667,650.633133l8.374,0c2.346,0 4.175,0.58 5.481,1.734c1.305,1.155 1.959,2.692 1.959,4.606c0,2.223 -0.73,3.898 -2.193,5.031c-1.46,1.135 -3.3,1.701 -5.513,1.701l-8.108,0c-1.505,0 -2.723,-1.218 -2.723,-2.722l0,-7.627c0,-1.504 1.218,-2.723 2.723,-2.723m12.825,21.504c1.285,0.957 1.926,2.351 1.926,4.18c0,0.839 -0.142,1.589 -0.425,2.25c-0.503,1.17 -2.359,2.574 -3.782,2.939c-0.784,0.201 -1.662,0.303 -2.635,0.303l-7.909,0c-1.505,0 -2.723,-1.219 -2.723,-2.725l0,-5.664c0,-1.504 1.218,-2.723 2.723,-2.723l7.71,0c2.125,0 3.829,0.479 5.115,1.44m-22.462,17.383l18.543,0c2.566,0 4.816,-0.295 6.744,-0.883c1.925,-0.588 3.507,-1.428 4.749,-2.516c2.527,-2.222 3.789,-5.142 3.789,-8.756c0,-2.4 -0.675,-4.369 -2.026,-5.916c-0.81,-0.925 -1.784,-1.709 -2.92,-2.345c-1.313,-0.739 -2.497,-1.129 -2.497,-1.186c0,-0.053 1.197,-0.39 2.535,-1.078c1.521,-0.781 2.81,-1.85 3.877,-3.199c1.616,-2.051 2.429,-4.508 2.429,-7.387c0,-2.223 -0.346,-4.105 -1.033,-5.652c-0.683,-1.549 -1.741,-2.91 -3.157,-4.084c-1.373,-1.176 -3.079,-2.092 -5.116,-2.746c-2.037,-0.655 -4.319,-0.979 -6.845,-0.979l-19.072,0c-1.505,0 -2.722,1.219 -2.722,2.725l0,41.279c0,1.506 1.217,2.723 2.722,2.723" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g476" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path478" d="m264.892917,689.519833l29.508,0c1.504,0 2.722,-1.217 2.722,-2.723l0,-2.527c0,-1.504 -1.218,-2.723 -2.722,-2.723l-19.871,0c-1.504,0 -2.723,-1.216 -2.723,-2.722l0,-5.012c0,-1.506 1.219,-2.725 2.723,-2.725l16.748,0c1.506,0 2.722,-1.216 2.722,-2.722l0,-2.33c0,-1.504 -1.216,-2.723 -2.722,-2.723l-16.748,0c-1.504,0 -2.723,-1.217 -2.723,-2.725l0,-7.162c0,-1.506 1.219,-2.722 2.723,-2.722l20.068,0c1.504,0 2.721,-1.219 2.721,-2.725l0,-2.461c0,-1.506 -1.217,-2.725 -2.721,-2.725l-29.705,0c-1.504,0 -2.723,1.219 -2.723,2.725l0,41.279c0,1.506 1.219,2.723 2.723,2.723" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g480" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path482" d="m306.392917,645.767933c-2.852,2.168 -4.607,5.09 -5.266,8.764c-0.265,1.478 0.936,2.701 2.442,2.701l3.988,0c1.506,0 2.822,-1.235 3.33,-2.649c0.531,-1.482 1.352,-2.611 2.449,-3.392c1.684,-1.201 4.231,-1.797 7.641,-1.797c1.24,0 2.416,0.105 3.523,0.324c1.108,0.217 2.082,0.569 2.924,1.047c0.842,0.479 1.518,1.102 2.026,1.861c0.509,0.76 0.763,1.686 0.763,2.778c0,1.133 -0.275,2.068 -0.83,2.812c-0.552,0.739 -1.34,1.362 -2.359,1.862c-1.018,0.5 -2.248,0.935 -3.686,1.308c-1.439,0.367 -3.068,0.748 -4.882,1.143c-2.127,0.478 -4.178,1.011 -6.149,1.599c-1.971,0.588 -3.699,1.383 -5.184,2.387c-1.482,1.002 -2.679,2.287 -3.585,3.856c-0.911,1.568 -1.364,3.572 -1.364,6.011c0,2.309 0.453,4.334 1.364,6.08c0.906,1.741 2.169,3.201 3.787,4.377c1.617,1.178 3.529,2.059 5.748,2.649c2.213,0.588 4.652,0.879 7.308,0.879c5.362,0 9.668,-1.241 12.924,-3.725c2.609,-1.988 4.285,-4.707 5.029,-8.15c0.321,-1.471 -0.834,-2.698 -2.336,-2.698l-3.789,0c-1.505,0 -2.793,1.254 -3.42,2.619c-0.5,1.094 -1.242,1.985 -2.23,2.676c-1.682,1.176 -3.766,1.764 -6.244,1.764c-2.615,0 -4.695,-0.5 -6.248,-1.502c-1.551,-1.004 -2.324,-2.332 -2.324,-3.986c0,-0.961 0.211,-1.756 0.63,-2.387c0.42,-0.633 1.063,-1.188 1.928,-1.666c0.867,-0.479 1.936,-0.895 3.223,-1.242c1.285,-0.348 2.81,-0.719 4.586,-1.112c2.435,-0.521 4.726,-1.101 6.875,-1.73c2.15,-0.635 4.031,-1.473 5.648,-2.518c1.617,-1.045 2.891,-2.373 3.823,-3.984c0.929,-1.617 1.394,-3.686 1.394,-6.211c0,-2.352 -0.465,-4.453 -1.394,-6.309c-0.932,-1.849 -2.215,-3.398 -3.854,-4.636c-1.641,-1.241 -3.59,-2.192 -5.848,-2.846c-2.261,-0.648 -4.718,-0.978 -7.377,-0.978c-6.466,0 -11.463,1.339 -14.984,4.021" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g484" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path486" d="m358.320587,667.430033l7.246,0c2.524,0 4.44,0.631 5.744,1.896c1.307,1.262 1.961,2.961 1.961,5.098c0,2.221 -0.666,3.92 -1.992,5.098c-1.33,1.176 -3.189,1.763 -5.58,1.763l-7.379,0c-1.504,0 -2.721,-1.218 -2.721,-2.724l0,-8.408c0,-1.504 1.217,-2.723 2.721,-2.723m-9.969,22.09l18.145,0c2.791,0 5.203,-0.383 7.238,-1.143c2.039,-0.763 3.768,-1.843 5.186,-3.236c1.328,-1.352 2.369,-2.92 3.125,-4.705c0.752,-1.787 1.13,-3.77 1.13,-5.947c0,-2.221 -0.367,-4.239 -1.101,-6.045c-0.731,-1.809 -1.77,-3.358 -3.121,-4.641c-1.354,-1.285 -3.012,-2.289 -4.983,-3.006c-1.972,-0.719 -4.199,-1.08 -6.679,-1.08l-8.971,0c-1.504,0 -2.721,-1.219 -2.721,-2.723l0,-11.476c0,-1.506 -1.218,-2.725 -2.724,-2.725l-4.524,0c-1.502,0 -2.722,1.219 -2.722,2.725l0,41.279c0,1.506 1.22,2.723 2.722,2.723" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g488" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path490" d="m400.314667,668.867533l7.51,0c2.658,0 4.627,0.6 5.914,1.799c1.285,1.197 1.926,2.734 1.926,4.605c0,1.918 -0.62,3.498 -1.86,4.739c-1.24,1.242 -3.144,1.861 -5.713,1.861l-7.777,0c-1.504,0 -2.721,-1.217 -2.721,-2.723l0,-7.556c0,-1.506 1.217,-2.725 2.721,-2.725m-9.635,20.652l19.071,0c2.304,0 4.398,-0.316 6.281,-0.949c1.883,-0.631 3.488,-1.514 4.816,-2.646c1.328,-1.133 2.358,-2.494 3.09,-4.084c0.732,-1.59 1.098,-3.368 1.098,-5.327c0,-2.744 -0.688,-5.107 -2.061,-7.089c-0.955,-1.381 -2.316,-2.479 -4.086,-3.297c-1.361,-0.633 -2.558,-0.963 -2.558,-1.016c0,-0.053 1.201,-0.387 2.519,-1.109c0.996,-0.545 1.83,-1.223 2.498,-2.03c1.174,-1.416 1.912,-3.537 2.227,-6.373c0.174,-1.654 0.297,-3.189 0.363,-4.605c0.066,-1.414 0.141,-2.732 0.203,-3.826c0.029,-0.533 0.016,-0.967 0.016,-1.688c0,-1.64 -1.203,-2.687 -2.656,-2.687l-3.125,0c-1.504,0 -2.641,0.047 -3.012,2.719c-0.043,0.316 -0.092,0.65 -0.129,1.005c-0.111,1.004 -0.211,2.112 -0.303,3.334c-0.086,1.217 -0.174,2.461 -0.262,3.723c-0.222,2.574 -1.076,4.541 -2.56,5.914c-1.484,1.373 -3.732,2.059 -6.742,2.059l-5.053,0c-1.504,0 -2.721,-1.219 -2.721,-2.723l0,-13.307c0,-1.505 -1.218,-2.724 -2.724,-2.724l-4.19,0c-1.506,0 -2.724,1.219 -2.724,2.724l0,41.28c0,1.506 1.218,2.722 2.724,2.722" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g492" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path494" d="m445.963227,659.976833l7.113,0c1.504,0 2.358,1.166 1.903,2.598l-3.432,10.867c-0.223,0.609 -0.434,1.33 -0.633,2.158c-0.197,0.826 -0.408,1.611 -0.629,2.352c-0.115,0.439 -0.226,0.886 -0.338,1.338c-0.183,0.742 -0.582,0.767 -0.814,0.021c-0.143,-0.459 -0.266,-0.912 -0.377,-1.359c-0.221,-0.741 -0.432,-1.526 -0.631,-2.352c-0.199,-0.828 -0.41,-1.549 -0.633,-2.158l-3.431,-10.867c-0.453,-1.432 0.398,-2.598 1.902,-2.598m1.396,29.543l4.524,0c1.5,0 3.133,-1.148 3.639,-2.563l14.906,-41.599c0.512,-1.416 -0.297,-2.565 -1.803,-2.565l-4.588,0c-1.5,0 -3.095,1.161 -3.554,2.59l-1.524,4.75c-0.461,1.432 -2.051,2.596 -3.557,2.596l-11.697,0c-1.502,0 -3.086,-1.164 -3.539,-2.602l-1.492,-4.738c-0.447,-1.435 -2.033,-2.596 -3.539,-2.596l-4.32,0c-1.504,0 -2.317,1.149 -1.815,2.565l14.727,41.596c0.504,1.418 2.131,2.566 3.632,2.566" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g496" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path498" d="m480.463227,663.215133l-13.184,23.92c-0.722,1.318 -0.095,2.385 1.411,2.385l5.052,0c1.504,0 3.283,-1.082 3.975,-2.416l5.926,-11.438c0.353,-0.742 0.715,-1.496 1.095,-2.256c0.375,-0.763 0.719,-1.47 1.028,-2.125c0.176,-0.384 0.343,-0.761 0.506,-1.136c0.277,-0.635 0.808,-0.668 1.132,-0.034c0.198,0.385 0.377,0.774 0.559,1.17c0.307,0.655 0.648,1.362 1.027,2.125c0.377,0.76 0.743,1.514 1.098,2.256l5.809,11.426c0.683,1.34 2.453,2.428 3.955,2.428l4.656,0c1.506,0 2.133,-1.067 1.41,-2.385l-13.189,-23.92c-0.723,-1.316 -1.313,-3.605 -1.313,-5.109l0,-12.588c0,-1.506 -1.221,-2.725 -2.724,-2.725l-4.188,0c-1.504,0 -2.723,1.219 -2.723,2.725l0,12.588c0,1.504 -0.588,3.793 -1.318,5.109" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -1,110 +0,0 @@
|
||||
<svg width="720" height="190" xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata id="metadata8">image/svg+xml</metadata>
|
||||
<defs>
|
||||
<clipPath id="clipPath18" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path16" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath510" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path508" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath518" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path516" d="m80.333,608.499l52.426,0l0,-23.87l-52.426,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath534" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path532" d="m724.334,608.499l93.213,0l0,-23.87l-93.213,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect x="-1" y="-1" width="722" height="192" id="canvas_background" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="svg_4">
|
||||
<g id="g24" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path26" d="m540.000026,586.999012c0,-6.625 -5.373,-11.998 -12,-11.998l-516,0c-6.628,0 -12,5.373 -12,11.998l0,121.001c0,6.628 5.372,12 12,12l516,0c6.627,0 12,-5.372 12,-12l0,-121.001z" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g76" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path78" d="m103.444306,693.579102c1.045,-0.571 2.892,-1.58 3.936,-2.151c0.429,-0.236 1.126,-0.236 1.555,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.431,-0.235 -0.431,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g80" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path82" d="m108.556606,689.428712l0,-4.231c0,-0.49 0.348,-0.697 0.777,-0.462l3.936,2.153c0.43,0.235 0.777,0.821 0.777,1.311l0,4.233c0,0.488 -0.347,0.695 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g84" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path86" d="m109.974636,683.260712c1.045,-0.57 2.891,-1.58 3.936,-2.15c0.429,-0.236 1.127,-0.236 1.555,0l3.937,2.15c0.428,0.234 0.428,0.615 0,0.851l-3.937,2.151c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.151c-0.43,-0.236 -0.43,-0.617 0,-0.851" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g88" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path90" d="m115.086946,679.111302l0,-4.231c-0.001,-0.491 0.348,-0.698 0.778,-0.462l3.936,2.153c0.429,0.234 0.777,0.821 0.777,1.311l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.57 -2.891,-1.58 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g92" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path94" d="m116.224636,672.729492c1.045,-0.571 2.891,-1.58 3.936,-2.151c0.429,-0.236 1.127,-0.236 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g96" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path98" d="m121.336946,668.579102l0,-4.231c-0.001,-0.49 0.348,-0.697 0.778,-0.462l3.936,2.153c0.429,0.235 0.777,0.821 0.777,1.311l0,4.233c0,0.488 -0.348,0.695 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g100" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path102" d="m105.050686,672.729492c1.045,-0.571 2.892,-1.58 3.936,-2.151c0.429,-0.236 1.127,-0.236 1.556,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g104" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path106" d="m110.164036,668.579102l0,-4.231c-0.001,-0.49 0.348,-0.697 0.777,-0.462l3.936,2.153c0.43,0.235 0.777,0.821 0.777,1.311l0,4.233c0,0.488 -0.347,0.695 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.313" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g108" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path110" d="m98.724636,683.260712c1.045,-0.57 2.892,-1.58 3.936,-2.15c0.429,-0.236 1.127,-0.236 1.556,0l3.936,2.15c0.429,0.234 0.429,0.615 0,0.851l-3.936,2.151c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.151c-0.43,-0.236 -0.43,-0.617 0,-0.851" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g112" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path114" d="m103.837796,679.111302l0,-4.231c-0.001,-0.491 0.348,-0.698 0.777,-0.462l3.936,2.153c0.43,0.234 0.777,0.821 0.777,1.311l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.57 -2.891,-1.58 -3.936,-2.152c-0.429,-0.235 -0.777,-0.823 -0.777,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g116" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path118" d="m93.648406,672.729492c1.045,-0.571 2.891,-1.58 3.936,-2.151c0.429,-0.236 1.127,-0.236 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g120" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path122" d="m98.760716,668.579102l0,-4.231c-0.001,-0.49 0.34799,-0.697 0.778,-0.462l3.936,2.153c0.429,0.235 0.777,0.821 0.777,1.311l0,4.233c0,0.488 -0.348,0.695 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.235 -0.778,-0.823 -0.778,-1.313" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g196" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path198" d="m51.804596,666.299802c2.115,1.223 5.543,1.223 7.661,0l12.443,-7.183c0.431,-0.249 0.839,-0.585 1.226,-0.96l14.191,7.757c2.909,1.589 2.909,4.166 0,5.756l-26.639,14.566c-2.907,1.589 -7.622,1.589 -10.529,0l-26.641,-14.566c-2.907,-1.59 -2.907,-4.167 0.001,-5.755c3.812,-2.084 9.198,-5.027 14.463,-7.905c0.429,0.441 0.892,0.825 1.382,1.107l12.442,7.183z" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g200" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path202" d="m90.023406,661.275392c-3.787,-2.071 -9.131,-4.993 -14.363,-7.854c0.051,-0.319 0.078,-0.633 0.078,-0.94l0,-14.367c0,-2.445 -1.713,-5.412 -3.83,-6.633l-12.443,-7.184c-0.403,-0.232 -0.864,-0.406 -1.343,-0.55l-0.001,-14.567c0,-3.314 2.357,-4.711 5.263,-3.121l26.64,14.569c2.907,1.589 5.265,5.566 5.265,8.878l0,28.647c0,3.314 -2.358,4.711 -5.266,3.122" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g204" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path206" d="m39.362336,631.481402c-2.114,1.221 -3.827,4.188 -3.827,6.633l0,14.367c0,0.26 0.029,0.525 0.066,0.793c-5.338,2.92 -10.828,5.921 -14.695,8.035c-2.908,1.59 -5.266,0.193 -5.266,-3.121l0,-28.639c0,-3.312 2.358,-7.289 5.265,-8.879l26.64,-14.568c2.906,-1.59 5.263,-0.193 5.263,3.121l-0.002,14.627c-0.353,0.125 -0.694,0.27 -1.002,0.447l-12.442,7.184z" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g208" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path210" d="m67.794896,636.213802c-2.338,1.277 -6.203,3.391 -8.982,4.91c-0.46501,0.254 -0.908,0.496 -1.299,0.709c-1.123,0.613 -2.942,0.613 -4.06501,0l-1.316,-0.719l-8.965,-4.9c-1.123,-0.613 -1.123,-1.607 0,-2.221l9.639,-5.271l0.642,-0.352c1.12301,-0.613 2.94201,-0.613 4.06501,0l0.60799,0.334l9.674,5.289c1.122,0.614 1.122,1.608 -0.00099,2.221" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g212" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path214" d="m51.408236,645.625912c1.121,0.615 2.031,2.148 2.031,3.428l0,1.273l0,9.784c0,1.279 -0.909,1.818 -2.031,1.204l-9.735,-5.324l-0.546,-0.299c-1.123,-0.613 -2.032,-2.148 -2.032,-3.427l0,-0.899l0,-10.158c0,-1.277 0.91,-1.818 2.032,-1.203c2.279,1.246 6.008,3.283 8.768,4.795c0.544,0.297 1.064,0.58 1.513,0.826" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g216" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path218" d="m69.804596,655.676692l-0.604,0.33l-9.679,5.293c-1.121,0.613 -2.031,0.074 -2.031,-1.205l0.001,-9.754l0,-1.303c0,-1.277 0.911,-2.812 2.032,-3.427c0.452,-0.247 0.975,-0.534 1.523,-0.832c2.76,-1.508 6.481,-3.543 8.758,-4.788c1.121,-0.613 2.031,-0.074 2.031,1.206l0,10.132l0,0.92c0,1.28 -0.91,2.813 -2.031,3.428" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g428" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path430" d="m152.831996,670.962892l4.194,0c1.499,0 2.723,-1.218 2.723,-2.723l0,-13.178c0,-1.506 0.851,-1.854 1.903,-0.78l14.459,14.738c1.05,1.075 3.125,1.943 4.629,1.943l6.516,0c1.505,0 1.861,-0.863 0.803,-1.931l-14.764,-14.83c-1.059,-1.066 -1.217,-2.926 -0.352,-4.154l16.663,-23.588c0.868,-1.228 0.352,-2.223 -1.153,-2.223l-5.85,0c-1.505,0 -3.423,1 -4.287,2.229l-12.158,17.365c-0.861,1.233 -2.426,1.369 -3.489,0.309l-0.995,-0.989c-1.063,-1.06 -1.925,-3.14 -1.925,-4.644l0,-11.547c0,-1.506 -1.224,-2.723 -2.723,-2.723l-4.194,0c-1.502,0 -2.723,1.217 -2.723,2.723l0,41.28c0,1.505 1.221,2.723 2.723,2.723" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g432" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path434" d="m198.551726,627.534102c-3.146,2.723 -4.72,6.639 -4.72,11.732l0,28.974c0,1.505 1.221,2.723 2.723,2.723l4.191,0c1.502,0 2.723,-1.218 2.723,-2.723l0,-28.974c0,-2.441 0.674,-4.423 2.023,-5.945c1.354,-1.527 3.647,-2.287 6.881,-2.287c3.057,0 5.315,0.781 6.778,2.35c1.463,1.57 2.191,3.574 2.191,6.015l0,28.841c0,1.505 1.217,2.723 2.723,2.723l4.191,0c1.506,0 2.723,-1.218 2.723,-2.723l0,-28.974c0,-5.009 -1.539,-8.898 -4.619,-11.664c-3.077,-2.769 -7.675,-4.152 -13.787,-4.152c-6.203,0 -10.877,1.361 -14.021,4.084" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g436" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path438" d="m250.246006,632.077102l8.375,0c2.346,0 4.174,0.578 5.48,1.732c1.305,1.155 1.959,2.692 1.959,4.606c0,2.225 -0.73,3.898 -2.193,5.033c-1.459,1.133 -3.299,1.699 -5.512,1.699l-8.109,0c-1.504,0 -2.723,-1.216 -2.723,-2.72l0,-7.627c0,-1.506 1.219,-2.723 2.723,-2.723m12.826,21.502c1.285,0.959 1.926,2.352 1.926,4.182c0,0.839 -0.143,1.589 -0.426,2.249c-0.502,1.171 -2.359,2.575 -3.781,2.938c-0.785,0.202 -1.662,0.303 -2.635,0.303l-7.91,0c-1.504,0 -2.723,-1.217 -2.723,-2.723l0,-5.664c0,-1.506 1.219,-2.723 2.723,-2.723l7.711,0c2.125,0 3.828,0.479 5.115,1.438m-22.463,17.384l18.543,0c2.567,0 4.817,-0.295 6.744,-0.882c1.926,-0.588 3.508,-1.428 4.75,-2.516c2.526,-2.223 3.789,-5.143 3.789,-8.758c0,-2.398 -0.675,-4.369 -2.027,-5.914c-0.81,-0.927 -1.783,-1.709 -2.92,-2.347c-1.312,-0.737 -2.496,-1.127 -2.496,-1.184c0,-0.053 1.197,-0.39 2.535,-1.08c1.52,-0.781 2.809,-1.848 3.877,-3.199c1.615,-2.051 2.428,-4.508 2.428,-7.385c0,-2.225 -0.346,-4.105 -1.033,-5.654c-0.682,-1.547 -1.74,-2.908 -3.157,-4.084c-1.373,-1.176 -3.078,-2.09 -5.115,-2.744c-2.037,-0.655 -4.32,-0.979 -6.845,-0.979l-19.073,0c-1.504,0 -2.722,1.217 -2.722,2.723l0,41.28c0,1.505 1.218,2.723 2.722,2.723" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g440" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path442" d="m284.199186,670.962892l29.508,0c1.504,0 2.722,-1.218 2.722,-2.723l0,-2.526c0,-1.505 -1.218,-2.723 -2.722,-2.723l-19.871,0c-1.504,0 -2.723,-1.218 -2.723,-2.722l0,-5.014c0,-1.504 1.219,-2.723 2.723,-2.723l16.748,0c1.506,0 2.722,-1.218 2.722,-2.722l0,-2.33c0,-1.506 -1.216,-2.723 -2.722,-2.723l-16.748,0c-1.504,0 -2.723,-1.219 -2.723,-2.725l0,-7.164c0,-1.504 1.219,-2.722 2.723,-2.722l20.068,0c1.504,0 2.721,-1.219 2.721,-2.723l0,-2.463c0,-1.506 -1.217,-2.723 -2.721,-2.723l-29.705,0c-1.504,0 -2.723,1.217 -2.723,2.723l0,41.28c0,1.505 1.219,2.723 2.723,2.723" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g444" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path446" d="m325.699186,627.209902c-2.852,2.17 -4.607,5.09 -5.266,8.764c-0.265,1.478 0.936,2.703 2.442,2.703l3.988,0c1.506,0 2.822,-1.235 3.33,-2.649c0.531,-1.484 1.352,-2.611 2.449,-3.392c1.684,-1.203 4.231,-1.799 7.641,-1.799c1.24,0 2.416,0.107 3.523,0.324c1.108,0.219 2.082,0.57 2.924,1.047c0.842,0.481 1.518,1.102 2.026,1.863c0.509,0.76 0.763,1.686 0.763,2.776c0,1.133 -0.275,2.07 -0.83,2.812c-0.552,0.74 -1.34,1.364 -2.359,1.864c-1.018,0.5 -2.248,0.935 -3.686,1.306c-1.439,0.369 -3.068,0.75 -4.882,1.143c-2.127,0.478 -4.178,1.013 -6.149,1.601c-1.971,0.588 -3.699,1.383 -5.184,2.385c-1.482,1.002 -2.679,2.287 -3.585,3.857c-0.911,1.569 -1.364,3.571 -1.364,6.012c0,2.308 0.453,4.334 1.364,6.079c0.906,1.742 2.169,3.202 3.787,4.377c1.617,1.178 3.529,2.058 5.748,2.649c2.213,0.587 4.652,0.88 7.308,0.88c5.362,0 9.668,-1.243 12.924,-3.726c2.609,-1.989 4.285,-4.706 5.029,-8.149c0.321,-1.472 -0.834,-2.698 -2.336,-2.698l-3.789,0c-1.505,0 -2.793,1.253 -3.42,2.619c-0.5,1.094 -1.242,1.985 -2.23,2.676c-1.682,1.175 -3.766,1.763 -6.244,1.763c-2.615,0 -4.695,-0.5 -6.248,-1.503c-1.551,-1.002 -2.324,-2.332 -2.324,-3.986c0,-0.959 0.211,-1.756 0.63,-2.385c0.42,-0.633 1.063,-1.19 1.928,-1.668c0.867,-0.479 1.936,-0.893 3.223,-1.242c1.285,-0.348 2.81,-0.717 4.586,-1.112c2.435,-0.521 4.726,-1.099 6.875,-1.73c2.15,-0.633 4.031,-1.471 5.648,-2.516c1.617,-1.045 2.891,-2.375 3.823,-3.986c0.929,-1.615 1.394,-3.684 1.394,-6.211c0,-2.35 -0.465,-4.451 -1.394,-6.307c-0.932,-1.851 -2.215,-3.398 -3.854,-4.638c-1.641,-1.239 -3.59,-2.192 -5.848,-2.844c-2.261,-0.65 -4.718,-0.98 -7.377,-0.98c-6.466,0 -11.463,1.341 -14.984,4.021" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g448" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path450" d="m377.626926,648.873992l7.246,0c2.524,0 4.44,0.629 5.744,1.895c1.307,1.263 1.961,2.962 1.961,5.097c0,2.222 -0.666,3.921 -1.992,5.098c-1.33,1.176 -3.189,1.764 -5.58,1.764l-7.379,0c-1.504,0 -2.721,-1.217 -2.721,-2.723l0,-8.408c0,-1.506 1.217,-2.723 2.721,-2.723m-9.969,22.089l18.145,0c2.791,0 5.203,-0.382 7.238,-1.143c2.039,-0.763 3.768,-1.843 5.186,-3.236c1.328,-1.351 2.369,-2.92 3.125,-4.704c0.752,-1.787 1.13,-3.772 1.13,-5.949c0,-2.221 -0.367,-4.237 -1.101,-6.045c-0.731,-1.809 -1.77,-3.356 -3.121,-4.641c-1.354,-1.283 -3.012,-2.287 -4.983,-3.006c-1.972,-0.717 -4.199,-1.078 -6.679,-1.078l-8.971,0c-1.504,0 -2.721,-1.219 -2.721,-2.725l0,-11.476c0,-1.506 -1.218,-2.723 -2.724,-2.723l-4.524,0c-1.502,0 -2.722,1.217 -2.722,2.723l0,41.28c0,1.505 1.22,2.723 2.722,2.723" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g452" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path454" d="m419.621006,650.311492l7.51,0c2.658,0 4.627,0.598 5.914,1.799c1.285,1.195 1.926,2.732 1.926,4.605c0,1.917 -0.62,3.496 -1.86,4.739c-1.24,1.242 -3.144,1.861 -5.713,1.861l-7.777,0c-1.504,0 -2.721,-1.219 -2.721,-2.723l0,-7.558c0,-1.504 1.217,-2.723 2.721,-2.723m-9.635,20.651l19.071,0c2.304,0 4.398,-0.315 6.281,-0.949c1.883,-0.63 3.488,-1.513 4.816,-2.645c1.328,-1.133 2.358,-2.494 3.09,-4.084c0.732,-1.59 1.098,-3.368 1.098,-5.327c0,-2.746 -0.688,-5.109 -2.061,-7.089c-0.955,-1.381 -2.316,-2.479 -4.086,-3.299c-1.361,-0.633 -2.558,-0.961 -2.558,-1.016c0,-0.053 1.201,-0.385 2.519,-1.109c0.996,-0.545 1.83,-1.223 2.498,-2.028c1.174,-1.416 1.912,-3.539 2.227,-6.373c0.174,-1.654 0.297,-3.191 0.363,-4.605c0.066,-1.416 0.141,-2.732 0.203,-3.826c0.031,-0.533 0.016,-0.969 0.016,-1.688c0,-1.64 -1.203,-2.687 -2.656,-2.687l-3.125,0c-1.502,0 -2.641,0.047 -3.012,2.719c-0.043,0.314 -0.09,0.648 -0.129,1.003c-0.111,1.006 -0.211,2.112 -0.303,3.334c-0.086,1.219 -0.174,2.463 -0.262,3.723c-0.222,2.574 -1.076,4.543 -2.56,5.914c-1.484,1.373 -3.732,2.059 -6.742,2.059l-5.053,0c-1.504,0 -2.721,-1.217 -2.721,-2.723l0,-13.307c0,-1.505 -1.218,-2.722 -2.724,-2.722l-4.19,0c-1.506,0 -2.724,1.217 -2.724,2.722l0,41.281c0,1.505 1.218,2.722 2.724,2.722" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g456" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path458" d="m465.269496,641.420902l7.113,0c1.504,0 2.358,1.164 1.903,2.596l-3.432,10.869c-0.223,0.609 -0.434,1.33 -0.633,2.156c-0.197,0.828 -0.408,1.611 -0.629,2.354c-0.115,0.439 -0.226,0.886 -0.338,1.338c-0.183,0.742 -0.582,0.765 -0.814,0.021c-0.143,-0.461 -0.266,-0.912 -0.377,-1.359c-0.221,-0.743 -0.432,-1.526 -0.631,-2.354c-0.199,-0.826 -0.41,-1.547 -0.633,-2.156l-3.431,-10.869c-0.453,-1.432 0.398,-2.596 1.902,-2.596m1.396,29.542l4.524,0c1.5,0 3.133,-1.147 3.639,-2.563l14.906,-41.6c0.512,-1.414 -0.297,-2.563 -1.803,-2.563l-4.588,0c-1.5,0 -3.095,1.161 -3.554,2.59l-1.524,4.75c-0.461,1.43 -2.051,2.596 -3.557,2.596l-11.697,0c-1.502,0 -3.086,-1.166 -3.539,-2.602l-1.492,-4.738c-0.447,-1.435 -2.033,-2.596 -3.539,-2.596l-4.32,0c-1.504,0 -2.317,1.149 -1.815,2.563l14.727,41.598c0.504,1.418 2.131,2.565 3.632,2.565" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g460" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path462" d="m499.769496,644.659102l-13.184,23.919c-0.722,1.319 -0.095,2.385 1.411,2.385l5.052,0c1.504,0 3.283,-1.081 3.975,-2.417l5.926,-11.438c0.353,-0.742 0.715,-1.494 1.095,-2.254c0.375,-0.763 0.719,-1.47 1.028,-2.125c0.176,-0.386 0.343,-0.763 0.506,-1.138c0.277,-0.633 0.808,-0.668 1.132,-0.032c0.198,0.385 0.377,0.774 0.559,1.17c0.307,0.655 0.648,1.362 1.027,2.125c0.377,0.76 0.743,1.512 1.098,2.254l5.809,11.427c0.683,1.341 2.453,2.428 3.955,2.428l4.656,0c1.506,0 2.133,-1.066 1.41,-2.385l-13.189,-23.919c-0.723,-1.316 -1.313,-3.605 -1.313,-5.111l0,-12.588c0,-1.506 -1.221,-2.723 -2.724,-2.723l-4.188,0c-1.504,0 -2.723,1.217 -2.723,2.723l0,12.588c0,1.506 -0.588,3.795 -1.318,5.111" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 16 KiB |
@@ -1,110 +0,0 @@
|
||||
<svg width="700" height="195" xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata id="metadata8">image/svg+xml</metadata>
|
||||
<defs>
|
||||
<clipPath id="clipPath18" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path16" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath510" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path508" d="m0,720l1280,0l0,-720l-1280,0l0,720z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath518" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path516" d="m80.333,608.499l52.426,0l0,-23.87l-52.426,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath534" clipPathUnits="userSpaceOnUse">
|
||||
<path id="path532" d="m724.334,608.499l93.213,0l0,-23.87l-93.213,0l0,23.87z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect x="-1" y="-1" width="702" height="197" id="canvas_background" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="svg_3">
|
||||
<g id="g20" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path22" d="m120.688001,602.723581l-43.031,-24.842c-6.374,-3.68 -16.707,-3.68 -23.082,0l-43.033,24.842c-6.375,3.68 -11.542,12.631 -11.542,19.992l0,49.688c0,7.358 5.167,16.312 11.542,19.992l43.033,24.843c6.375,3.682 16.708,3.682 23.082,0l43.031,-24.843c6.374,-3.68 11.541,-12.634 11.541,-19.992l0,-49.688c0,-7.361 -5.167,-16.312 -11.541,-19.992" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g28" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path30" d="m99.737811,687.968781c1.045,-0.571 2.892,-1.581 3.936,-2.151c0.429,-0.235 1.126,-0.235 1.555,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.431,-0.235 -0.431,-0.61599 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g32" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path34" d="m104.850111,683.818881l0,-4.232c0,-0.49 0.348,-0.697 0.777,-0.461l3.936,2.152c0.43,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.234 -0.777,-0.822 -0.777,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g36" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path38" d="m106.268141,677.650881c1.045,-0.571 2.891,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g40" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path42" d="m111.380451,673.500981l0,-4.232c-0.001,-0.49 0.348,-0.697 0.778,-0.461l3.936,2.152c0.429,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.234 -0.778,-0.822 -0.778,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g44" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path46" d="m112.518141,667.119181c1.045,-0.571 2.891,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g48" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path50" d="m117.630451,662.969301l0,-4.232c-0.001,-0.49 0.348,-0.697 0.778,-0.461l3.936,2.152c0.429,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.234 -0.778,-0.822 -0.778,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g52" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path54" d="m101.344191,667.119181c1.045,-0.571 2.892,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g56" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path58" d="m106.457541,662.969301l0,-4.232c-0.001,-0.49 0.348,-0.697 0.777,-0.461l3.936,2.152c0.43,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.234 -0.777,-0.822 -0.777,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g60" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path62" d="m95.018141,677.650881c1.045,-0.571 2.892,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.556,0l3.936,2.151c0.429,0.234 0.429,0.615 0,0.85l-3.936,2.152c-0.429,0.234 -1.127,0.234 -1.556,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g64" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path66" d="m100.131301,673.500981l0,-4.232c-0.001,-0.49 0.348,-0.697 0.777,-0.461l3.936,2.152c0.43,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.347,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.429,-0.234 -0.777,-0.822 -0.777,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g68" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path70" d="m89.941911,667.119181c1.045,-0.571 2.891,-1.581 3.936,-2.151c0.429,-0.235 1.127,-0.235 1.555,0l3.937,2.151c0.428,0.234 0.428,0.615 0,0.85l-3.937,2.152c-0.428,0.234 -1.126,0.234 -1.555,0l-3.936,-2.152c-0.43,-0.235 -0.43,-0.616 0,-0.85" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g72" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path74" d="m95.054221,662.969301l0,-4.232c-0.001,-0.49 0.34799,-0.697 0.778,-0.461l3.936,2.152c0.429,0.235 0.777,0.822 0.777,1.312l0,4.232c0,0.489 -0.348,0.696 -0.777,0.461c-1.045,-0.571 -2.891,-1.58 -3.936,-2.152c-0.43,-0.234 -0.778,-0.822 -0.778,-1.312" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g172" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path174" d="m48.098101,660.689491c2.115,1.223 5.543,1.223 7.661,0l12.443,-7.183c0.431,-0.249 0.839,-0.585 1.226,-0.96l14.191,7.757c2.909,1.589 2.909,4.166 0,5.756l-26.639,14.565c-2.907,1.59 -7.622,1.59 -10.529,0l-26.641,-14.565c-2.907,-1.59 -2.907,-4.166 0.001,-5.755c3.812,-2.084 9.198,-5.028 14.463,-7.905c0.429,0.441 0.892,0.825 1.382,1.107l12.442,7.183z" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g176" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path178" d="m86.316911,655.665101c-3.787,-2.071 -9.131,-4.993 -14.363,-7.85399c0.051,-0.31901 0.078,-0.633 0.078,-0.94l0,-14.368c0,-2.44401 -1.713,-5.411 -3.83,-6.632l-12.443,-7.183c-0.403,-0.233 -0.864,-0.407 -1.343,-0.551l-0.001,-14.567c0,-3.313 2.357,-4.711 5.263,-3.121l26.64,14.57c2.907,1.589 5.265,5.565 5.265,8.878l0,28.646c0,3.314 -2.358,4.711 -5.266,3.122" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g180" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path182" d="m35.655841,625.871101c-2.114,1.221 -3.827,4.188 -3.827,6.632l0,14.368c0,0.259 0.029,0.526 0.066,0.794c-5.338,2.918 -10.828,5.92 -14.695,8.035c-2.908,1.589 -5.266,0.192 -5.266,-3.122l0,-28.638c0,-3.314 2.358,-7.289 5.265,-8.879l26.64,-14.569c2.906,-1.59 5.263,-0.193 5.263,3.121l-0.002,14.627c-0.353,0.126 -0.694,0.27 -1.002,0.448l-12.442,7.183z" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g184" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path186" d="m64.088401,630.603491c-2.338,1.278 -6.203,3.392 -8.982,4.91c-0.46501,0.254 -0.908,0.496 -1.299,0.71c-1.123,0.613 -2.942,0.613 -4.06501,0l-1.316,-0.72l-8.965,-4.9c-1.123,-0.613 -1.123,-1.607 0,-2.221l9.639,-5.27l0.642,-0.352c1.12301,-0.614 2.94201,-0.614 4.06501,0l0.60799,0.333l9.674,5.289c1.122,0.614 1.122,1.608 -0.00099,2.221" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g188" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path190" d="m47.701741,640.016091c1.121,0.614 2.031,2.148 2.031,3.427l0,1.273l0,9.785c0,1.278 -0.909,1.818 -2.031,1.204l-9.735,-5.324l-0.546,-0.299c-1.123,-0.613 -2.032,-2.148 -2.032,-3.427l0,-0.9l0,-10.156c0,-1.279 0.91,-1.819 2.032,-1.205c2.279,1.247 6.008,3.285 8.768,4.795c0.544,0.297 1.064,0.581 1.513,0.827" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g192" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path194" d="m66.098101,650.065891l-0.604,0.33l-9.679,5.293c-1.121,0.613 -2.031,0.075 -2.031,-1.205l0.001,-9.753l0,-1.302c0,-1.279 0.911,-2.814 2.032,-3.428c0.452,-0.247 0.975,-0.533 1.523,-0.833c2.76,-1.508 6.481,-3.542 8.758,-4.788c1.121,-0.612 2.031,-0.074 2.031,1.206l0,10.133l0,0.92c0,1.279 -0.91,2.813 -2.031,3.427" fill-rule="nonzero" fill="#ffffff"/>
|
||||
</g>
|
||||
<g id="g392" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path394" d="m148.459551,672.666481l4.193,0c1.5,0 2.723,-1.217 2.723,-2.723l0,-13.178c0,-1.506 0.852,-1.854 1.904,-0.78l14.459,14.738c1.049,1.074 3.124,1.943 4.629,1.943l6.516,0c1.504,0 1.861,-0.863 0.803,-1.93l-14.764,-14.83c-1.059,-1.067 -1.218,-2.926 -0.352,-4.154l16.662,-23.589c0.868,-1.228 0.352,-2.223 -1.153,-2.223l-5.85,0c-1.504,0 -3.422,1 -4.287,2.229l-12.158,17.366c-0.861,1.231 -2.425,1.369 -3.489,0.308l-0.994,-0.989c-1.064,-1.06 -1.926,-3.139 -1.926,-4.645l0,-11.545c0,-1.506 -1.223,-2.724 -2.723,-2.724l-4.193,0c-1.502,0 -2.723,1.218 -2.723,2.724l0,41.279c0,1.506 1.221,2.723 2.723,2.723" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g396" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path398" d="m194.178241,629.237801c-3.145,2.724 -4.719,6.638 -4.719,11.733l0,28.973c0,1.505 1.221,2.723 2.723,2.723l4.191,0c1.502,0 2.723,-1.218 2.723,-2.723l0,-28.973c0,-2.441 0.673,-4.425 2.023,-5.946c1.354,-1.526 3.646,-2.287 6.88,-2.287c3.058,0 5.316,0.782 6.779,2.351c1.463,1.568 2.19,3.573 2.19,6.015l0,28.84c0,1.505 1.218,2.723 2.724,2.723l4.191,0c1.505,0 2.723,-1.218 2.723,-2.723l0,-28.973c0,-5.01 -1.54,-8.898 -4.619,-11.664c-3.078,-2.77 -7.676,-4.153 -13.788,-4.153c-6.203,0 -10.876,1.361 -14.021,4.084" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g400" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path402" d="m245.873491,633.780281l8.374,0c2.346,0 4.175,0.58 5.481,1.733c1.305,1.155 1.959,2.692 1.959,4.606c0,2.224 -0.73,3.899 -2.193,5.033c-1.46,1.133 -3.3,1.699 -5.513,1.699l-8.108,0c-1.505,0 -2.723,-1.217 -2.723,-2.721l0,-7.627c0,-1.505 1.218,-2.723 2.723,-2.723m12.825,21.503c1.285,0.958 1.926,2.351 1.926,4.181c0,0.84 -0.142,1.59 -0.425,2.249c-0.503,1.171 -2.359,2.575 -3.782,2.939c-0.784,0.202 -1.662,0.303 -2.635,0.303l-7.909,0c-1.505,0 -2.723,-1.217 -2.723,-2.723l0,-5.664c0,-1.505 1.218,-2.723 2.723,-2.723l7.71,0c2.125,0 3.829,0.478 5.115,1.438m-22.462,17.383l18.543,0c2.566,0 4.816,-0.295 6.744,-0.882c1.925,-0.588 3.507,-1.428 4.749,-2.516c2.527,-2.223 3.79,-5.143 3.79,-8.757c0,-2.398 -0.675,-4.369 -2.027,-5.914c-0.81,-0.927 -1.784,-1.71 -2.92,-2.347c-1.313,-0.737 -2.497,-1.128 -2.497,-1.184c0,-0.053 1.197,-0.391 2.535,-1.08c1.521,-0.781 2.81,-1.848 3.878,-3.199c1.615,-2.051 2.428,-4.508 2.428,-7.386c0,-2.223 -0.346,-4.105 -1.033,-5.653c-0.682,-1.548 -1.74,-2.909 -3.157,-4.084c-1.373,-1.176 -3.079,-2.091 -5.116,-2.745c-2.037,-0.654 -4.319,-0.979 -6.845,-0.979l-19.072,0c-1.505,0 -2.722,1.218 -2.722,2.724l0,41.28c0,1.505 1.217,2.722 2.722,2.722" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g404" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path406" d="m279.826741,672.666481l29.508,0c1.504,0 2.722,-1.217 2.722,-2.723l0,-2.526c0,-1.505 -1.218,-2.723 -2.722,-2.723l-19.871,0c-1.504,0 -2.723,-1.218 -2.723,-2.723l0,-5.012c0,-1.505 1.219,-2.724 2.723,-2.724l16.748,0c1.506,0 2.722,-1.217 2.722,-2.722l0,-2.33c0,-1.505 -1.216,-2.723 -2.722,-2.723l-16.748,0c-1.504,0 -2.723,-1.218 -2.723,-2.725l0,-7.163c0,-1.505 1.219,-2.723 2.723,-2.723l20.068,0c1.504,0 2.721,-1.218 2.721,-2.723l0,-2.462c0,-1.506 -1.217,-2.724 -2.721,-2.724l-29.705,0c-1.504,0 -2.723,1.218 -2.723,2.724l0,41.279c0,1.506 1.219,2.723 2.723,2.723" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g408" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path410" d="m321.326741,628.914101c-2.852,2.169 -4.607,5.09 -5.266,8.764c-0.265,1.479 0.936,2.702 2.442,2.702l3.988,0c1.506,0 2.822,-1.234 3.33,-2.649c0.531,-1.483 1.352,-2.611 2.449,-3.392c1.684,-1.202 4.231,-1.798 7.641,-1.798c1.24,0 2.416,0.106 3.523,0.325c1.108,0.217 2.082,0.569 2.924,1.047c0.842,0.479 1.518,1.101 2.026,1.861c0.509,0.761 0.763,1.686 0.763,2.777c0,1.133 -0.275,2.069 -0.83,2.813c-0.552,0.739 -1.34,1.362 -2.359,1.862c-1.018,0.5 -2.248,0.935 -3.686,1.308c-1.439,0.368 -3.068,0.748 -4.882,1.142c-2.127,0.479 -4.178,1.013 -6.149,1.601c-1.971,0.587 -3.699,1.383 -5.184,2.386c-1.482,1.001 -2.679,2.287 -3.585,3.855c-0.911,1.569 -1.364,3.572 -1.364,6.012c0,2.308 0.453,4.335 1.364,6.08c0.906,1.741 2.169,3.201 3.787,4.377c1.617,1.177 3.529,2.058 5.748,2.648c2.213,0.588 4.652,0.88 7.308,0.88c5.362,0 9.668,-1.242 12.924,-3.726c2.609,-1.988 4.285,-4.706 5.029,-8.149c0.321,-1.472 -0.834,-2.697 -2.336,-2.697l-3.789,0c-1.505,0 -2.793,1.253 -3.42,2.619c-0.5,1.093 -1.242,1.984 -2.23,2.675c-1.682,1.176 -3.766,1.763 -6.244,1.763c-2.615,0 -4.695,-0.5 -6.248,-1.502c-1.551,-1.003 -2.324,-2.332 -2.324,-3.986c0,-0.96 0.211,-1.756 0.63,-2.386c0.42,-0.633 1.063,-1.189 1.928,-1.667c0.867,-0.478 1.936,-0.894 3.223,-1.242c1.285,-0.348 2.81,-0.718 4.586,-1.112c2.435,-0.521 4.726,-1.1 6.875,-1.73c2.15,-0.633 4.031,-1.471 5.648,-2.516c1.617,-1.046 2.891,-2.374 3.823,-3.986c0.929,-1.616 1.394,-3.684 1.394,-6.21c0,-2.352 -0.465,-4.453 -1.394,-6.308c-0.932,-1.851 -2.215,-3.399 -3.854,-4.638c-1.641,-1.239 -3.59,-2.192 -5.848,-2.845c-2.261,-0.649 -4.718,-0.979 -7.377,-0.979c-6.466,0 -11.463,1.34 -14.984,4.021" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g412" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path414" d="m373.254411,650.577181l7.246,0c2.524,0 4.44,0.63 5.744,1.896c1.307,1.263 1.961,2.962 1.961,5.098c0,2.22 -0.666,3.92 -1.992,5.097c-1.33,1.176 -3.189,1.763 -5.58,1.763l-7.379,0c-1.504,0 -2.721,-1.217 -2.721,-2.723l0,-8.408c0,-1.505 1.217,-2.723 2.721,-2.723m-9.969,22.089l18.145,0c2.791,0 5.203,-0.382 7.238,-1.142c2.039,-0.764 3.768,-1.844 5.186,-3.237c1.328,-1.351 2.369,-2.919 3.125,-4.704c0.752,-1.787 1.13,-3.771 1.13,-5.948c0,-2.221 -0.367,-4.237 -1.101,-6.045c-0.731,-1.808 -1.77,-3.356 -3.121,-4.64c-1.354,-1.285 -3.012,-2.289 -4.983,-3.006c-1.972,-0.719 -4.199,-1.08 -6.679,-1.08l-8.971,0c-1.504,0 -2.721,-1.218 -2.721,-2.724l0,-11.476c0,-1.505 -1.218,-2.724 -2.724,-2.724l-4.524,0c-1.502,0 -2.722,1.219 -2.722,2.724l0,41.28c0,1.505 1.22,2.722 2.722,2.722" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g416" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path418" d="m415.248491,652.015201l7.51,0c2.658,0 4.627,0.599 5.914,1.798c1.285,1.197 1.926,2.734 1.926,4.606c0,1.917 -0.62,3.497 -1.86,4.738c-1.24,1.242 -3.144,1.862 -5.713,1.862l-7.777,0c-1.504,0 -2.721,-1.218 -2.721,-2.723l0,-7.557c0,-1.505 1.217,-2.724 2.721,-2.724m-9.635,20.651l19.071,0c2.304,0 4.398,-0.316 6.281,-0.949c1.883,-0.63 3.488,-1.513 4.816,-2.645c1.328,-1.133 2.358,-2.495 3.09,-4.085c0.732,-1.59 1.098,-3.367 1.098,-5.326c0,-2.745 -0.688,-5.108 -2.061,-7.09c-0.955,-1.38 -2.316,-2.478 -4.086,-3.297c-1.361,-0.633 -2.558,-0.963 -2.558,-1.016c0,-0.053 1.201,-0.386 2.519,-1.109c0.996,-0.545 1.83,-1.223 2.498,-2.029c1.174,-1.416 1.912,-3.538 2.227,-6.373c0.174,-1.654 0.297,-3.19 0.363,-4.606c0.066,-1.414 0.141,-2.732 0.203,-3.826c0.029,-0.532 0.016,-0.967 0.016,-1.687c0,-1.641 -1.203,-2.688 -2.656,-2.688l-3.125,0c-1.504,0 -2.641,0.047 -3.012,2.72c-0.043,0.315 -0.092,0.649 -0.129,1.004c-0.111,1.005 -0.211,2.111 -0.303,3.334c-0.086,1.218 -0.174,2.462 -0.262,3.723c-0.222,2.574 -1.076,4.542 -2.56,5.914c-1.484,1.373 -3.732,2.058 -6.742,2.058l-5.053,0c-1.504,0 -2.721,-1.218 -2.721,-2.722l0,-13.307c0,-1.505 -1.218,-2.724 -2.724,-2.724l-4.19,0c-1.506,0 -2.724,1.219 -2.724,2.724l0,41.28c0,1.505 1.218,2.722 2.724,2.722" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g420" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path422" d="m460.897051,643.124491l7.113,0c1.504,0 2.358,1.165 1.903,2.597l-3.432,10.868c-0.223,0.609 -0.434,1.33 -0.633,2.157c-0.197,0.827 -0.408,1.611 -0.629,2.353c-0.115,0.439 -0.226,0.886 -0.338,1.338c-0.183,0.742 -0.582,0.766 -0.814,0.02c-0.143,-0.459 -0.266,-0.911 -0.377,-1.358c-0.221,-0.742 -0.432,-1.526 -0.631,-2.353c-0.199,-0.827 -0.41,-1.548 -0.633,-2.157l-3.431,-10.868c-0.453,-1.432 0.398,-2.597 1.902,-2.597m1.396,29.542l4.524,0c1.5,0 3.133,-1.148 3.639,-2.563l14.906,-41.599c0.512,-1.415 -0.297,-2.564 -1.803,-2.564l-4.588,0c-1.5,0 -3.095,1.16 -3.554,2.59l-1.524,4.75c-0.461,1.43 -2.051,2.595 -3.557,2.595l-11.697,0c-1.502,0 -3.086,-1.165 -3.539,-2.601l-1.492,-4.738c-0.447,-1.436 -2.033,-2.596 -3.539,-2.596l-4.32,0c-1.504,0 -2.317,1.149 -1.815,2.564l14.727,41.597c0.504,1.417 2.131,2.565 3.632,2.565" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
<g id="g424" transform="matrix(1.3333333,0,0,-1.3333333,0,960) ">
|
||||
<path id="path426" d="m495.397051,646.362281l-13.184,23.919c-0.722,1.319 -0.095,2.385 1.411,2.385l5.052,0c1.504,0 3.283,-1.081 3.975,-2.416l5.926,-11.437c0.353,-0.743 0.715,-1.495 1.095,-2.256c0.375,-0.763 0.719,-1.47 1.028,-2.124c0.176,-0.386 0.343,-0.763 0.506,-1.138c0.277,-0.634 0.808,-0.668 1.132,-0.033c0.198,0.386 0.377,0.774 0.559,1.171c0.307,0.654 0.648,1.361 1.027,2.124c0.377,0.761 0.743,1.513 1.098,2.256l5.809,11.425c0.683,1.341 2.453,2.428 3.955,2.428l4.656,0c1.506,0 2.133,-1.066 1.41,-2.385l-13.189,-23.919c-0.723,-1.316 -1.313,-3.605 -1.313,-5.11l0,-12.588c0,-1.506 -1.221,-2.724 -2.724,-2.724l-4.188,0c-1.504,0 -2.723,1.218 -2.723,2.724l0,12.588c0,1.505 -0.588,3.794 -1.318,5.11" fill-rule="nonzero" fill="#3d647f"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 18 KiB |
1772
logo/logos.pdf
@@ -1,16 +0,0 @@
|
||||
# Kubernetes Branding Guidelines
|
||||
|
||||
These guidelines provide you with guidance for using the Kubespray logo.
|
||||
All artwork is made available under the Linux Foundation trademark usage
|
||||
[guidelines](https://www.linuxfoundation.org/trademark-usage/). This text from
|
||||
those guidelines, and the correct and incorrect usage examples, are particularly
|
||||
helpful:
|
||||
>Certain marks of The Linux Foundation have been created to enable you to
|
||||
>communicate compatibility or interoperability of software or products. In
|
||||
>addition to the requirement that any use of a mark to make an assertion of
|
||||
>compatibility must, of course, be accurate, the use of these marks must
|
||||
>avoid confusion regarding The Linux Foundation’s association with the
|
||||
>product. The use of the mark cannot imply that The Linux Foundation or
|
||||
>its projects are sponsoring or endorsing the product.
|
||||
|
||||
Additionally, permission is granted to modify the Kubespray mark for non-commercial uses such as t-shirts and stickers.
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
- hosts: localhost
|
||||
gather_facts: False
|
||||
tasks:
|
||||
- name: "Check ansible version !=2.7.0"
|
||||
assert:
|
||||
msg: "Ansible V2.7.0 can't be used until: https://github.com/ansible/ansible/issues/46600 is fixed"
|
||||
that:
|
||||
- ansible_version.string is version("2.7.0", "!=")
|
||||
- ansible_version.string is version("2.6.0", ">=")
|
||||
tags:
|
||||
- check
|
||||
vars:
|
||||
ansible_connection: local
|
||||
|
||||
- hosts: bastion[0]
|
||||
gather_facts: False
|
||||
roles:
|
||||
- { role: kubespray-defaults}
|
||||
- { role: bastion-ssh-config, tags: ["localhost", "bastion"]}
|
||||
|
||||
- hosts: "{{ groups['etcd'] | first }}"
|
||||
roles:
|
||||
- { role: kubespray-defaults}
|
||||
- { role: recover_control_plane/pre-recover }
|
||||
- { role: recover_control_plane/etcd }
|
||||
|
||||
- hosts: "{{ groups['kube-master'] | first }}"
|
||||
roles:
|
||||
- { role: recover_control_plane/master }
|
||||
|
||||
- include: cluster.yml
|
||||
|
||||
- hosts: "{{ groups['kube-master'] }}"
|
||||
roles:
|
||||
- { role: kubespray-defaults}
|
||||
- { role: recover_control_plane/post-recover }
|
||||
@@ -2,11 +2,11 @@
|
||||
- hosts: localhost
|
||||
become: no
|
||||
tasks:
|
||||
- name: "Check ansible version >=2.7.8"
|
||||
- name: "Check ansible version >=2.7.6"
|
||||
assert:
|
||||
msg: "Ansible must be v2.7.8 or higher"
|
||||
msg: "Ansible must be v2.7.6 or higher"
|
||||
that:
|
||||
- ansible_version.string is version("2.7.8", ">=")
|
||||
- ansible_version.string is version("2.7.6", ">=")
|
||||
tags:
|
||||
- check
|
||||
vars:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ansible>=2.7.8
|
||||
ansible>=2.7.6
|
||||
jinja2>=2.9.6
|
||||
netaddr
|
||||
pbr>=1.6
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
- hosts: localhost
|
||||
become: no
|
||||
tasks:
|
||||
- name: "Check ansible version >=2.7.8"
|
||||
- name: "Check ansible version >=2.7.6"
|
||||
assert:
|
||||
msg: "Ansible must be v2.7.8 or higher"
|
||||
msg: "Ansible must be v2.7.6 or higher"
|
||||
that:
|
||||
- ansible_version.string is version("2.7.8", ">=")
|
||||
- ansible_version.string is version("2.7.6", ">=")
|
||||
tags:
|
||||
- check
|
||||
vars:
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
# bootstrap-os
|
||||
|
||||
Bootstrap an Ansible host to be able to run Ansible modules.
|
||||
|
||||
This role will:
|
||||
* configure the package manager (if applicable) to be able to fetch packages
|
||||
* install Python
|
||||
* install the necessary packages to use Ansible's package manager modules
|
||||
* set the hostname of the host to `{{ inventory_hostname }}` when requested
|
||||
|
||||
## Requirements
|
||||
|
||||
A host running an operating system that is supported by Kubespray.
|
||||
See https://github.com/kubernetes-sigs/kubespray#supported-linux-distributions for a current list.
|
||||
|
||||
SSH access to the host.
|
||||
|
||||
## Role Variables
|
||||
|
||||
Variables are listed with their default values, if applicable.
|
||||
|
||||
### General variables
|
||||
|
||||
* `http_proxy`/`https_proxy`
|
||||
The role will configure the package manager (if applicable) to download packages via a proxy.
|
||||
This is currently implemented for CentOS/RHEL (`http_proxy` only) as well as Debian and Ubuntu (both `http_proxy` and `https_proxy` are respected)
|
||||
|
||||
* `override_system_hostname: true`
|
||||
The role will set the hostname of the machine to the name it has according to Ansible's inventory (the variable `{{ inventory_hostname }}`).
|
||||
|
||||
### Per distribution variables
|
||||
|
||||
#### CoreOS
|
||||
|
||||
* `coreos_locksmithd_disable: false`
|
||||
Whether `locksmithd` (responsible for rolling restarts) should be disabled or be left alone.
|
||||
|
||||
#### CentOS/RHEL
|
||||
|
||||
* `centos_fastestmirror_enabled: false`
|
||||
Whether the [fastestmirror](https://wiki.centos.org/PackageManagement/Yum/FastestMirror) yum plugin should be enabled.
|
||||
|
||||
## Dependencies
|
||||
|
||||
The `kubespray-defaults` role is expected to be run before this role.
|
||||
|
||||
## Example Playbook
|
||||
|
||||
Remember to disable fact gathering since Python might not be present on hosts.
|
||||
|
||||
- hosts: all
|
||||
gather_facts: false # not all hosts might be able to run modules yet
|
||||
roles:
|
||||
- kubespray-defaults
|
||||
- bootstrap-os
|
||||
|
||||
## License
|
||||
|
||||
Apache 2.0
|
||||
@@ -1,14 +1,16 @@
|
||||
---
|
||||
## CentOS/RHEL specific variables
|
||||
# Install epel repo on Centos/RHEL
|
||||
centos_epel_enabled: false
|
||||
# Use the fastestmirror yum plugin
|
||||
centos_fastestmirror_enabled: false
|
||||
pip_python_coreos_modules:
|
||||
- httplib2
|
||||
- six
|
||||
|
||||
## CoreOS specific variables
|
||||
# Disable locksmithd or leave it in its current state
|
||||
coreos_locksmithd_disable: false
|
||||
|
||||
## General
|
||||
# Set the hostname to inventory_hostname
|
||||
override_system_hostname: true
|
||||
coreos_auto_upgrade: true
|
||||
|
||||
# Install epel repo on Centos/RHEL
|
||||
epel_enabled: false
|
||||
|
||||
# CentOS/RedHat Extras repo
|
||||
extras_rh_repo_base_url: "http://mirror.centos.org/centos/$releasever/extras/$basearch/"
|
||||
extras_rh_repo_gpgkey: "http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7"
|
||||
# Caching extras packages after installation
|
||||
extras_rh_rpm_keepcache: 0
|
||||
@@ -1,13 +1,10 @@
|
||||
---
|
||||
# CentOS ships with python installed
|
||||
|
||||
- name: Check if this is an atomic host
|
||||
- name: Check if atomic host
|
||||
stat:
|
||||
path: /run/ostree-booted
|
||||
register: ostree
|
||||
|
||||
- name: Store the fact if this is an atomic host
|
||||
set_fact:
|
||||
- set_fact:
|
||||
is_atomic: "{{ ostree.stat.exists }}"
|
||||
|
||||
- name: Check presence of fastestmirror.conf
|
||||
@@ -15,34 +12,79 @@
|
||||
path: /etc/yum/pluginconf.d/fastestmirror.conf
|
||||
register: fastestmirror
|
||||
|
||||
# the fastestmirror plugin can actually slow down Ansible deployments
|
||||
- name: Disable fastestmirror plugin if requested
|
||||
# fastestmirror plugin actually slows down Ansible deployments
|
||||
- name: Disable fastestmirror plugin
|
||||
lineinfile:
|
||||
dest: /etc/yum/pluginconf.d/fastestmirror.conf
|
||||
regexp: "^enabled=.*"
|
||||
line: "enabled=0"
|
||||
state: present
|
||||
become: true
|
||||
when:
|
||||
- fastestmirror.stat.exists
|
||||
- not centos_fastestmirror_enabled
|
||||
when: fastestmirror.stat.exists
|
||||
|
||||
- name: Add proxy to /etc/yum.conf if http_proxy is defined
|
||||
lineinfile:
|
||||
path: "/etc/yum.conf"
|
||||
line: "proxy={{ http_proxy }}"
|
||||
create: true
|
||||
create: yes
|
||||
state: present
|
||||
become: true
|
||||
when:
|
||||
- http_proxy is defined
|
||||
when: http_proxy is defined
|
||||
|
||||
# libselinux-python is required on SELinux enabled hosts
|
||||
# See https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-node-requirements
|
||||
- name: Install libselinux-python
|
||||
package:
|
||||
name: libselinux-python
|
||||
- name: Install libselinux-python and yum-utils for bootstrap
|
||||
yum:
|
||||
name:
|
||||
- libselinux-python
|
||||
- yum-utils
|
||||
state: present
|
||||
become: true
|
||||
when:
|
||||
- not is_atomic
|
||||
|
||||
- name: Check python-pip package
|
||||
yum:
|
||||
list=python-pip
|
||||
register: package_python_pip
|
||||
when:
|
||||
- not is_atomic
|
||||
|
||||
- name: Install epel-release for bootstrap
|
||||
yum:
|
||||
name: epel-release
|
||||
state: present
|
||||
become: true
|
||||
when:
|
||||
- epel_enabled
|
||||
- not is_atomic
|
||||
- package_python_pip.results | length != 0
|
||||
|
||||
- name: check python-httplib2 package
|
||||
yum:
|
||||
list: "python-httplib2"
|
||||
register: package_python_httplib2
|
||||
when:
|
||||
- not is_atomic
|
||||
|
||||
- name: Configure extras repository if python-httplib2 not avaiable in current repos
|
||||
yum_repository:
|
||||
name: extras
|
||||
description: "CentOS-7 - Extras"
|
||||
state: present
|
||||
baseurl: "{{ extras_rh_repo_base_url }}"
|
||||
file: "extras"
|
||||
gpgcheck: yes
|
||||
gpgkey: "{{extras_rh_repo_gpgkey}}"
|
||||
keepcache: "{{ extras_rh_rpm_keepcache | default('1') }}"
|
||||
proxy: " {{ http_proxy | default('_none_') }}"
|
||||
when:
|
||||
- not is_atomic
|
||||
- package_python_httplib2.results | length == 0
|
||||
|
||||
- name: Install pip for bootstrap
|
||||
yum:
|
||||
name: python-pip
|
||||
state: present
|
||||
become: true
|
||||
when:
|
||||
- not is_atomic
|
||||
- package_python_pip.results | length != 0
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
---
|
||||
# ClearLinux ships with Python installed
|
||||
|
||||
- name: Install basic package to run containers
|
||||
- name: Install basic packages to run containers
|
||||
package:
|
||||
name: containers-basic
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
with_items:
|
||||
- containers-basic
|
||||
|
||||
- name: Make sure docker service is enabled
|
||||
systemd:
|
||||
name: docker
|
||||
masked: false
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
enabled: yes
|
||||
daemon_reload: yes
|
||||
state: started
|
||||
become: true
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
---
|
||||
# CoreOS ships without Python installed
|
||||
|
||||
- name: Check if bootstrap is needed
|
||||
raw: stat /opt/bin/.bootstrapped
|
||||
register: need_bootstrap
|
||||
@@ -18,20 +16,39 @@
|
||||
|
||||
- name: Run bootstrap.sh
|
||||
script: bootstrap.sh
|
||||
become: true
|
||||
when:
|
||||
- need_bootstrap.rc != 0
|
||||
when: need_bootstrap.rc != 0
|
||||
|
||||
- name: Set the ansible_python_interpreter fact
|
||||
set_fact:
|
||||
- set_fact:
|
||||
ansible_python_interpreter: "{{ bin_dir }}/python"
|
||||
tags:
|
||||
- facts
|
||||
|
||||
- name: Install pip3
|
||||
command: "{{ ansible_python_interpreter }} -m ensurepip"
|
||||
args:
|
||||
creates: "{{ bin_dir }}/pypy3/bin/pip3"
|
||||
register: pip_installed
|
||||
|
||||
- name: Install pip3 link
|
||||
file:
|
||||
src: "{{ bin_dir }}/pypy3/bin/pip3"
|
||||
dest: "{{ bin_dir }}/pip3"
|
||||
mode: 0755
|
||||
state: link
|
||||
when: pip_installed.changed
|
||||
|
||||
- name: Install required python modules
|
||||
pip:
|
||||
name: "{{ item }}"
|
||||
extra_args: "{{ pip_extra_args | default(omit) }}"
|
||||
with_items: "{{ pip_python_coreos_modules }}"
|
||||
environment:
|
||||
PATH: "{{ ansible_env.PATH }}:{{ bin_dir }}"
|
||||
|
||||
- name: Disable auto-upgrade
|
||||
systemd:
|
||||
name: locksmithd.service
|
||||
masked: true
|
||||
state: stopped
|
||||
when:
|
||||
- coreos_locksmithd_disable
|
||||
- not coreos_auto_upgrade
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
---
|
||||
# Some Debian based distros ship without Python installed
|
||||
|
||||
- name: Check if bootstrap is needed
|
||||
raw: which python
|
||||
raw: which "{{ item }}"
|
||||
register: need_bootstrap
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
# This command should always run, even in check mode
|
||||
check_mode: false
|
||||
with_items:
|
||||
- python
|
||||
- pip
|
||||
- dbus-daemon
|
||||
environment: {}
|
||||
tags:
|
||||
- facts
|
||||
tags: facts
|
||||
|
||||
- name: Check http::proxy in /etc/apt/apt.conf
|
||||
raw: grep -qsi 'Acquire::http::proxy' /etc/apt/apt.conf
|
||||
@@ -50,18 +51,15 @@
|
||||
- https_proxy is defined
|
||||
- need_https_proxy.rc != 0
|
||||
|
||||
- name: Install python
|
||||
- name: Install python, pip, and dbus
|
||||
raw:
|
||||
apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y python-minimal
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y python-minimal python-pip dbus
|
||||
become: true
|
||||
environment: {}
|
||||
when:
|
||||
- need_bootstrap.rc != 0
|
||||
need_bootstrap.results | map(attribute='rc') | sort | last | bool
|
||||
|
||||
# Workaround for https://github.com/ansible/ansible/issues/25543
|
||||
- name: Install dbus for the hostname module
|
||||
package:
|
||||
name: dbus
|
||||
state: present
|
||||
become: true
|
||||
- set_fact:
|
||||
ansible_python_interpreter: "/usr/bin/python"
|
||||
tags: facts
|
||||
|
||||
@@ -1,46 +1,22 @@
|
||||
---
|
||||
# Some Fedora based distros ship without Python installed
|
||||
|
||||
- name: Check if this is an atomic host
|
||||
raw: stat /run/ostree-booted
|
||||
register: ostree
|
||||
environment: {}
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
tags:
|
||||
- facts
|
||||
|
||||
- name: Store the fact if this is an atomic host
|
||||
set_fact:
|
||||
is_atomic: "{{ ostree.rc == 0 }}"
|
||||
tags:
|
||||
- facts
|
||||
|
||||
- name: Check if bootstrap is needed
|
||||
raw: which python
|
||||
raw: which "{{ item }}"
|
||||
register: need_bootstrap
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
with_items:
|
||||
- python
|
||||
environment: {}
|
||||
tags:
|
||||
- facts
|
||||
tags: facts
|
||||
|
||||
# Fedora's policy as of Fedora 30 is to still install python2 as /usr/bin/python
|
||||
# See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 for the current status
|
||||
- name: Install python on fedora
|
||||
raw: "dnf install --assumeyes --quiet python2"
|
||||
raw: "dnf install --assumeyes --quiet python"
|
||||
become: true
|
||||
environment: {}
|
||||
when:
|
||||
- need_bootstrap.rc != 0
|
||||
- not is_atomic
|
||||
when: need_bootstrap.results | map(attribute='rc') | sort | last | bool
|
||||
|
||||
# libselinux-python is required on SELinux enabled hosts
|
||||
# See https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-node-requirements
|
||||
- name: Install libselinux-python
|
||||
package:
|
||||
- name: Install required python packages
|
||||
dnf:
|
||||
name: libselinux-python
|
||||
state: present
|
||||
become: true
|
||||
when:
|
||||
- not is_atomic
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
---
|
||||
# OpenSUSE ships with Python installed
|
||||
- name: Ensure zypper cache is updated (SUSE)
|
||||
zypper_repository:
|
||||
repo: "*"
|
||||
runrefresh: yes
|
||||
|
||||
# Without this package, the get_url module fails when trying to handle https
|
||||
- name: Install python-cryptography
|
||||
zypper:
|
||||
name: python-cryptography
|
||||
- name: Install required packages (SUSE)
|
||||
package:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
update_cache: true
|
||||
with_items:
|
||||
- python-cryptography
|
||||
become: true
|
||||
|
||||
72
roles/bootstrap-os/tasks/bootstrap-ubuntu.yml
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
- name: List ubuntu_packages
|
||||
set_fact:
|
||||
ubuntu_packages:
|
||||
- python
|
||||
- python-apt
|
||||
- python-pip
|
||||
- dbus
|
||||
|
||||
- name: Check if bootstrap is needed
|
||||
raw: dpkg -l | cut -d' ' -f3 | grep -e ^{{ item }}$
|
||||
register: need_bootstrap
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
# This command should always run, even in check mode
|
||||
check_mode: false
|
||||
with_items: "{{ ubuntu_packages }}"
|
||||
environment: {}
|
||||
tags:
|
||||
- facts
|
||||
|
||||
- name: Check http::proxy in /etc/apt/apt.conf
|
||||
raw: grep -qsi 'Acquire::http::proxy' /etc/apt/apt.conf
|
||||
register: need_http_proxy
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
# This command should always run, even in check mode
|
||||
check_mode: false
|
||||
environment: {}
|
||||
when:
|
||||
- http_proxy is defined
|
||||
|
||||
- name: Add http_proxy to /etc/apt/apt.conf if http_proxy is defined
|
||||
raw: echo 'Acquire::http::proxy "{{ http_proxy }}";' >> /etc/apt/apt.conf
|
||||
become: true
|
||||
environment: {}
|
||||
when:
|
||||
- http_proxy is defined
|
||||
- need_http_proxy.rc != 0
|
||||
|
||||
- name: Check https::proxy in /etc/apt/apt.conf
|
||||
raw: grep -qsi 'Acquire::https::proxy' /etc/apt/apt.conf
|
||||
register: need_https_proxy
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
# This command should always run, even in check mode
|
||||
check_mode: false
|
||||
environment: {}
|
||||
when:
|
||||
- https_proxy is defined
|
||||
|
||||
- name: Add https_proxy to /etc/apt/apt.conf if https_proxy is defined
|
||||
raw: echo 'Acquire::https::proxy "{{ https_proxy }}";' >> /etc/apt/apt.conf
|
||||
become: true
|
||||
environment: {}
|
||||
when:
|
||||
- https_proxy is defined
|
||||
- need_https_proxy.rc != 0
|
||||
|
||||
- name: Install python and pip
|
||||
raw:
|
||||
apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y {{ ubuntu_packages | join(" ") }}
|
||||
become: true
|
||||
environment: {}
|
||||
when:
|
||||
- need_bootstrap.results | map(attribute='rc') | sort | last | bool
|
||||
|
||||
- set_fact:
|
||||
ansible_python_interpreter: "/usr/bin/python"
|
||||
tags:
|
||||
- facts
|
||||
@@ -7,65 +7,55 @@
|
||||
check_mode: false
|
||||
environment: {}
|
||||
|
||||
- include_tasks: bootstrap-centos.yml
|
||||
when: '"CentOS" in os_release.stdout or "Red Hat Enterprise Linux" in os_release.stdout'
|
||||
- include_tasks: bootstrap-ubuntu.yml
|
||||
when: '"Ubuntu" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-clearlinux.yml
|
||||
when: '"Clear Linux OS" in os_release.stdout'
|
||||
- include_tasks: bootstrap-debian.yml
|
||||
when: '"Debian" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-coreos.yml
|
||||
when: '"CoreOS" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-debian.yml
|
||||
when: '"Debian" in os_release.stdout or "Ubuntu" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-fedora.yml
|
||||
when: '"Fedora" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-centos.yml
|
||||
when: '"CentOS" in os_release.stdout or "Red Hat Enterprise Linux" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-opensuse.yml
|
||||
when: '"openSUSE" in os_release.stdout'
|
||||
|
||||
- include_tasks: bootstrap-clearlinux.yml
|
||||
when: '"Clear Linux OS" in os_release.stdout'
|
||||
|
||||
- name: Create remote_tmp for it is used by another module
|
||||
file:
|
||||
path: "{{ ansible_remote_tmp | default('~/.ansible/tmp') }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
|
||||
# Workaround for https://github.com/ansible/ansible/issues/42726
|
||||
# (1/3)
|
||||
- name: Gather host facts to get ansible_os_family
|
||||
- name: Gather nodes hostnames
|
||||
setup:
|
||||
gather_subset: '!all'
|
||||
filter: ansible_*
|
||||
|
||||
- name: Assign inventory name to unconfigured hostnames (non-CoreOS, Suse and ClearLinux)
|
||||
- name: Assign inventory name to unconfigured hostnames (non-CoreOS and Tumbleweed)
|
||||
hostname:
|
||||
name: "{{ inventory_hostname }}"
|
||||
when:
|
||||
- override_system_hostname
|
||||
- ansible_os_family not in ['Suse', 'Container Linux by CoreOS', 'ClearLinux']
|
||||
- ansible_os_family not in ['Suse', 'CoreOS', 'Container Linux by CoreOS', 'ClearLinux']
|
||||
|
||||
# (2/3)
|
||||
- name: Assign inventory name to unconfigured hostnames (CoreOS, Suse and ClearLinux only)
|
||||
- name: Assign inventory name to unconfigured hostnames (CoreOS and Tumbleweed only)
|
||||
command: "hostnamectl set-hostname {{ inventory_hostname }}"
|
||||
register: hostname_changed
|
||||
changed_when: false
|
||||
when:
|
||||
- override_system_hostname
|
||||
- ansible_os_family in ['Suse', 'Container Linux by CoreOS', 'ClearLinux']
|
||||
- ansible_os_family in ['Suse', 'CoreOS', 'Container Linux by CoreOS', 'ClearLinux']
|
||||
|
||||
# (3/3)
|
||||
- name: Update hostname fact (CoreOS, Suse and ClearLinux only)
|
||||
- name: Update hostname fact (CoreOS and Tumbleweed only)
|
||||
setup:
|
||||
gather_subset: '!all'
|
||||
filter: ansible_hostname
|
||||
when:
|
||||
- override_system_hostname
|
||||
- ansible_os_family in ['Suse', 'Container Linux by CoreOS', 'ClearLinux']
|
||||
|
||||
- name: "Install ceph-commmon package"
|
||||
package:
|
||||
name:
|
||||
- ceph-common
|
||||
state: present
|
||||
when: rbd_provisioner_enabled|default(false)
|
||||
- hostname_changed.changed
|
||||
|
||||
@@ -64,11 +64,7 @@ file_locking = true
|
||||
# This is a mandatory setting as this runtime will be the default one
|
||||
# and will also be used for untrusted container workloads if
|
||||
# runtime_untrusted_workload is not set.
|
||||
{% if ansible_os_family == "ClearLinux" %}
|
||||
runtime = "/usr/bin/runc"
|
||||
{% else %}
|
||||
runtime = "/usr/sbin/runc"
|
||||
{% endif %}
|
||||
|
||||
# runtime_untrusted_workload is the OCI compatible runtime used for untrusted
|
||||
# container workloads. This is an optional setting, except if
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
---
|
||||
crio_packages:
|
||||
- cri-o
|
||||
- cri-tools
|
||||
|
||||
crio_service: cri-o
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
docker_version: '18.09'
|
||||
docker_version: '18.06'
|
||||
docker_selinux_version: '17.03'
|
||||
|
||||
docker_package_info:
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
- Docker | reload systemd
|
||||
- Docker | reload docker.socket
|
||||
- Docker | reload docker
|
||||
- Docker | pause while Docker restarts
|
||||
- Docker | wait for docker
|
||||
|
||||
- name: Docker | reload systemd
|
||||
systemd:
|
||||
daemon_reload: true
|
||||
shell: systemctl daemon-reload
|
||||
|
||||
- name: Docker | reload docker.socket
|
||||
service:
|
||||
@@ -22,9 +22,14 @@
|
||||
name: docker
|
||||
state: restarted
|
||||
|
||||
- name: Docker | pause while Docker restarts
|
||||
pause:
|
||||
seconds: 10
|
||||
prompt: "Waiting for docker restart"
|
||||
|
||||
- name: Docker | wait for docker
|
||||
command: "{{ docker_bin_dir }}/docker images"
|
||||
register: docker_ready
|
||||
retries: 20
|
||||
delay: 1
|
||||
retries: 10
|
||||
delay: 5
|
||||
until: docker_ready.rc == 0
|
||||
|
||||
@@ -43,12 +43,12 @@
|
||||
- name: add system nameservers to docker options
|
||||
set_fact:
|
||||
docker_dns_servers: "{{ docker_dns_servers | union(system_nameservers.stdout_lines) | unique }}"
|
||||
when: system_nameservers.stdout
|
||||
when: system_nameservers.stdout != ""
|
||||
|
||||
- name: add system search domains to docker options
|
||||
set_fact:
|
||||
docker_dns_search_domains: "{{ docker_dns_search_domains | union(system_search_domains.stdout.split()|default([])) | unique }}"
|
||||
when: system_search_domains.stdout
|
||||
when: system_search_domains.stdout != ""
|
||||
|
||||
- name: check number of nameservers
|
||||
fail:
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
when: http_proxy is defined or https_proxy is defined
|
||||
|
||||
- name: get systemd version
|
||||
# noqa 303 - systemctl is called intentionally here
|
||||
shell: systemctl --version | head -n 1 | cut -d " " -f 2
|
||||
register: systemd_version
|
||||
when: not is_atomic
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
Description=Docker Application Container Engine
|
||||
Documentation=http://docs.docker.com
|
||||
{% if ansible_os_family == "RedHat" %}
|
||||
After=network.target {{ ' docker-storage-setup.service' if docker_container_storage_setup else '' }}{{ ' containerd.service' if installed_docker_version.stdout is version('18.09.1', '>=') else '' }}
|
||||
{{ 'Wants=docker-storage-setup.service' if docker_container_storage_setup else '' }}
|
||||
After=network.target docker-storage-setup.service{{ ' containerd.service' if installed_docker_version.stdout is version('18.09.1', '>=') else '' }}
|
||||
Wants=docker-storage-setup.service
|
||||
{% elif ansible_os_family == "Debian" %}
|
||||
After=network.target docker.socket{{ ' containerd.service' if installed_docker_version.stdout is version('18.09.1', '>=') else '' }}
|
||||
Wants=docker.socket
|
||||
|
||||
@@ -5,6 +5,8 @@ docker_kernel_min_version: '3.10'
|
||||
# https://apt.dockerproject.org/repo/dists/debian-wheezy/main/filelist
|
||||
docker_versioned_pkg:
|
||||
'latest': docker-ce
|
||||
'1.11': docker-engine=1.11.2-0~{{ ansible_distribution_release|lower }}
|
||||
'1.12': docker-engine=1.12.6-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'1.13': docker-engine=1.13.1-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'17.03': docker-ce=17.03.2~ce-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'17.06': docker-ce=17.06.2~ce-0~debian
|
||||
@@ -12,9 +14,9 @@ docker_versioned_pkg:
|
||||
'17.12': docker-ce=17.12.1~ce-0~debian
|
||||
'18.03': docker-ce=18.03.1~ce-0~debian
|
||||
'18.06': docker-ce=18.06.2~ce~3-0~debian
|
||||
'18.09': docker-ce=5:18.09.5~3-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'stable': docker-ce=5:18.09.5~3-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'edge': docker-ce=5:18.09.5~3-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'18.09': docker-ce=5:18.09.2~3-0~debian-{{ ansible_distribution_release|lower }}
|
||||
'stable': docker-ce=18.06.2~ce~3-0~debian
|
||||
'edge': docker-ce=17.12.1~ce-0~debian
|
||||
|
||||
docker_package_info:
|
||||
pkg_mgr: apt
|
||||
|
||||
@@ -2,13 +2,11 @@
|
||||
docker_kernel_min_version: '0'
|
||||
|
||||
# https://docs.docker.com/install/linux/docker-ce/fedora/
|
||||
# https://download.docker.com/linux/fedora/28/x86_64/stable/Packages/
|
||||
|
||||
docker_versioned_pkg:
|
||||
'latest': docker-ce
|
||||
'18.03': docker-ce-18.03.1.ce-3.fc28
|
||||
'18.06': docker-ce-18.06.2.ce-3.fc28
|
||||
'18.09': docker-ce-18.09.5-3.fc28
|
||||
|
||||
#
|
||||
# This is due to the fact that the docker
|
||||
|
||||
@@ -7,18 +7,22 @@ docker_kernel_min_version: '0'
|
||||
# or do 'yum --showduplicates list docker-engine'
|
||||
docker_versioned_pkg:
|
||||
'latest': docker-ce
|
||||
'1.11': docker-engine-1.11.2-1.el7.centos
|
||||
'1.12': docker-engine-1.12.6-1.el7.centos
|
||||
'1.13': docker-engine-1.13.1-1.el7.centos
|
||||
'17.03': docker-ce-17.03.2.ce-1.el7.centos
|
||||
'17.09': docker-ce-17.09.0.ce-1.el7.centos
|
||||
'17.12': docker-ce-17.12.1.ce-1.el7.centos
|
||||
'18.03': docker-ce-18.03.1.ce-1.el7.centos
|
||||
'18.06': docker-ce-18.06.2.ce-3.el7
|
||||
'18.09': docker-ce-18.09.5-3.el7
|
||||
'stable': docker-ce-18.09.5-3.el7
|
||||
'edge': docker-ce-18.09.5-3.el7
|
||||
'18.09': docker-ce-18.09.2-3.el7
|
||||
'stable': docker-ce-18.06.2.ce-3.el7
|
||||
'edge': docker-ce-18.09.2-3.el7
|
||||
|
||||
docker_selinux_versioned_pkg:
|
||||
'latest': docker-ce-selinux
|
||||
'1.11': docker-engine-selinux-1.11.2-1.el7.centos
|
||||
'1.12': docker-engine-selinux-1.12.6-1.el7.centos
|
||||
'1.13': docker-engine-selinux-1.13.1-1.el7.centos
|
||||
'17.03': docker-ce-selinux-17.03.2.ce-1.el7.centos
|
||||
'stable': docker-ce-selinux-17.03.2.ce-1.el7.centos
|
||||
|
||||
@@ -11,9 +11,9 @@ docker_versioned_pkg:
|
||||
'17.09': docker-ce=17.09.0~ce-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'17.12': docker-ce=17.12.1~ce-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'18.06': docker-ce=18.06.2~ce~3-0~ubuntu
|
||||
'18.09': docker-ce=5:18.09.5~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'stable': docker-ce=5:18.09.5~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'edge': docker-ce=5:18.09.5~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'18.09': docker-ce=5:18.09.2~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'stable': docker-ce=18.06.2~ce~3-0~ubuntu
|
||||
'edge': docker-ce=5:18.09.2~ce~3-0~ubuntu
|
||||
|
||||
docker_package_info:
|
||||
pkg_mgr: apt
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
---
|
||||
docker_kernel_min_version: '3.10'
|
||||
|
||||
docker_version: 18.06
|
||||
# https://download.docker.com/linux/ubuntu/
|
||||
docker_versioned_pkg:
|
||||
'latest': docker-ce
|
||||
'17.09': docker-ce=17.09.1~ce-0~ubuntu
|
||||
'17.12': docker-ce=17.12.1~ce-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'18.06': docker-ce=18.06.2~ce~3-0~ubuntu
|
||||
'18.09': docker-ce=5:18.09.5~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'stable': docker-ce=5:18.09.5~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'edge': docker-ce=5:18.09.5~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'18.09': docker-ce=5:18.09.2~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
'stable': docker-ce=18.06.2~ce~3-0~ubuntu
|
||||
'edge': docker-ce=5:18.09.2~3-0~ubuntu-{{ ansible_distribution_release|lower }}
|
||||
|
||||
docker_package_info:
|
||||
pkg_mgr: apt
|
||||
|
||||
@@ -7,9 +7,17 @@ dependencies:
|
||||
- container-engine
|
||||
- crio
|
||||
|
||||
- role: container-engine/rkt
|
||||
when:
|
||||
- container_manager == 'rkt'
|
||||
tags:
|
||||
- container-engine
|
||||
- rkt
|
||||
|
||||
- role: container-engine/docker
|
||||
when:
|
||||
- container_manager == 'docker'
|
||||
- container_manager == 'docker' or container_manager == "rkt"
|
||||
tags:
|
||||
- container-engine
|
||||
- docker
|
||||
- rkt
|
||||
|
||||
6
roles/container-engine/rkt/defaults/main.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
|
||||
rkt_version: 1.21.0
|
||||
rkt_pkg_version: "{{ rkt_version }}-1"
|
||||
rkt_download_src: https://github.com/coreos/rkt
|
||||
rkt_download_url: "{{ rkt_download_src }}/releases/download/v{{ rkt_version }}"
|
||||
2
roles/container-engine/rkt/files/rkt-gc.sh
Normal file
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
rkt gc
|
||||
54
roles/container-engine/rkt/tasks/install.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
- name: gather os specific variables for rkt
|
||||
include_vars: "{{ item }}"
|
||||
with_first_found:
|
||||
- files:
|
||||
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_version|lower|replace('/', '_') }}.yml"
|
||||
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}.yml"
|
||||
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_major_version|lower|replace('/', '_') }}.yml"
|
||||
- "{{ ansible_distribution|lower }}.yml"
|
||||
- "{{ ansible_os_family|lower }}.yml"
|
||||
- defaults.yml
|
||||
paths:
|
||||
- ../vars
|
||||
skip: true
|
||||
tags:
|
||||
- facts
|
||||
|
||||
- name: install rkt pkg on ubuntu
|
||||
apt:
|
||||
deb: "{{ rkt_download_url }}/{{ rkt_pkg_name }}"
|
||||
state: present
|
||||
register: rkt_task_result
|
||||
until: rkt_task_result is succeeded
|
||||
retries: 4
|
||||
delay: "{{ retry_stagger | random + 3 }}"
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: install rkt pkg on fedora
|
||||
dnf:
|
||||
name: rkt
|
||||
state: present
|
||||
when: ansible_distribution == "Fedora"
|
||||
|
||||
- name: install rkt pkg on centos
|
||||
yum:
|
||||
pkg: "{{ rkt_download_url }}/{{ rkt_pkg_name }}"
|
||||
state: present
|
||||
register: rkt_task_result
|
||||
until: rkt_task_result is succeeded
|
||||
retries: 4
|
||||
delay: "{{ retry_stagger | random + 3 }}"
|
||||
when:
|
||||
- ansible_os_family == "RedHat"
|
||||
- ansible_distribution != "Fedora"
|
||||
|
||||
- name: install rkt pkg on openSUSE
|
||||
zypper:
|
||||
name: "{{ rkt_download_url }}/{{ rkt_pkg_name }}"
|
||||
state: present
|
||||
register: rkt_task_result
|
||||
until: rkt_task_result is succeeded
|
||||
retries: 4
|
||||
delay: "{{ retry_stagger | random + 3 }}"
|
||||
when: ansible_os_family == "Suse"
|
||||
13
roles/container-engine/rkt/tasks/main.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Install rkt
|
||||
import_tasks: install.yml
|
||||
when: not ansible_os_family in ["CoreOS", "Container Linux by CoreOS"]
|
||||
|
||||
- name: Set up cron job to do garbage cleanup
|
||||
copy:
|
||||
src: rkt-gc.sh
|
||||
dest: /etc/cron.hourly/rkt-gc.sh
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0750
|
||||
when: not ansible_os_family in ["CoreOS", "Container Linux by CoreOS"]
|
||||
2
roles/container-engine/rkt/vars/debian.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
rkt_pkg_name: "rkt_{{ rkt_pkg_version }}_amd64.deb"
|
||||