28 | ```
29 |
--------------------------------------------------------------------------------
/docs/images/ansible_arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/ansible_arch.png
--------------------------------------------------------------------------------
/docs/images/ansible_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/ansible_logo.png
--------------------------------------------------------------------------------
/docs/images/console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/console.png
--------------------------------------------------------------------------------
/docs/images/emacs_00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/emacs_00.png
--------------------------------------------------------------------------------
/docs/images/emacs_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/emacs_01.png
--------------------------------------------------------------------------------
/docs/images/galaxy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/galaxy.png
--------------------------------------------------------------------------------
/docs/images/ursula.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/ursula.jpg
--------------------------------------------------------------------------------
/docs/images/vagrant_cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/vagrant_cloud.png
--------------------------------------------------------------------------------
/docs/images/virtualbox_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/virtualbox_01.png
--------------------------------------------------------------------------------
/docs/images/virtualbox_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/virtualbox_02.png
--------------------------------------------------------------------------------
/docs/images/virtualbox_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/docs/images/virtualbox_03.png
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | # Tutorial introdutório de Ansible :snake:
2 |
3 | [:fontawesome-brands-youtube: Vídeo](https://youtu.be/Rf1GDT8wiFU){ .md-button }
4 | [:fontawesome-solid-code: Repositório](https://github.com/dunossauro/ansible-lab){ .md-button }
5 |
6 | O objetivo desse repositório é ajudar você a construir um laboratório para aprender o básico sobre Ansible.
7 |
8 | Ele foi criado para uma [Live de Python](https://www.youtube.com/@Dunossauro) no Youtube. Mas nada impede que você siga somente pelo texto se assim achar necessário.
9 |
10 | Caso prefira a versão em vídeo, pode assistir por aqui:
11 |
12 | 
13 |
14 | ## Nosso roteiro
15 | - [00 - Jabá](/00_jaba)
16 | - [01 - Configuração do ambiente](/01_configuracao_do_ambiente)
17 | - [02 - O básico necessário sobre Vagrant](/02_o_basico_necessario_sobre_vagrant)
18 | - [03 - Ansible básico](/03_ansible_basico)
19 | - [04 - Entendendo a estrutura do Ansible](/04_configuracao_do_ansible)
20 | - [05 - Playbooks](/05_playbooks)
21 | - [06 - Taks](/06_tasks)
22 | - [07 - Ansible Galaxy](/07_ansible_galaxy)
23 |
24 | ## O que preciso para acompanhar esse tutorial?
25 |
26 | O básico de Python, pois farei diversas analogias e um computador com pelo menos 8 gigas de memória RAM para subir as máquinas virtuais que vamos configurar durante o tutorial.
27 |
28 | ## Navegação
29 |
30 | Você pode navegar entre as páginas desse tutorial apertando as teclas `.` para ir para próxima página e `,` para voltar para página anterior.
31 |
32 | ## Caso encontre algum problema
33 |
34 | Se encontrar algum problema nesse material, como erros, sinta-se a vontade para enviar correções no [repositório do projeto](https://github.com/dunossauro/ansible-lab). Se precisar me contatar, pode me encontrar [nesse link](https://dunossauro.com){:target="_blank"}
35 |
--------------------------------------------------------------------------------
/docs/overrides/main.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | {{ super() }}
5 |
6 | {% if git_page_authors %}
7 |
8 |
9 | Authors: {{ git_page_authors | default('enable mkdocs-git-authors-plugin') }}
10 |
11 |
12 | {% endif %}
13 | {% endblock %}
14 |
--------------------------------------------------------------------------------
/docs/referencias.md:
--------------------------------------------------------------------------------
1 | # Referências
2 |
3 | - [Documentação do Ansible](https://docs.ansible.com/ansible/latest/index.html)
4 | - [Documentação do Pacman](https://wiki.archlinux.org/title/Pacman)
5 | - [Documentação do Vagrant](https://developer.hashicorp.com/vagrant/docs)
6 | - [Pergunta sobre redimensionamento de disco no Vagrant (Stackoverflow)](https://stackoverflow.com/questions/58232223/how-to-increase-disk-space-of-virtual-machine-created-by-vagrant)
7 |
--------------------------------------------------------------------------------
/docs/stylesheets/extra.css:
--------------------------------------------------------------------------------
1 | .center {
2 | display: block;
3 | margin-left: auto;
4 | margin-right: auto;
5 | }
6 |
7 | .shadow {
8 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
9 | }
10 |
11 |
12 | .shadow-png {
13 | filter: drop-shadow(3px 3px 3px #222);
14 | }
15 |
16 |
17 | .sbs {
18 | /* side-by-side grid
19 | img | text
20 | or
21 | text | img */
22 | display: grid;
23 | column-gap: 20px;
24 | grid-template-columns: auto auto;
25 | align-items: center;
26 | }
27 |
--------------------------------------------------------------------------------
/images/console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/images/console.png
--------------------------------------------------------------------------------
/images/virtualbox_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/images/virtualbox_01.png
--------------------------------------------------------------------------------
/images/virtualbox_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/images/virtualbox_02.png
--------------------------------------------------------------------------------
/images/virtualbox_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/images/virtualbox_03.png
--------------------------------------------------------------------------------
/mkdocs.yml:
--------------------------------------------------------------------------------
1 | site_name: Ansible lab
2 | repo_url: https://github.com/dunossauro/ansible-lab
3 | repo_name: dunossauro/ansible-lab
4 | docs_dir: docs
5 | edit_uri: tree/main/docs
6 |
7 | theme:
8 | name: material
9 | custom_dir: docs/overrides
10 | language: pt
11 | logo: images/ansible_logo.png
12 | favicon: images/ansible_logo.png
13 | features:
14 | - content.tabs.link
15 | icon:
16 | repo: fontawesome/brands/git-alt
17 | palette:
18 | - scheme: default
19 | toggle:
20 | icon: material/brightness-7
21 | name: Switch to dark mode
22 | - scheme: slate
23 | toggle:
24 | icon: material/brightness-4
25 | name: Switch to light mode
26 |
27 |
28 | extra_css:
29 | - stylesheets/extra.css
30 |
31 | markdown_extensions:
32 | - pymdownx.critic
33 | - pymdownx.highlight:
34 | anchor_linenums: true
35 | - pymdownx.inlinehilite
36 | - pymdownx.snippets
37 | - pymdownx.superfences
38 | - pymdownx.details
39 | - footnotes
40 | - admonition
41 | - markdown.extensions.attr_list
42 | - pymdownx.tabbed:
43 | alternate_style: true
44 | - attr_list
45 | - pymdownx.emoji:
46 | emoji_index: !!python/name:materialx.emoji.twemoji
47 | emoji_generator: !!python/name:materialx.emoji.to_svg
48 | - md_in_html
49 |
50 | extra:
51 | social:
52 | - icon: fontawesome/brands/github
53 | link: https://github.com/dunossauro
54 | - icon: fontawesome/brands/twitter
55 | link: https://twitter.com/dunossauro
56 | - icon: fontawesome/brands/youtube
57 | link: https://youtube.com/dunossauro
58 | - icon: fontawesome/brands/instagram
59 | link: https://instagram.com/dunossauro
60 | - icon: fontawesome/brands/tiktok
61 | link: https://www.tiktok.com/@dunossauro
62 |
63 | plugins:
64 | - search:
65 | lang: pt
66 | - git-authors:
67 | show_email_address: false
68 | show_line_count: true
69 | - mkdocs-video
70 |
--------------------------------------------------------------------------------
/playbooks/arch_base_packages.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Pacotes de base
3 | hosts: test
4 | become: yes
5 |
6 | tasks:
7 | - name: install build tools
8 | package:
9 | name: base-devel
10 | state: present
11 |
12 | - name: install git
13 | package:
14 | name: git
15 | state: present
16 |
--------------------------------------------------------------------------------
/playbooks/config_python.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Configuração do ambiente python
3 | hosts: linux
4 |
5 | tasks:
6 | - name: Install git
7 | become: yes
8 | package:
9 | name: git
10 | state: present
11 |
12 | - name: Clone Pyenv
13 | git:
14 | repo: https://github.com/pyenv/pyenv.git
15 | dest: ~/.pyenv
16 |
17 | - name: Install build dependencies (ubuntu)
18 | when: ansible_distribution == 'Ubuntu'
19 | become: yes
20 | apt:
21 | update_cache: yes
22 | pkg:
23 | - make
24 | - build-essential
25 | - libssl-dev
26 | - zlib1g-dev
27 | - libbz2-dev
28 | - libreadline-dev
29 | - libsqlite3-dev
30 | - wget
31 | - curl
32 | - llvm
33 | - libncursesw5-dev
34 | - xz-utils
35 | - tk-dev
36 | - libxml2-dev
37 | - libxmlsec1-dev
38 | - libffi-dev
39 | - liblzma-dev
40 |
41 | - name: Install build dependencies (arch)
42 | when: ansible_distribution == 'Archlinux'
43 | become: yes
44 | pacman:
45 | update_cache: yes
46 | name:
47 | - base-devel
48 | - openssl
49 | - zlib
50 | - xz
51 | - tk
52 |
53 | - name: Config pyenv
54 | blockinfile:
55 | dest: ~/.bashrc
56 | block: |
57 | echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
58 | echo 'eval "$(pyenv init -)"' >>~/.bashrc
59 | echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
60 | echo 'PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
61 |
62 | - name: Show bashrc
63 | shell: cat ~/.bashrc
64 | register: bashrc
65 |
66 | - name: Checking bashrc
67 | debug:
68 | msg: "{{ bashrc.stdout.split('\n') }}"
69 |
70 | - block:
71 | - name: install python3.11
72 | shell: ~/.pyenv/bin/pyenv install -s 3.11:latest
73 | register: pyenv_result
74 | rescue:
75 | - name: Debug pyenv fail
76 | debug:
77 | msg: "{{pyenv_result.stderr.split('\n') }}"
78 | when: pyenv_result.failed
79 |
--------------------------------------------------------------------------------
/playbooks/emacs.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Instalação e configuração do emacs
3 | hosts: localhost # Aqui mudamos para o localhost
4 |
5 | tasks:
6 | - name: Instalação do emacs
7 |
8 | become: yes # Diferente da outra config, somente esse passo será como root
9 |
10 | package:
11 | state: present
12 | name: emacs
13 |
14 | - name: Instalação do git
15 | become: yes
16 | package:
17 | name: git
18 | state: present
19 |
20 | - name: Clone do nosso repositório
21 | git:
22 | repo: https://github.com/dunossauro/dotfiles.git
23 | dest: config_files
24 |
25 | - name: Movendo os arquivos de configuração do emacs
26 | copy:
27 | dest: /home/vagrant/
28 | src: /home/vagrant/config_files/.emacs.d
29 |
30 |
--------------------------------------------------------------------------------
/playbooks/pipx_httpie.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Instalação do pipx e httpie
3 | hosts: linux
4 |
5 | tasks:
6 | - name: Instalação do pipx
7 | become: yes
8 | package:
9 | name: '{{ pipx }}'
10 | state: present
11 |
--------------------------------------------------------------------------------
/playbooks/play_tasks.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Configura o ambiente de desenvolvimento
3 | hosts: linux
4 | gather_facts: true
5 |
6 |
7 | tasks:
8 | - name: Dependências de desenvolvimento
9 | become: true
10 | import_tasks: tasks/dev_env.yml
11 |
12 | roles:
13 | - role: staticdev.pyenv
14 | pyenv_env: user
15 | pyenv_global:
16 | - 3.11.0
17 | pyenv_python_versions:
18 | - 3.11.0
19 |
--------------------------------------------------------------------------------
/playbooks/requirements.yml:
--------------------------------------------------------------------------------
1 | collections:
2 | - name: kewlfft.aur
3 | roles:
4 | - name: staticdev.pyenv
5 |
--------------------------------------------------------------------------------
/playbooks/tasks/dev_env.yml:
--------------------------------------------------------------------------------
1 | - name: Install git
2 | become: yes
3 | package:
4 | name: git
5 | state: present
6 |
7 | - name: Install build dependencies (ubuntu)
8 | when: ansible_distribution == 'Ubuntu'
9 | become: yes
10 | apt:
11 | update_cache: yes
12 | pkg:
13 | - make
14 | - build-essential
15 | - libssl-dev
16 | - zlib1g-dev
17 | - libbz2-dev
18 | - libreadline-dev
19 | - libsqlite3-dev
20 | - wget
21 | - curl
22 | - llvm
23 | - libncursesw5-dev
24 | - xz-utils
25 | - tk-dev
26 | - libxml2-dev
27 | - libxmlsec1-dev
28 | - libffi-dev
29 | - liblzma-dev
30 |
31 | - name: Install build dependencies (arch)
32 | when: ansible_distribution == 'Archlinux'
33 | become: yes
34 | pacman:
35 | update_cache: yes
36 | name:
37 | - base-devel
38 | - openssl
39 | - zlib
40 | - xz
41 | - tk
42 |
--------------------------------------------------------------------------------
/playbooks/tasks/py_311.yml:
--------------------------------------------------------------------------------
1 | - block:
2 | - name: install python3.11
3 | shell: ~/.pyenv/bin/pyenv install -s 3.11:latest
4 | register: pyenv_result
5 | rescue:
6 | - name: Debug pyenv fail
7 | debug:
8 | msg: "{{pyenv_result.stderr.split('\n') }}"
9 | when: pyenv_result.failed
10 |
--------------------------------------------------------------------------------
/playbooks/tasks/pyenv.yml:
--------------------------------------------------------------------------------
1 | - name: Clone Pyenv
2 | git:
3 | repo: https://github.com/pyenv/pyenv.git
4 | dest: ~/.pyenv
5 |
6 | - name: Config pyenv
7 | blockinfile:
8 | dest: ~/.bashrc
9 | block: |
10 | echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
11 | echo 'eval "$(pyenv init -)"' >>~/.bashrc
12 | echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
13 | echo 'PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
14 |
--------------------------------------------------------------------------------
/playbooks/variaveis.yml:
--------------------------------------------------------------------------------
1 | ---
2 | pipx: "{{ 'pipx' if ansible_distribution == 'Ubuntu' else 'python-pipx'}}"
3 |
--------------------------------------------------------------------------------
/playbooks/web_server.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Instalação do nginx
3 | hosts: linux # Grupo de hosts do inventário
4 | become: yes # Diz que vai escalonar privilégios. Equivalente ao {==-b==)
5 |
6 | tasks: # Descrição das tarefas que serão executadas
7 |
8 | - name: Instalação do nginx # Nome da tarefa
9 | package: # Nome do módulo
10 | # Argumentos do módulo
11 | state: present
12 | name: nginx
13 |
14 | - name: Inicialização do nginx
15 | systemd:
16 | state: started
17 | name: nginx
18 |
--------------------------------------------------------------------------------
/poetry.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
2 |
3 | [[package]]
4 | name = "certifi"
5 | version = "2022.9.24"
6 | description = "Python package for providing Mozilla's CA Bundle."
7 | optional = false
8 | python-versions = ">=3.6"
9 | files = [
10 | {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"},
11 | {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"},
12 | ]
13 |
14 | [[package]]
15 | name = "charset-normalizer"
16 | version = "2.1.1"
17 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
18 | optional = false
19 | python-versions = ">=3.6.0"
20 | files = [
21 | {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"},
22 | {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"},
23 | ]
24 |
25 | [package.extras]
26 | unicode-backport = ["unicodedata2"]
27 |
28 | [[package]]
29 | name = "click"
30 | version = "8.1.3"
31 | description = "Composable command line interface toolkit"
32 | optional = false
33 | python-versions = ">=3.7"
34 | files = [
35 | {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
36 | {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
37 | ]
38 |
39 | [package.dependencies]
40 | colorama = {version = "*", markers = "platform_system == \"Windows\""}
41 |
42 | [[package]]
43 | name = "colorama"
44 | version = "0.4.6"
45 | description = "Cross-platform colored terminal text."
46 | optional = false
47 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
48 | files = [
49 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
50 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
51 | ]
52 |
53 | [[package]]
54 | name = "ghp-import"
55 | version = "2.1.0"
56 | description = "Copy your docs directly to the gh-pages branch."
57 | optional = false
58 | python-versions = "*"
59 | files = [
60 | {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
61 | {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
62 | ]
63 |
64 | [package.dependencies]
65 | python-dateutil = ">=2.8.1"
66 |
67 | [package.extras]
68 | dev = ["flake8", "markdown", "twine", "wheel"]
69 |
70 | [[package]]
71 | name = "idna"
72 | version = "3.4"
73 | description = "Internationalized Domain Names in Applications (IDNA)"
74 | optional = false
75 | python-versions = ">=3.5"
76 | files = [
77 | {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
78 | {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
79 | ]
80 |
81 | [[package]]
82 | name = "jinja2"
83 | version = "3.1.2"
84 | description = "A very fast and expressive template engine."
85 | optional = false
86 | python-versions = ">=3.7"
87 | files = [
88 | {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
89 | {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
90 | ]
91 |
92 | [package.dependencies]
93 | MarkupSafe = ">=2.0"
94 |
95 | [package.extras]
96 | i18n = ["Babel (>=2.7)"]
97 |
98 | [[package]]
99 | name = "markdown"
100 | version = "3.3.7"
101 | description = "Python implementation of Markdown."
102 | optional = false
103 | python-versions = ">=3.6"
104 | files = [
105 | {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"},
106 | {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"},
107 | ]
108 |
109 | [package.extras]
110 | testing = ["coverage", "pyyaml"]
111 |
112 | [[package]]
113 | name = "markupsafe"
114 | version = "2.1.1"
115 | description = "Safely add untrusted strings to HTML/XML markup."
116 | optional = false
117 | python-versions = ">=3.7"
118 | files = [
119 | {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
120 | {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
121 | {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
122 | {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
123 | {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
124 | {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
125 | {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
126 | {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
127 | {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
128 | {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
129 | {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
130 | {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
131 | {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
132 | {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
133 | {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
134 | {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
135 | {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
136 | {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
137 | {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
138 | {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
139 | {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
140 | {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
141 | {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
142 | {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
143 | {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
144 | {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
145 | {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
146 | {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
147 | {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
148 | {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
149 | {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
150 | {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
151 | {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
152 | {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
153 | {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
154 | {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
155 | {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
156 | {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
157 | {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
158 | {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
159 | ]
160 |
161 | [[package]]
162 | name = "mergedeep"
163 | version = "1.3.4"
164 | description = "A deep merge function for 🐍."
165 | optional = false
166 | python-versions = ">=3.6"
167 | files = [
168 | {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
169 | {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
170 | ]
171 |
172 | [[package]]
173 | name = "mkdocs"
174 | version = "1.4.2"
175 | description = "Project documentation with Markdown."
176 | optional = false
177 | python-versions = ">=3.7"
178 | files = [
179 | {file = "mkdocs-1.4.2-py3-none-any.whl", hash = "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"},
180 | {file = "mkdocs-1.4.2.tar.gz", hash = "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5"},
181 | ]
182 |
183 | [package.dependencies]
184 | click = ">=7.0"
185 | colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
186 | ghp-import = ">=1.0"
187 | jinja2 = ">=2.11.1"
188 | markdown = ">=3.2.1,<3.4"
189 | mergedeep = ">=1.3.4"
190 | packaging = ">=20.5"
191 | pyyaml = ">=5.1"
192 | pyyaml-env-tag = ">=0.1"
193 | watchdog = ">=2.0"
194 |
195 | [package.extras]
196 | i18n = ["babel (>=2.9.0)"]
197 | min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"]
198 |
199 | [[package]]
200 | name = "mkdocs-git-authors-plugin"
201 | version = "0.7.2"
202 | description = "Mkdocs plugin to display git authors of a page"
203 | optional = false
204 | python-versions = ">=3.7"
205 | files = [
206 | {file = "mkdocs-git-authors-plugin-0.7.2.tar.gz", hash = "sha256:f541730e4cabdafa0ac758c94d28ba5e8ddca4c859e5de4c89f1226cb6ccd0ad"},
207 | {file = "mkdocs_git_authors_plugin-0.7.2-py3-none-any.whl", hash = "sha256:c8a2784a867db79ad3b477a96ee96875d17b09192b6d3be71f08df25afff76c4"},
208 | ]
209 |
210 | [package.dependencies]
211 | mkdocs = ">=1.0"
212 |
213 | [[package]]
214 | name = "mkdocs-material"
215 | version = "8.5.10"
216 | description = "Documentation that simply works"
217 | optional = false
218 | python-versions = ">=3.7"
219 | files = [
220 | {file = "mkdocs_material-8.5.10-py3-none-any.whl", hash = "sha256:51760fa4c9ee3ca0b3a661ec9f9817ec312961bb84ff19e5b523fdc5256e1d6c"},
221 | {file = "mkdocs_material-8.5.10.tar.gz", hash = "sha256:7623608f746c6d9ff68a8ef01f13eddf32fa2cae5e15badb251f26d1196bc8f1"},
222 | ]
223 |
224 | [package.dependencies]
225 | jinja2 = ">=3.0.2"
226 | markdown = ">=3.2"
227 | mkdocs = ">=1.4.0"
228 | mkdocs-material-extensions = ">=1.1"
229 | pygments = ">=2.12"
230 | pymdown-extensions = ">=9.4"
231 | requests = ">=2.26"
232 |
233 | [[package]]
234 | name = "mkdocs-material-extensions"
235 | version = "1.1"
236 | description = "Extension pack for Python Markdown and MkDocs Material."
237 | optional = false
238 | python-versions = ">=3.7"
239 | files = [
240 | {file = "mkdocs_material_extensions-1.1-py3-none-any.whl", hash = "sha256:bcc2e5fc70c0ec50e59703ee6e639d87c7e664c0c441c014ea84461a90f1e902"},
241 | {file = "mkdocs_material_extensions-1.1.tar.gz", hash = "sha256:96ca979dae66d65c2099eefe189b49d5ac62f76afb59c38e069ffc7cf3c131ec"},
242 | ]
243 |
244 | [[package]]
245 | name = "mkdocs-video"
246 | version = "1.3.0"
247 | description = ""
248 | optional = false
249 | python-versions = ">=3.6"
250 | files = [
251 | {file = "mkdocs-video-1.3.0.tar.gz", hash = "sha256:900a7da60aff6d313d3aec47348bb7c87ec2ad39bad27a1146fa153fafd61e44"},
252 | {file = "mkdocs_video-1.3.0-py3-none-any.whl", hash = "sha256:6512887d65e65f4fb643b64e3f4cc7e365ce27d0ff4c4b48de8d91b04ea89731"},
253 | ]
254 |
255 | [package.dependencies]
256 | mkdocs = ">=1.1.0,<2"
257 |
258 | [[package]]
259 | name = "packaging"
260 | version = "21.3"
261 | description = "Core utilities for Python packages"
262 | optional = false
263 | python-versions = ">=3.6"
264 | files = [
265 | {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
266 | {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
267 | ]
268 |
269 | [package.dependencies]
270 | pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
271 |
272 | [[package]]
273 | name = "pygments"
274 | version = "2.13.0"
275 | description = "Pygments is a syntax highlighting package written in Python."
276 | optional = false
277 | python-versions = ">=3.6"
278 | files = [
279 | {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"},
280 | {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"},
281 | ]
282 |
283 | [package.extras]
284 | plugins = ["importlib-metadata"]
285 |
286 | [[package]]
287 | name = "pymdown-extensions"
288 | version = "9.8"
289 | description = "Extension pack for Python Markdown."
290 | optional = false
291 | python-versions = ">=3.7"
292 | files = [
293 | {file = "pymdown_extensions-9.8-py3-none-any.whl", hash = "sha256:8e62688a8b1128acd42fa823f3d429d22f4284b5e6dd4d3cd56721559a5a211b"},
294 | {file = "pymdown_extensions-9.8.tar.gz", hash = "sha256:1bd4a173095ef8c433b831af1f3cb13c10883be0c100ae613560668e594651f7"},
295 | ]
296 |
297 | [package.dependencies]
298 | markdown = ">=3.2"
299 |
300 | [[package]]
301 | name = "pyparsing"
302 | version = "3.0.9"
303 | description = "pyparsing module - Classes and methods to define and execute parsing grammars"
304 | optional = false
305 | python-versions = ">=3.6.8"
306 | files = [
307 | {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
308 | {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
309 | ]
310 |
311 | [package.extras]
312 | diagrams = ["jinja2", "railroad-diagrams"]
313 |
314 | [[package]]
315 | name = "python-dateutil"
316 | version = "2.8.2"
317 | description = "Extensions to the standard Python datetime module"
318 | optional = false
319 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
320 | files = [
321 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
322 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
323 | ]
324 |
325 | [package.dependencies]
326 | six = ">=1.5"
327 |
328 | [[package]]
329 | name = "pyyaml"
330 | version = "6.0"
331 | description = "YAML parser and emitter for Python"
332 | optional = false
333 | python-versions = ">=3.6"
334 | files = [
335 | {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
336 | {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
337 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
338 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
339 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
340 | {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
341 | {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
342 | {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
343 | {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
344 | {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
345 | {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
346 | {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
347 | {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
348 | {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
349 | {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
350 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
351 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
352 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
353 | {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
354 | {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
355 | {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
356 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
357 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
358 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
359 | {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
360 | {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
361 | {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
362 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
363 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
364 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
365 | {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
366 | {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
367 | {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
368 | {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
369 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
370 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
371 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
372 | {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
373 | {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
374 | {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
375 | ]
376 |
377 | [[package]]
378 | name = "pyyaml-env-tag"
379 | version = "0.1"
380 | description = "A custom YAML tag for referencing environment variables in YAML files. "
381 | optional = false
382 | python-versions = ">=3.6"
383 | files = [
384 | {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"},
385 | {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"},
386 | ]
387 |
388 | [package.dependencies]
389 | pyyaml = "*"
390 |
391 | [[package]]
392 | name = "requests"
393 | version = "2.28.1"
394 | description = "Python HTTP for Humans."
395 | optional = false
396 | python-versions = ">=3.7, <4"
397 | files = [
398 | {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"},
399 | {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"},
400 | ]
401 |
402 | [package.dependencies]
403 | certifi = ">=2017.4.17"
404 | charset-normalizer = ">=2,<3"
405 | idna = ">=2.5,<4"
406 | urllib3 = ">=1.21.1,<1.27"
407 |
408 | [package.extras]
409 | socks = ["PySocks (>=1.5.6,!=1.5.7)"]
410 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
411 |
412 | [[package]]
413 | name = "six"
414 | version = "1.16.0"
415 | description = "Python 2 and 3 compatibility utilities"
416 | optional = false
417 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
418 | files = [
419 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
420 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
421 | ]
422 |
423 | [[package]]
424 | name = "urllib3"
425 | version = "1.26.12"
426 | description = "HTTP library with thread-safe connection pooling, file post, and more."
427 | optional = false
428 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4"
429 | files = [
430 | {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"},
431 | {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"},
432 | ]
433 |
434 | [package.extras]
435 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
436 | secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
437 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
438 |
439 | [[package]]
440 | name = "watchdog"
441 | version = "2.1.9"
442 | description = "Filesystem events monitoring"
443 | optional = false
444 | python-versions = ">=3.6"
445 | files = [
446 | {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330"},
447 | {file = "watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d"},
448 | {file = "watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"},
449 | {file = "watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591"},
450 | {file = "watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33"},
451 | {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846"},
452 | {file = "watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3"},
453 | {file = "watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654"},
454 | {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39"},
455 | {file = "watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7"},
456 | {file = "watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd"},
457 | {file = "watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3"},
458 | {file = "watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d"},
459 | {file = "watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9"},
460 | {file = "watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213"},
461 | {file = "watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl", hash = "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892"},
462 | {file = "watchdog-2.1.9-py3-none-manylinux2014_i686.whl", hash = "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153"},
463 | {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl", hash = "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306"},
464 | {file = "watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412"},
465 | {file = "watchdog-2.1.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1"},
466 | {file = "watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6"},
467 | {file = "watchdog-2.1.9-py3-none-win32.whl", hash = "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1"},
468 | {file = "watchdog-2.1.9-py3-none-win_amd64.whl", hash = "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c"},
469 | {file = "watchdog-2.1.9-py3-none-win_ia64.whl", hash = "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428"},
470 | {file = "watchdog-2.1.9.tar.gz", hash = "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609"},
471 | ]
472 |
473 | [package.extras]
474 | watchmedo = ["PyYAML (>=3.10)"]
475 |
476 | [metadata]
477 | lock-version = "2.0"
478 | python-versions = "^3.11"
479 | content-hash = "1a9a06ed3143d70638372f9d915c27b9a9e1b5ab915d230007a7b862de8a9f6a"
480 |
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.poetry]
2 | name = "ansible-lab"
3 | version = "0.1.0"
4 | description = ""
5 | authors = ["dunossauro "]
6 | readme = "README.md"
7 | packages = [{include = "ansible_lab"}]
8 |
9 | [tool.poetry.dependencies]
10 | python = "^3.11"
11 | mkdocs = "^1.4.2"
12 | mkdocs-material = "^8.5.10"
13 | pymdown-extensions = "^9.8"
14 | mkdocs-video = "^1.3.0"
15 | mkdocs-git-authors-plugin = "^0.7.2"
16 |
17 |
18 | [build-system]
19 | requires = ["poetry-core"]
20 | build-backend = "poetry.core.masonry.api"
21 |
--------------------------------------------------------------------------------
/stuff/TODO.md:
--------------------------------------------------------------------------------
1 | # Coisas que ainda preciso fazer nesse repo
2 |
3 | 1. Adicionar uma introdução teórica ao Ansible
4 | 2. Explicar o inventário
5 | 3. Comandos ad-hoc
6 | 4. Playbooks
7 | 5. Tasks
8 | 5. Galaxy
9 |
10 |
11 | ## Adicionais
12 | - Explicar o env que tem no `Vagrantfile` do repo (arquivo vagrant.md)
13 | - Passo a passo da configuração do env pelos scripts
14 |
--------------------------------------------------------------------------------
/stuff/draws/ansible_arch.odg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dunossauro/ansible-lab/338eb8f21f461c2c94e7dacd9c7e5fd92600515a/stuff/draws/ansible_arch.odg
--------------------------------------------------------------------------------
/stuff/env_up.sh:
--------------------------------------------------------------------------------
1 | vagrant up
2 | bash arch_scripts/get_vagrant_ips.sh > ansible_hosts
3 | vagrant ssh ansible_main -c "sudo pacman -Sy ansible sshpass --noconfirm --needed"
4 | vagrant ssh ansible_main -c "sudo cp /vagrant/ansible_hosts /etc/ansible/hosts"
5 | vagrant ssh ansible_main -c 'ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ""'
6 | vagrant ssh ansible_main -c "bash /vagrant/arch_scripts/ips_from_hosts.sh"
7 |
--------------------------------------------------------------------------------
/stuff/resposta_ubuntu_setup.txt:
--------------------------------------------------------------------------------
1 | 192.168.15.119 | SUCCESS => {
2 | "ansible_facts": {
3 | "ansible_all_ipv4_addresses": [
4 | "192.168.15.119",
5 | "10.0.2.15"
6 | ],
7 | "ansible_all_ipv6_addresses": [
8 | "fe80::a00:27ff:fea0:f6f7",
9 | "fe80::9a:94ff:fec9:30e2"
10 | ],
11 | "ansible_apparmor": {
12 | "status": "enabled"
13 | },
14 | "ansible_architecture": "x86_64",
15 | "ansible_bios_date": "12/01/2006",
16 | "ansible_bios_vendor": "innotek GmbH",
17 | "ansible_bios_version": "VirtualBox",
18 | "ansible_board_asset_tag": "NA",
19 | "ansible_board_name": "VirtualBox",
20 | "ansible_board_serial": "NA",
21 | "ansible_board_vendor": "Oracle Corporation",
22 | "ansible_board_version": "1.2",
23 | "ansible_chassis_asset_tag": "NA",
24 | "ansible_chassis_serial": "NA",
25 | "ansible_chassis_vendor": "Oracle Corporation",
26 | "ansible_chassis_version": "NA",
27 | "ansible_cmdline": {
28 | "BOOT_IMAGE": "/boot/vmlinuz-5.4.0-131-generic",
29 | "console": "ttyS0",
30 | "ro": true,
31 | "root": "UUID=6bc3f1bb-8d64-4732-b839-77c17626afa8"
32 | },
33 | "ansible_date_time": {
34 | "date": "2022-11-16",
35 | "day": "16",
36 | "epoch": "1668557587",
37 | "epoch_int": "1668557587",
38 | "hour": "00",
39 | "iso8601": "2022-11-16T00:13:07Z",
40 | "iso8601_basic": "20221116T001307901111",
41 | "iso8601_basic_short": "20221116T001307",
42 | "iso8601_micro": "2022-11-16T00:13:07.901111Z",
43 | "minute": "13",
44 | "month": "11",
45 | "second": "07",
46 | "time": "00:13:07",
47 | "tz": "UTC",
48 | "tz_dst": "UTC",
49 | "tz_offset": "+0000",
50 | "weekday": "Wednesday",
51 | "weekday_number": "3",
52 | "weeknumber": "46",
53 | "year": "2022"
54 | },
55 | "ansible_default_ipv4": {
56 | "address": "10.0.2.15",
57 | "alias": "enp0s3",
58 | "broadcast": "10.0.2.255",
59 | "gateway": "10.0.2.2",
60 | "interface": "enp0s3",
61 | "macaddress": "02:9a:94:c9:30:e2",
62 | "mtu": 1500,
63 | "netmask": "255.255.255.0",
64 | "network": "10.0.2.0",
65 | "prefix": "24",
66 | "type": "ether"
67 | },
68 | "ansible_default_ipv6": {},
69 | "ansible_device_links": {
70 | "ids": {},
71 | "labels": {
72 | "sda1": [
73 | "cloudimg-rootfs"
74 | ],
75 | "sdb": [
76 | "cidata"
77 | ]
78 | },
79 | "masters": {},
80 | "uuids": {
81 | "sda1": [
82 | "6bc3f1bb-8d64-4732-b839-77c17626afa8"
83 | ],
84 | "sdb": [
85 | "2022-11-07-21-56-22-00"
86 | ]
87 | }
88 | },
89 | "ansible_devices": {
90 | "loop0": {
91 | "holders": [],
92 | "host": "",
93 | "links": {
94 | "ids": [],
95 | "labels": [],
96 | "masters": [],
97 | "uuids": []
98 | },
99 | "model": null,
100 | "partitions": {},
101 | "removable": "0",
102 | "rotational": "1",
103 | "sas_address": null,
104 | "sas_device_handle": null,
105 | "scheduler_mode": "mq-deadline",
106 | "sectors": "98280",
107 | "sectorsize": "512",
108 | "size": "47.99 MB",
109 | "support_discard": "4096",
110 | "vendor": null,
111 | "virtual": 1
112 | },
113 | "loop1": {
114 | "holders": [],
115 | "host": "",
116 | "links": {
117 | "ids": [],
118 | "labels": [],
119 | "masters": [],
120 | "uuids": []
121 | },
122 | "model": null,
123 | "partitions": {},
124 | "removable": "0",
125 | "rotational": "1",
126 | "sas_address": null,
127 | "sas_device_handle": null,
128 | "scheduler_mode": "mq-deadline",
129 | "sectors": "138880",
130 | "sectorsize": "512",
131 | "size": "67.81 MB",
132 | "support_discard": "4096",
133 | "vendor": null,
134 | "virtual": 1
135 | },
136 | "loop2": {
137 | "holders": [],
138 | "host": "",
139 | "links": {
140 | "ids": [],
141 | "labels": [],
142 | "masters": [],
143 | "uuids": []
144 | },
145 | "model": null,
146 | "partitions": {},
147 | "removable": "0",
148 | "rotational": "1",
149 | "sas_address": null,
150 | "sas_device_handle": null,
151 | "scheduler_mode": "mq-deadline",
152 | "sectors": "129424",
153 | "sectorsize": "512",
154 | "size": "63.20 MB",
155 | "support_discard": "4096",
156 | "vendor": null,
157 | "virtual": 1
158 | },
159 | "loop3": {
160 | "holders": [],
161 | "host": "",
162 | "links": {
163 | "ids": [],
164 | "labels": [],
165 | "masters": [],
166 | "uuids": []
167 | },
168 | "model": null,
169 | "partitions": {},
170 | "removable": "0",
171 | "rotational": "1",
172 | "sas_address": null,
173 | "sas_device_handle": null,
174 | "scheduler_mode": "mq-deadline",
175 | "sectors": "129520",
176 | "sectorsize": "512",
177 | "size": "63.24 MB",
178 | "support_discard": "4096",
179 | "vendor": null,
180 | "virtual": 1
181 | },
182 | "loop4": {
183 | "holders": [],
184 | "host": "",
185 | "links": {
186 | "ids": [],
187 | "labels": [],
188 | "masters": [],
189 | "uuids": []
190 | },
191 | "model": null,
192 | "partitions": {},
193 | "removable": "0",
194 | "rotational": "1",
195 | "sas_address": null,
196 | "sas_device_handle": null,
197 | "scheduler_mode": "mq-deadline",
198 | "sectors": "0",
199 | "sectorsize": "512",
200 | "size": "0.00 Bytes",
201 | "support_discard": "0",
202 | "vendor": null,
203 | "virtual": 1
204 | },
205 | "loop5": {
206 | "holders": [],
207 | "host": "",
208 | "links": {
209 | "ids": [],
210 | "labels": [],
211 | "masters": [],
212 | "uuids": []
213 | },
214 | "model": null,
215 | "partitions": {},
216 | "removable": "0",
217 | "rotational": "1",
218 | "sas_address": null,
219 | "sas_device_handle": null,
220 | "scheduler_mode": "mq-deadline",
221 | "sectors": "0",
222 | "sectorsize": "512",
223 | "size": "0.00 Bytes",
224 | "support_discard": "0",
225 | "vendor": null,
226 | "virtual": 1
227 | },
228 | "loop6": {
229 | "holders": [],
230 | "host": "",
231 | "links": {
232 | "ids": [],
233 | "labels": [],
234 | "masters": [],
235 | "uuids": []
236 | },
237 | "model": null,
238 | "partitions": {},
239 | "removable": "0",
240 | "rotational": "1",
241 | "sas_address": null,
242 | "sas_device_handle": null,
243 | "scheduler_mode": "mq-deadline",
244 | "sectors": "0",
245 | "sectorsize": "512",
246 | "size": "0.00 Bytes",
247 | "support_discard": "0",
248 | "vendor": null,
249 | "virtual": 1
250 | },
251 | "loop7": {
252 | "holders": [],
253 | "host": "",
254 | "links": {
255 | "ids": [],
256 | "labels": [],
257 | "masters": [],
258 | "uuids": []
259 | },
260 | "model": null,
261 | "partitions": {},
262 | "removable": "0",
263 | "rotational": "1",
264 | "sas_address": null,
265 | "sas_device_handle": null,
266 | "scheduler_mode": "mq-deadline",
267 | "sectors": "0",
268 | "sectorsize": "512",
269 | "size": "0.00 Bytes",
270 | "support_discard": "0",
271 | "vendor": null,
272 | "virtual": 1
273 | },
274 | "sda": {
275 | "holders": [],
276 | "host": "SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI",
277 | "links": {
278 | "ids": [],
279 | "labels": [],
280 | "masters": [],
281 | "uuids": []
282 | },
283 | "model": "HARDDISK",
284 | "partitions": {
285 | "sda1": {
286 | "holders": [],
287 | "links": {
288 | "ids": [],
289 | "labels": [
290 | "cloudimg-rootfs"
291 | ],
292 | "masters": [],
293 | "uuids": [
294 | "6bc3f1bb-8d64-4732-b839-77c17626afa8"
295 | ]
296 | },
297 | "sectors": "83883999",
298 | "sectorsize": 512,
299 | "size": "40.00 GB",
300 | "start": "2048",
301 | "uuid": "6bc3f1bb-8d64-4732-b839-77c17626afa8"
302 | }
303 | },
304 | "removable": "0",
305 | "rotational": "1",
306 | "sas_address": null,
307 | "sas_device_handle": null,
308 | "scheduler_mode": "mq-deadline",
309 | "sectors": "83886080",
310 | "sectorsize": "512",
311 | "size": "40.00 GB",
312 | "support_discard": "0",
313 | "vendor": "VBOX",
314 | "virtual": 1
315 | },
316 | "sdb": {
317 | "holders": [],
318 | "host": "SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI",
319 | "links": {
320 | "ids": [],
321 | "labels": [
322 | "cidata"
323 | ],
324 | "masters": [],
325 | "uuids": [
326 | "2022-11-07-21-56-22-00"
327 | ]
328 | },
329 | "model": "HARDDISK",
330 | "partitions": {},
331 | "removable": "0",
332 | "rotational": "1",
333 | "sas_address": null,
334 | "sas_device_handle": null,
335 | "scheduler_mode": "mq-deadline",
336 | "sectors": "20480",
337 | "sectorsize": "512",
338 | "size": "10.00 MB",
339 | "support_discard": "0",
340 | "vendor": "VBOX",
341 | "virtual": 1
342 | }
343 | },
344 | "ansible_distribution": "Ubuntu",
345 | "ansible_distribution_file_parsed": true,
346 | "ansible_distribution_file_path": "/etc/os-release",
347 | "ansible_distribution_file_variety": "Debian",
348 | "ansible_distribution_major_version": "20",
349 | "ansible_distribution_release": "focal",
350 | "ansible_distribution_version": "20.04",
351 | "ansible_dns": {
352 | "nameservers": [
353 | "127.0.0.53"
354 | ],
355 | "options": {
356 | "edns0": true,
357 | "trust-ad": true
358 | }
359 | },
360 | "ansible_domain": "",
361 | "ansible_effective_group_id": 1000,
362 | "ansible_effective_user_id": 1000,
363 | "ansible_enp0s3": {
364 | "active": true,
365 | "device": "enp0s3",
366 | "features": {
367 | "esp_hw_offload": "off [fixed]",
368 | "esp_tx_csum_hw_offload": "off [fixed]",
369 | "fcoe_mtu": "off [fixed]",
370 | "generic_receive_offload": "on",
371 | "generic_segmentation_offload": "on",
372 | "highdma": "off [fixed]",
373 | "hw_tc_offload": "off [fixed]",
374 | "l2_fwd_offload": "off [fixed]",
375 | "large_receive_offload": "off [fixed]",
376 | "loopback": "off [fixed]",
377 | "netns_local": "off [fixed]",
378 | "ntuple_filters": "off [fixed]",
379 | "receive_hashing": "off [fixed]",
380 | "rx_all": "off",
381 | "rx_checksumming": "off",
382 | "rx_fcs": "off",
383 | "rx_gro_hw": "off [fixed]",
384 | "rx_udp_tunnel_port_offload": "off [fixed]",
385 | "rx_vlan_filter": "on [fixed]",
386 | "rx_vlan_offload": "on",
387 | "rx_vlan_stag_filter": "off [fixed]",
388 | "rx_vlan_stag_hw_parse": "off [fixed]",
389 | "scatter_gather": "on",
390 | "tcp_segmentation_offload": "on",
391 | "tls_hw_record": "off [fixed]",
392 | "tls_hw_rx_offload": "off [fixed]",
393 | "tls_hw_tx_offload": "off [fixed]",
394 | "tx_checksum_fcoe_crc": "off [fixed]",
395 | "tx_checksum_ip_generic": "on",
396 | "tx_checksum_ipv4": "off [fixed]",
397 | "tx_checksum_ipv6": "off [fixed]",
398 | "tx_checksum_sctp": "off [fixed]",
399 | "tx_checksumming": "on",
400 | "tx_esp_segmentation": "off [fixed]",
401 | "tx_fcoe_segmentation": "off [fixed]",
402 | "tx_gre_csum_segmentation": "off [fixed]",
403 | "tx_gre_segmentation": "off [fixed]",
404 | "tx_gso_partial": "off [fixed]",
405 | "tx_gso_robust": "off [fixed]",
406 | "tx_ipxip4_segmentation": "off [fixed]",
407 | "tx_ipxip6_segmentation": "off [fixed]",
408 | "tx_lockless": "off [fixed]",
409 | "tx_nocache_copy": "off",
410 | "tx_scatter_gather": "on",
411 | "tx_scatter_gather_fraglist": "off [fixed]",
412 | "tx_sctp_segmentation": "off [fixed]",
413 | "tx_tcp6_segmentation": "off [fixed]",
414 | "tx_tcp_ecn_segmentation": "off [fixed]",
415 | "tx_tcp_mangleid_segmentation": "off",
416 | "tx_tcp_segmentation": "on",
417 | "tx_udp_segmentation": "off [fixed]",
418 | "tx_udp_tnl_csum_segmentation": "off [fixed]",
419 | "tx_udp_tnl_segmentation": "off [fixed]",
420 | "tx_vlan_offload": "on [fixed]",
421 | "tx_vlan_stag_hw_insert": "off [fixed]",
422 | "vlan_challenged": "off [fixed]"
423 | },
424 | "hw_timestamp_filters": [],
425 | "ipv4": {
426 | "address": "10.0.2.15",
427 | "broadcast": "10.0.2.255",
428 | "netmask": "255.255.255.0",
429 | "network": "10.0.2.0",
430 | "prefix": "24"
431 | },
432 | "ipv6": [
433 | {
434 | "address": "fe80::9a:94ff:fec9:30e2",
435 | "prefix": "64",
436 | "scope": "link"
437 | }
438 | ],
439 | "macaddress": "02:9a:94:c9:30:e2",
440 | "module": "e1000",
441 | "mtu": 1500,
442 | "pciid": "0000:00:03.0",
443 | "promisc": false,
444 | "speed": 1000,
445 | "timestamping": [
446 | "tx_software",
447 | "rx_software",
448 | "software"
449 | ],
450 | "type": "ether"
451 | },
452 | "ansible_enp0s8": {
453 | "active": true,
454 | "device": "enp0s8",
455 | "features": {
456 | "esp_hw_offload": "off [fixed]",
457 | "esp_tx_csum_hw_offload": "off [fixed]",
458 | "fcoe_mtu": "off [fixed]",
459 | "generic_receive_offload": "on",
460 | "generic_segmentation_offload": "on",
461 | "highdma": "off [fixed]",
462 | "hw_tc_offload": "off [fixed]",
463 | "l2_fwd_offload": "off [fixed]",
464 | "large_receive_offload": "off [fixed]",
465 | "loopback": "off [fixed]",
466 | "netns_local": "off [fixed]",
467 | "ntuple_filters": "off [fixed]",
468 | "receive_hashing": "off [fixed]",
469 | "rx_all": "off",
470 | "rx_checksumming": "off",
471 | "rx_fcs": "off",
472 | "rx_gro_hw": "off [fixed]",
473 | "rx_udp_tunnel_port_offload": "off [fixed]",
474 | "rx_vlan_filter": "on [fixed]",
475 | "rx_vlan_offload": "on",
476 | "rx_vlan_stag_filter": "off [fixed]",
477 | "rx_vlan_stag_hw_parse": "off [fixed]",
478 | "scatter_gather": "on",
479 | "tcp_segmentation_offload": "on",
480 | "tls_hw_record": "off [fixed]",
481 | "tls_hw_rx_offload": "off [fixed]",
482 | "tls_hw_tx_offload": "off [fixed]",
483 | "tx_checksum_fcoe_crc": "off [fixed]",
484 | "tx_checksum_ip_generic": "on",
485 | "tx_checksum_ipv4": "off [fixed]",
486 | "tx_checksum_ipv6": "off [fixed]",
487 | "tx_checksum_sctp": "off [fixed]",
488 | "tx_checksumming": "on",
489 | "tx_esp_segmentation": "off [fixed]",
490 | "tx_fcoe_segmentation": "off [fixed]",
491 | "tx_gre_csum_segmentation": "off [fixed]",
492 | "tx_gre_segmentation": "off [fixed]",
493 | "tx_gso_partial": "off [fixed]",
494 | "tx_gso_robust": "off [fixed]",
495 | "tx_ipxip4_segmentation": "off [fixed]",
496 | "tx_ipxip6_segmentation": "off [fixed]",
497 | "tx_lockless": "off [fixed]",
498 | "tx_nocache_copy": "off",
499 | "tx_scatter_gather": "on",
500 | "tx_scatter_gather_fraglist": "off [fixed]",
501 | "tx_sctp_segmentation": "off [fixed]",
502 | "tx_tcp6_segmentation": "off [fixed]",
503 | "tx_tcp_ecn_segmentation": "off [fixed]",
504 | "tx_tcp_mangleid_segmentation": "off",
505 | "tx_tcp_segmentation": "on",
506 | "tx_udp_segmentation": "off [fixed]",
507 | "tx_udp_tnl_csum_segmentation": "off [fixed]",
508 | "tx_udp_tnl_segmentation": "off [fixed]",
509 | "tx_vlan_offload": "on [fixed]",
510 | "tx_vlan_stag_hw_insert": "off [fixed]",
511 | "vlan_challenged": "off [fixed]"
512 | },
513 | "hw_timestamp_filters": [],
514 | "ipv4": {
515 | "address": "192.168.15.119",
516 | "broadcast": "192.168.15.255",
517 | "netmask": "255.255.255.0",
518 | "network": "192.168.15.0",
519 | "prefix": "24"
520 | },
521 | "ipv6": [
522 | {
523 | "address": "fe80::a00:27ff:fea0:f6f7",
524 | "prefix": "64",
525 | "scope": "link"
526 | }
527 | ],
528 | "macaddress": "08:00:27:a0:f6:f7",
529 | "module": "e1000",
530 | "mtu": 1500,
531 | "pciid": "0000:00:08.0",
532 | "promisc": false,
533 | "speed": 1000,
534 | "timestamping": [
535 | "tx_software",
536 | "rx_software",
537 | "software"
538 | ],
539 | "type": "ether"
540 | },
541 | "ansible_env": {
542 | "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
543 | "HOME": "/home/vagrant",
544 | "LANG": "C.UTF-8",
545 | "LOGNAME": "vagrant",
546 | "MOTD_SHOWN": "pam",
547 | "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
548 | "PWD": "/home/vagrant",
549 | "SHELL": "/bin/bash",
550 | "SHLVL": "0",
551 | "SSH_CLIENT": "192.168.15.117 59996 22",
552 | "SSH_CONNECTION": "192.168.15.117 59996 192.168.15.119 22",
553 | "SSH_TTY": "/dev/pts/0",
554 | "TERM": "xterm-256color",
555 | "USER": "vagrant",
556 | "XDG_RUNTIME_DIR": "/run/user/1000",
557 | "XDG_SESSION_CLASS": "user",
558 | "XDG_SESSION_ID": "22",
559 | "XDG_SESSION_TYPE": "tty",
560 | "_": "/bin/sh"
561 | },
562 | "ansible_fibre_channel_wwn": [],
563 | "ansible_fips": false,
564 | "ansible_form_factor": "Other",
565 | "ansible_fqdn": "ubuntu-focal",
566 | "ansible_hostname": "ubuntu-focal",
567 | "ansible_hostnqn": "",
568 | "ansible_interfaces": [
569 | "enp0s3",
570 | "lo",
571 | "enp0s8"
572 | ],
573 | "ansible_is_chroot": false,
574 | "ansible_iscsi_iqn": "",
575 | "ansible_kernel": "5.4.0-131-generic",
576 | "ansible_kernel_version": "#147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022",
577 | "ansible_lo": {
578 | "active": true,
579 | "device": "lo",
580 | "features": {
581 | "esp_hw_offload": "off [fixed]",
582 | "esp_tx_csum_hw_offload": "off [fixed]",
583 | "fcoe_mtu": "off [fixed]",
584 | "generic_receive_offload": "on",
585 | "generic_segmentation_offload": "on",
586 | "highdma": "on [fixed]",
587 | "hw_tc_offload": "off [fixed]",
588 | "l2_fwd_offload": "off [fixed]",
589 | "large_receive_offload": "off [fixed]",
590 | "loopback": "on [fixed]",
591 | "netns_local": "on [fixed]",
592 | "ntuple_filters": "off [fixed]",
593 | "receive_hashing": "off [fixed]",
594 | "rx_all": "off [fixed]",
595 | "rx_checksumming": "on [fixed]",
596 | "rx_fcs": "off [fixed]",
597 | "rx_gro_hw": "off [fixed]",
598 | "rx_udp_tunnel_port_offload": "off [fixed]",
599 | "rx_vlan_filter": "off [fixed]",
600 | "rx_vlan_offload": "off [fixed]",
601 | "rx_vlan_stag_filter": "off [fixed]",
602 | "rx_vlan_stag_hw_parse": "off [fixed]",
603 | "scatter_gather": "on",
604 | "tcp_segmentation_offload": "on",
605 | "tls_hw_record": "off [fixed]",
606 | "tls_hw_rx_offload": "off [fixed]",
607 | "tls_hw_tx_offload": "off [fixed]",
608 | "tx_checksum_fcoe_crc": "off [fixed]",
609 | "tx_checksum_ip_generic": "on [fixed]",
610 | "tx_checksum_ipv4": "off [fixed]",
611 | "tx_checksum_ipv6": "off [fixed]",
612 | "tx_checksum_sctp": "on [fixed]",
613 | "tx_checksumming": "on",
614 | "tx_esp_segmentation": "off [fixed]",
615 | "tx_fcoe_segmentation": "off [fixed]",
616 | "tx_gre_csum_segmentation": "off [fixed]",
617 | "tx_gre_segmentation": "off [fixed]",
618 | "tx_gso_partial": "off [fixed]",
619 | "tx_gso_robust": "off [fixed]",
620 | "tx_ipxip4_segmentation": "off [fixed]",
621 | "tx_ipxip6_segmentation": "off [fixed]",
622 | "tx_lockless": "on [fixed]",
623 | "tx_nocache_copy": "off [fixed]",
624 | "tx_scatter_gather": "on [fixed]",
625 | "tx_scatter_gather_fraglist": "on [fixed]",
626 | "tx_sctp_segmentation": "on",
627 | "tx_tcp6_segmentation": "on",
628 | "tx_tcp_ecn_segmentation": "on",
629 | "tx_tcp_mangleid_segmentation": "on",
630 | "tx_tcp_segmentation": "on",
631 | "tx_udp_segmentation": "off [fixed]",
632 | "tx_udp_tnl_csum_segmentation": "off [fixed]",
633 | "tx_udp_tnl_segmentation": "off [fixed]",
634 | "tx_vlan_offload": "off [fixed]",
635 | "tx_vlan_stag_hw_insert": "off [fixed]",
636 | "vlan_challenged": "on [fixed]"
637 | },
638 | "hw_timestamp_filters": [],
639 | "ipv4": {
640 | "address": "127.0.0.1",
641 | "broadcast": "",
642 | "netmask": "255.0.0.0",
643 | "network": "127.0.0.0",
644 | "prefix": "8"
645 | },
646 | "ipv6": [
647 | {
648 | "address": "::1",
649 | "prefix": "128",
650 | "scope": "host"
651 | }
652 | ],
653 | "mtu": 65536,
654 | "promisc": false,
655 | "timestamping": [
656 | "tx_software",
657 | "rx_software",
658 | "software"
659 | ],
660 | "type": "loopback"
661 | },
662 | "ansible_loadavg": {
663 | "15m": 0.0,
664 | "1m": 0.02,
665 | "5m": 0.01
666 | },
667 | "ansible_local": {},
668 | "ansible_lsb": {
669 | "codename": "focal",
670 | "description": "Ubuntu 20.04.5 LTS",
671 | "id": "Ubuntu",
672 | "major_release": "20",
673 | "release": "20.04"
674 | },
675 | "ansible_lvm": "N/A",
676 | "ansible_machine": "x86_64",
677 | "ansible_machine_id": "195813eaee3d43de9d3b43b009b9eaca",
678 | "ansible_memfree_mb": 220,
679 | "ansible_memory_mb": {
680 | "nocache": {
681 | "free": 754,
682 | "used": 222
683 | },
684 | "real": {
685 | "free": 220,
686 | "total": 976,
687 | "used": 756
688 | },
689 | "swap": {
690 | "cached": 0,
691 | "free": 0,
692 | "total": 0,
693 | "used": 0
694 | }
695 | },
696 | "ansible_memtotal_mb": 976,
697 | "ansible_mounts": [
698 | {
699 | "block_available": 9720500,
700 | "block_size": 4096,
701 | "block_total": 10145391,
702 | "block_used": 424891,
703 | "device": "/dev/sda1",
704 | "fstype": "ext4",
705 | "inode_available": 5046997,
706 | "inode_total": 5120000,
707 | "inode_used": 73003,
708 | "mount": "/",
709 | "options": "rw,relatime",
710 | "size_available": 39815168000,
711 | "size_total": 41555521536,
712 | "uuid": "6bc3f1bb-8d64-4732-b839-77c17626afa8"
713 | },
714 | {
715 | "block_available": 0,
716 | "block_size": 131072,
717 | "block_total": 384,
718 | "block_used": 384,
719 | "device": "/dev/loop0",
720 | "fstype": "squashfs",
721 | "inode_available": 0,
722 | "inode_total": 486,
723 | "inode_used": 486,
724 | "mount": "/snap/snapd/17336",
725 | "options": "ro,nodev,relatime",
726 | "size_available": 0,
727 | "size_total": 50331648,
728 | "uuid": "N/A"
729 | },
730 | {
731 | "block_available": 0,
732 | "block_size": 131072,
733 | "block_total": 506,
734 | "block_used": 506,
735 | "device": "/dev/loop2",
736 | "fstype": "squashfs",
737 | "inode_available": 0,
738 | "inode_total": 11885,
739 | "inode_used": 11885,
740 | "mount": "/snap/core20/1634",
741 | "options": "ro,nodev,relatime",
742 | "size_available": 0,
743 | "size_total": 66322432,
744 | "uuid": "N/A"
745 | },
746 | {
747 | "block_available": 0,
748 | "block_size": 131072,
749 | "block_total": 543,
750 | "block_used": 543,
751 | "device": "/dev/loop1",
752 | "fstype": "squashfs",
753 | "inode_available": 0,
754 | "inode_total": 802,
755 | "inode_used": 802,
756 | "mount": "/snap/lxd/22753",
757 | "options": "ro,nodev,relatime",
758 | "size_available": 0,
759 | "size_total": 71172096,
760 | "uuid": "N/A"
761 | },
762 | {
763 | "block_available": 0,
764 | "block_size": 131072,
765 | "block_total": 506,
766 | "block_used": 506,
767 | "device": "/dev/loop3",
768 | "fstype": "squashfs",
769 | "inode_available": 0,
770 | "inode_total": 11897,
771 | "inode_used": 11897,
772 | "mount": "/snap/core20/1695",
773 | "options": "ro,nodev,relatime",
774 | "size_available": 0,
775 | "size_total": 66322432,
776 | "uuid": "N/A"
777 | }
778 | ],
779 | "ansible_nodename": "ubuntu-focal",
780 | "ansible_os_family": "Debian",
781 | "ansible_pkg_mgr": "apt",
782 | "ansible_proc_cmdline": {
783 | "BOOT_IMAGE": "/boot/vmlinuz-5.4.0-131-generic",
784 | "console": [
785 | "tty1",
786 | "ttyS0"
787 | ],
788 | "ro": true,
789 | "root": "UUID=6bc3f1bb-8d64-4732-b839-77c17626afa8"
790 | },
791 | "ansible_processor": [
792 | "0",
793 | "GenuineIntel",
794 | "Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
795 | "1",
796 | "GenuineIntel",
797 | "Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz"
798 | ],
799 | "ansible_processor_cores": 2,
800 | "ansible_processor_count": 1,
801 | "ansible_processor_nproc": 2,
802 | "ansible_processor_threads_per_core": 1,
803 | "ansible_processor_vcpus": 2,
804 | "ansible_product_name": "VirtualBox",
805 | "ansible_product_serial": "NA",
806 | "ansible_product_uuid": "NA",
807 | "ansible_product_version": "1.2",
808 | "ansible_python": {
809 | "executable": "/usr/bin/python3",
810 | "has_sslcontext": true,
811 | "type": "cpython",
812 | "version": {
813 | "major": 3,
814 | "micro": 10,
815 | "minor": 8,
816 | "releaselevel": "final",
817 | "serial": 0
818 | },
819 | "version_info": [
820 | 3,
821 | 8,
822 | 10,
823 | "final",
824 | 0
825 | ]
826 | },
827 | "ansible_python_version": "3.8.10",
828 | "ansible_real_group_id": 1000,
829 | "ansible_real_user_id": 1000,
830 | "ansible_selinux": {
831 | "status": "disabled"
832 | },
833 | "ansible_selinux_python_present": true,
834 | "ansible_service_mgr": "systemd",
835 | "ansible_ssh_host_key_dsa_public": "AAAAB3NzaC1kc3MAAACBAKJPGXPhXCnU6IScZeizGB7oI4Lu3vOhO4OAkvMSCZ+Xxh2beVXIOsH1/8OdjmLoa8Wk3anjp9incwgYeo7TogNgDYUyCVD8Z/FLKQhRHn6T8ZU1kFSiSHZJEMiNdmxVADYD05GUVdHohVHyLqRK2cbmDC1nDGOIQhsfPfHcyurtAAAAFQCe2J0JsaPRQeOwu43vnkUPHXe7BwAAAH9wL+ZnEntCDLTiBNHqR74XV3YOfjVBT+MLjsWEMLwR62fJwrz+rcHYYF7MfmKzukdontB//J2n+JfZmcmUryPu9D5MWSzs6dYzk74gCNd0P3AE9WzTntQcCPpemeRSixUwkluviHDkoFpCIjOE1UIGMPkkb3J/oGSFP9OidSFCAAAAgQCCZt8XXnxOFwGVJrclcsX5LMKRjwUMkI0c7Janm/nmRXO9GVCgh7XPOIGiEpWk1jjC4MJTcD8okbwbrG/jwB3/J+Kf4t2YyWFFxRb36tnC7CCKfdruv1Jsbau5d5XiizxRsnaEXM0GRQiJEFqLCHeenkIRzjX9dwLr+1pZeozaQA==",
836 | "ansible_ssh_host_key_dsa_public_keytype": "ssh-dss",
837 | "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLBq3mAHTE0tEKZDkCebXcRN9mokZdl6HVvdnAyUq9Rii6E2YSar41rvVAbRNHun+iLtUx9uU6pvzTT4Ud3229o=",
838 | "ansible_ssh_host_key_ecdsa_public_keytype": "ecdsa-sha2-nistp256",
839 | "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIEj3N2yfkYgs73TmIHTzWgYv+wwolBpEhoGfgPesxFG2",
840 | "ansible_ssh_host_key_ed25519_public_keytype": "ssh-ed25519",
841 | "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABgQCwAA1drBOrULpf5TE5s/8qw5KyWVc2GbakBqdlv6NmYjcomPx/SCXrALwV43wbkVsWFZC8W+iKtToyoNhIt8JFVu8WPqlayMBv3e8iw5WOOwXt8opQ67UCDIHgvioBIjETwlsvPCxbDd8o50ttfPD8LdYl+ucThlPhE2hCLtWgkehdGm0jCTRiBLhRYQbLCYYbUIgcnnEFW3rGMxAVweuY4mNN/WNMJNh5yPaDPLspTHDNR7HJ/FHia1T8Wpyu6eznT6sk5Au1/X4qCMdUnPxBtzyjsN8Ja8dnLRDSbAMbf7+skbPZFn8t1ax34UsnGDN8dRhUkM+C9avekCJ8V52lxWjQaCeO9cdzB3ya3JS0GIm6niryH0wy1oMSGrPtNwIrknmutp3kF3ni/bkC6P4+SViv4/BeOrz9eUhvA9/Om6C6Wqoj8ji0tGJ3Z1w8J1SjnIc2WdRmxD3TRR4yoqjrcAa2oQGcOmkq+T/5wi3fzZbdDA182B6bwlBbAHszv2U=",
842 | "ansible_ssh_host_key_rsa_public_keytype": "ssh-rsa",
843 | "ansible_swapfree_mb": 0,
844 | "ansible_swaptotal_mb": 0,
845 | "ansible_system": "Linux",
846 | "ansible_system_capabilities": [
847 | ""
848 | ],
849 | "ansible_system_capabilities_enforced": "True",
850 | "ansible_system_vendor": "innotek GmbH",
851 | "ansible_uptime_seconds": 7569,
852 | "ansible_user_dir": "/home/vagrant",
853 | "ansible_user_gecos": ",,,",
854 | "ansible_user_gid": 1000,
855 | "ansible_user_id": "vagrant",
856 | "ansible_user_shell": "/bin/bash",
857 | "ansible_user_uid": 1000,
858 | "ansible_userspace_architecture": "x86_64",
859 | "ansible_userspace_bits": "64",
860 | "ansible_virtualization_role": "guest",
861 | "ansible_virtualization_tech_guest": [
862 | "virtualbox"
863 | ],
864 | "ansible_virtualization_tech_host": [],
865 | "ansible_virtualization_type": "virtualbox",
866 | "discovered_interpreter_python": "/usr/bin/python3",
867 | "gather_subset": [
868 | "all"
869 | ],
870 | "module_setup": true
871 | },
872 | "changed": false
873 | }
874 |
--------------------------------------------------------------------------------
/stuff/vagrant.md:
--------------------------------------------------------------------------------
1 | ## Sumário
2 |
3 | - [Configurando seu laboratório](#configurando-seu-laborat%C3%B3rio)
4 | - [Básico necessário sobre Vagrant](#b%C3%A1sico-necess%C3%A1rio-sobre-vagrant)
5 | - [Configurando duas máquinas virtuais](#configurando-duas-máquinas-virtuais)
6 | - [Configurações adicionais do vagrant](#configurações-adicionais-no-vagrant)
7 |
8 | ---
9 |
10 | ## Instalação do Virtualbox e do Vagrant
11 |
12 | Ansiedade já bateu, né? Vamos construindo uma passinho de cada vez.
13 |
14 | ### Passos para instalação
15 |
16 | > Caso você use o windows, as instalações podem ser feitas via [chocolatey](https://chocolatey.org/install#individual)
17 |
18 | - Abra seu terminal de preferência
19 |
20 | - Instale o virtualbox:
21 |
22 | ```bash
23 | paru -S virtualbox # Arch
24 | choco install virtualbox # Windows
25 | sudo apt-get install virtualbox # Ubuntu
26 | ```
27 |
28 | - Instale o Vagrant:
29 | ```
30 | paru -S vagrant # Arch
31 | choco install vagrant # Windows
32 | sudo apt install vagrant # Ubuntu
33 | ```
34 |
35 | ## Básico necessário sobre Vagrant
36 |
37 | Vagrant é uma ferramenta para provisionamento de máquinas virtuais. Dizendo de forma simples, ele cria e configura máquinas virtuais usando um arquivo de configuração chamado `Vagrantfile`. Nesse arquivo podemos descrever como nossas vms serão configuras.
38 |
39 | Exemplo de um arquivo do Vagrant:
40 |
41 | ```ruby
42 | # nome do arquivo: Vagrantifle
43 | Vagrant.configure("2") do |config|
44 | config.vm.box = "archlinux/archlinux"
45 | end
46 | ```
47 |
48 | Se tivermos esse arquivo no nosso diretório, podemos executar o vagrant:
49 |
50 | ```bash
51 | vagrant up
52 | ```
53 |
54 | E ele criará uma máquina virtual com archlinux no nosso virtualbox.
55 |
56 | OBS: Esse comando pode demorar um pouco pois ele vai baixar um hd virtual do archlinux e instalar no seu virtualbox.
57 |
58 | ### Configurando duas máquinas virtuais
59 |
60 | O ansible só oferece suporte para ser executado no linux. Ele pode até configurar máquinas windows, porém só pode ser disparado por uma máquina linux. Para evitar sujar seu ambiente ou mesmo caso você use windows como seu sistema operacional principal. Vamos configurar duas máquinas virtuais com linux.
61 |
62 | Para isso, só precisamos alterar nosso `Vagrantfile`:
63 |
64 | ```ruby
65 | Vagrant.configure("2") do |config|
66 |
67 | config.vm.define "arch" do |arch|
68 | arch.vm.box = "archlinux/archlinux"
69 | end
70 |
71 | config.vm.define "ubuntu" do |ubuntu|
72 | ubuntu.vm.box = "ubuntu/focal64"
73 | end
74 |
75 | end
76 | ```
77 |
78 | Com isso, agora temos uma vm com ubuntu e outra com archlinux.
79 |
80 | Para dar start nas vms agora podemos fazer de duas formas. Subir uma só ou as duas
81 |
82 | Para subir as duas, podemos usar `vagrant up` como fizemos antes.
83 |
84 | Caso queira subir só o ubuntu `vagrant up ubuntu` ou para subir somente o arch `vagrant up arch`.
85 |
86 | ### Configurações adicionais no Vagrant
87 |
88 | Algumas configurações adicionais para simplificar a criação das nossas máquinas virtuais.
89 |
90 | #### IP Local
91 | Se quisermos conseguir acessar as vms de fora do ambiente precisamos dar um endereço para elas usando nossa rede local, pelo protocolo DHCP. Podemos fazer isso alterando o `Vagrantfile`:
92 |
93 | ```ruby
94 | Vagrant.configure("2") do |config|
95 |
96 | config.vm.define "arch" do |arch|
97 | arch.vm.box = "archlinux/archlinux"
98 | arch.vm.network "public_network",
99 | use_dhcp_assigned_default_route: true
100 | end
101 |
102 | config.vm.define "ubuntu" do |ubuntu|
103 | ubuntu.vm.box = "ubuntu/focal64"
104 | ubuntu.vm.network "public_network",
105 | use_dhcp_assigned_default_route: true
106 | end
107 |
108 | end
109 | ```
110 |
111 | Isso criará uma nova placa de rede na vm e permitirá o acesso via ssh dá nossa máquina local.
112 |
113 | Para que essas ações passem a valer nas máquinas, precisamos pedir ao vagrant que refaça a configuração delas.
114 |
115 | ```bash
116 | vagrant reload
117 | ```
118 |
119 | > Quando executar esse passo, caso você tenha mais de uma placa de rede, por exemplo um notebook, ele vai perguntar em qual placa você quer que o dhcp seja usado. Escolha a sua placa conectada a internet.
120 |
121 |
122 | #### Configurações de memória e HD das vms
123 |
124 | Caso tenha alguns problemas relativos a uso de memória ou disco, essas configurações podem te ajudar.
125 |
126 | #### Memória RAM
127 | Caso você tenha um hardware mais modesto e deseja que as vms usem menos memória. ou que sabe tenha mais hardware e deseja que sua vm tenha mais memória. Você pode alterar a quantidade da vm no `Vagrantfile`:
128 |
129 | ```ruby
130 | Vagrant.configure("2") do |config|
131 |
132 | config.vm.define "arch" do |arch|
133 | arch.vm.box = "archlinux/archlinux"
134 | arch.vm.network "public_network",
135 | use_dhcp_assigned_default_route: true
136 |
137 | arch.vm.provider "virtualbox" do |vb|
138 | vb.memory = "1024"
139 | end
140 |
141 | end
142 |
143 | config.vm.define "ubuntu" do |ubuntu|
144 | ubuntu.vm.box = "ubuntu/focal64"
145 | ubuntu.vm.network "public_network",
146 | use_dhcp_assigned_default_route: true
147 |
148 | ubuntu.vm.provider "virtualbox" do |vb|
149 | vb.memory = "1024"
150 | end
151 |
152 | end
153 |
154 | end
155 | ```
156 |
157 | Nesse caso, todas as máquinas agora tem 1GB de memória. Você pode alterar para suas necessidades.
158 |
159 | Para aplicar, usamos novamente o comando `vagrant reload`
160 |
161 | #### Alterando o tamanho dos HDs
162 |
163 | Caso o disco esteja menor do que você precisa e não consiga performar algumas ações por falta de espaço no disco, você pode instalar o plugin `vagrant-disksize`. Para que ele faça a modificação no tamanho do disco:
164 |
165 | ```bash
166 | vagrant plugin install vagrant-disksize
167 | ```
168 |
169 | Agora você pode alterar o tamanho do disco da vm no `Vagrantfile`:
170 |
171 | ```ruby
172 | Vagrant.configure("2") do |config|
173 |
174 | config.vm.define "arch" do |arch|
175 | arch.vm.box = "archlinux/archlinux"
176 | arch.disksize.size = "30GB" # Linha que muda o tamanho do disco, só precisa dela
177 |
178 | # O resto do arquivo foi omitido
179 | ```
180 |
181 | Para aplicar, usamos novamente o comando `vagrant reload`
182 |
183 | #### Dando start nos sistemas atualizados
184 |
185 | Um passo importante, para criarmos nosso ambiente é que ele já comece atualizado. Para não perdemos tempo atualizando o sistema logo de início. Para isso só temos que alterar no `Vagrantfile` para executar uma ação de provisionamento no shell:
186 |
187 | ```ruby
188 | .vm.provision "shell", inline: <<-SHELL
189 |
190 | SHELL
191 | ```
192 |
193 | Os comandos variam de sistema para sistema. O Archlinux usa o `pacman` como gerenciador de pacote, os sistemas baseados em Debian o `apt`, os sistemas da família red hat usam `dnf`. Então, lembre-se de usar o comando certo para atualizar. Um exemplo do nosso `Vagrantfile`:
194 |
195 | ```ruby
196 | Vagrant.configure("2") do |config|
197 |
198 | config.vm.define "arch" do |arch|
199 | arch.vm.box = "archlinux/archlinux"
200 | arch.disksize.size = "30GB"
201 | arch.vm.network "public_network",
202 | use_dhcp_assigned_default_route: true
203 |
204 | arch.vm.provider "virtualbox" do |vb|
205 | vb.memory = "1024"
206 | end
207 |
208 | arch.vm.provision "shell", inline: <<-SHELL
209 | pacman -Syu --noconfirm
210 | SHELL
211 | end
212 |
213 | config.vm.define "ubuntu" do |ubuntu|
214 | ubuntu.vm.box = "ubuntu/focal64"
215 | ubuntu.vm.network "public_network",
216 | use_dhcp_assigned_default_route: true
217 |
218 | ubuntu.vm.provider "virtualbox" do |vb|
219 | vb.memory = "1024"
220 | end
221 |
222 | ubuntu.vm.provision "shell", inline: <<-SHELL
223 | apt-get update
224 | apt-get upgrade -y
225 | SHELL
226 | end
227 |
228 | end
229 | ```
230 |
231 | Para que essas ações sejam performadas. Executamos `vagrant provision`
232 |
233 | #### Configurações de SSH
234 |
235 | Para que o ansible possa acessar de forma plena as máquinas virtuais, é sempre bom garantir que as máquinas virtuais estejam com o serviço de ssh configurado. Então, podemos adicionar essa configuração na fase de provisionamento do `Vagrantfile`:
236 |
237 | ```ruby
238 | .vm.provision "shell", inline: <<-SHELL
239 | sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
240 | systemctl restart sshd
241 | SHELL
242 | ```
243 |
244 | Assim, garantirmos que o ssh está devidamente configurado. Para executar o provisionamento novamente:
245 |
246 | ```bash
247 | vagrant provision
248 | ```
249 |
--------------------------------------------------------------------------------