commit 90c3c56f8992c456fd5d2939b726aa5defdb1327 Author: Christian Seyfferth Date: Tue Aug 27 09:03:52 2024 +0200 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..8522797 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Ansible Collection - dreistromland.common + +Documentation for the collection. diff --git a/galaxy.yml b/galaxy.yml new file mode 100644 index 0000000..aabe9d6 --- /dev/null +++ b/galaxy.yml @@ -0,0 +1,69 @@ +### REQUIRED +# The namespace of the collection. This can be a company/brand/organization or product namespace under which all +# content lives. May only contain alphanumeric lowercase characters and underscores. Namespaces cannot start with +# underscores or numbers and cannot contain consecutive underscores +namespace: dreistromland + +# The name of the collection. Has the same character restrictions as 'namespace' +name: common + +# The version of the collection. Must be compatible with semantic versioning +version: 1.0.0 + +# The path to the Markdown (.md) readme file. This path is relative to the root of the collection +readme: README.md + +# A list of the collection's content authors. Can be just the name or in the format 'Full Name (url) +# @nicks:irc/im.site#channel' +authors: +- Christian Seyfferth + + +### OPTIONAL but strongly recommended +# A short summary description of the collection +description: Common Roles for Provisioning + +# Either a single license or a list of licenses for content inside of a collection. Ansible Galaxy currently only +# accepts L(SPDX,https://spdx.org/licenses/) licenses. This key is mutually exclusive with 'license_file' +license: +- GPL-2.0-or-later + +# The path to the license file for the collection. This path is relative to the root of the collection. This key is +# mutually exclusive with 'license' +license_file: '' + +# A list of tags you want to associate with the collection for indexing/searching. A tag name has the same character +# requirements as 'namespace' and 'name' +tags: [] + +# Collections that this collection requires to be installed for it to be usable. The key of the dict is the +# collection label 'namespace.name'. The value is a version range +# L(specifiers,https://python-semanticversion.readthedocs.io/en/latest/#requirement-specification). Multiple version +# range specifiers can be set and are separated by ',' +dependencies: {} + +# The URL of the originating SCM repository +repository: http://code.tritum.de/devops/deployment/dreistromland-collection.git + +# The URL to any online docs +documentation: http://docs.dreistrom.land/devops/ansible + +# The URL to the homepage of the collection/project +homepage: http://dreistrom.land + +# The URL to the collection issue tracker +issues: http://board.dreistrom.land/issue/DEVOPS + +# A list of file glob-like patterns used to filter any files or directories that should not be included in the build +# artifact. A pattern is matched from the relative path of the file or directory of the collection directory. This +# uses 'fnmatch' to match the files or directories. Some directories and files like 'galaxy.yml', '*.pyc', '*.retry', +# and '.git' are always filtered. Mutually exclusive with 'manifest' +build_ignore: [] + +# A dict controlling use of manifest directives used in building the collection artifact. The key 'directives' is a +# list of MANIFEST.in style +# L(directives,https://packaging.python.org/en/latest/guides/using-manifest-in/#manifest-in-commands). The key +# 'omit_default_directives' is a boolean that controls whether the default directives are used. Mutually exclusive +# with 'build_ignore' +# manifest: null + diff --git a/meta/runtime.yml b/meta/runtime.yml new file mode 100644 index 0000000..20f709e --- /dev/null +++ b/meta/runtime.yml @@ -0,0 +1,52 @@ +--- +# Collections must specify a minimum required ansible version to upload +# to galaxy +# requires_ansible: '>=2.9.10' + +# Content that Ansible needs to load from another location or that has +# been deprecated/removed +# plugin_routing: +# action: +# redirected_plugin_name: +# redirect: ns.col.new_location +# deprecated_plugin_name: +# deprecation: +# removal_version: "4.0.0" +# warning_text: | +# See the porting guide on how to update your playbook to +# use ns.col.another_plugin instead. +# removed_plugin_name: +# tombstone: +# removal_version: "2.0.0" +# warning_text: | +# See the porting guide on how to update your playbook to +# use ns.col.another_plugin instead. +# become: +# cache: +# callback: +# cliconf: +# connection: +# doc_fragments: +# filter: +# httpapi: +# inventory: +# lookup: +# module_utils: +# modules: +# netconf: +# shell: +# strategy: +# terminal: +# test: +# vars: + +# Python import statements that Ansible needs to load from another location +# import_redirection: +# ansible_collections.ns.col.plugins.module_utils.old_location: +# redirect: ansible_collections.ns.col.plugins.module_utils.new_location + +# Groups of actions/modules that take a common set of options +# action_groups: +# group_name: +# - module1 +# - module2 diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 0000000..269a4c2 --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,31 @@ +# Collections Plugins Directory + +This directory can be used to ship various plugins inside an Ansible collection. Each plugin is placed in a folder that +is named after the type of plugin it is in. It can also include the `module_utils` and `modules` directory that +would contain module utils and modules respectively. + +Here is an example directory of the majority of plugins currently supported by Ansible: + +``` +└── plugins + ├── action + ├── become + ├── cache + ├── callback + ├── cliconf + ├── connection + ├── filter + ├── httpapi + ├── inventory + ├── lookup + ├── module_utils + ├── modules + ├── netconf + ├── shell + ├── strategy + ├── terminal + ├── test + └── vars +``` + +A full list of plugin types can be found at [Working With Plugins](https://docs.ansible.com/ansible-core/2.17/plugins/plugins.html). diff --git a/roles/general/files/profile.d/dreistromland-bash-history.sh b/roles/general/files/profile.d/dreistromland-bash-history.sh new file mode 100644 index 0000000..f3c6ac5 --- /dev/null +++ b/roles/general/files/profile.d/dreistromland-bash-history.sh @@ -0,0 +1,22 @@ +# No bash +[ -n "${BASH_VERSION:-}" ] || exit 0 + +# Not an interactive session +[[ $- == *i* ]] || exit 0 + +# History size in Memory and File +export HISTSIZE=1000 +export HISTFILESIZE=50000 + +# append to history instead overwriting (e.g. multiple people on the same with same user at same time) +shopt -s histappend +# ignore duplicates and the ones starting with space +export HISTCONTROL=ignoreboth +# some additional commands to ignore +export HISTIGNORE='ls:ll:ls -lah:pwd:clear:exit:history' +# History Time format +export HISTTIMEFORMAT='%F %T ' +# Split multiple commands from one line to multiple history entries +shopt -s cmdhist +# Append history lines, clear and reload history, then print the prompt command +export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" diff --git a/roles/general/files/profile.d/dreistromland-bash-prompt.sh b/roles/general/files/profile.d/dreistromland-bash-prompt.sh new file mode 100644 index 0000000..2e17629 --- /dev/null +++ b/roles/general/files/profile.d/dreistromland-bash-prompt.sh @@ -0,0 +1,40 @@ +function set_bash_prompt () { + # Color codes for easy prompt building + COLOR_DIVIDER="\[\e[30;1m\]" + COLOR_CMDCOUNT="\[\e[34;1m\]" + COLOR_USERNAME="\[\e[34;1m\]" + COLOR_USERHOSTAT="\[\e[34;1m\]" + COLOR_HOSTNAME="\[\e[34;1m\]" + COLOR_GITBRANCH="\[\e[33;1m\]" + COLOR_VENV="\[\e[33;1m\]" + COLOR_GREEN="\[\e[32;1m\]" + COLOR_PATH_OK="\[\e[32;1m\]" + COLOR_PATH_ERR="\[\e[31;1m\]" + COLOR_NONE="\[\e[0m\]" + # Change the path color based on return value. + if test $? -eq 0 ; then + PATH_COLOR=${COLOR_PATH_OK} + else + PATH_COLOR=${COLOR_PATH_ERR} + fi + # Set the PS1 to be "[workingdirectory:commandcount" + PS1="${COLOR_DIVIDER}[${PATH_COLOR}\w${COLOR_DIVIDER}:${COLOR_CMDCOUNT}\#${COLOR_DIVIDER}" + # Add git branch portion of the prompt, this adds ":branchname" + if ! git_loc="$(type -p "$git_command_name")" || [ -z "$git_loc" ]; then + # Git is installed + if [ -d .git ] || git rev-parse --is-inside-work-tree > /dev/null 2>&1; then + # Inside of a git repository + GIT_BRANCH=$(git symbolic-ref --short HEAD) + PS1="${PS1}:${COLOR_GITBRANCH}${GIT_BRANCH}${COLOR_DIVIDER}" + fi + fi + # Add Python VirtualEnv portion of the prompt, this adds ":venvname" + if ! test -z "$VIRTUAL_ENV" ; then + PS1="${PS1}:${COLOR_VENV}`basename \"$VIRTUAL_ENV\"`${COLOR_DIVIDER}" + fi + # Close out the prompt, this adds "]\n[username@hostname] " + PS1="${PS1}]\n${COLOR_DIVIDER}[${COLOR_USERNAME}\u${COLOR_USERHOSTAT}@${COLOR_HOSTNAME}\h${COLOR_DIVIDER}]${COLOR_NONE} " +} + +# Tell Bash to run the above function for every prompt +export PROMPT_COMMAND=set_bash_prompt diff --git a/roles/general/tasks/improved-bash.yml b/roles/general/tasks/improved-bash.yml new file mode 100644 index 0000000..ad510e5 --- /dev/null +++ b/roles/general/tasks/improved-bash.yml @@ -0,0 +1,6 @@ +--- + +- name: Copy bash config files + ansible.builtin.copy: + src: ../files/ + dest: /etc/profile.d/ \ No newline at end of file diff --git a/roles/general/tasks/main.yml b/roles/general/tasks/main.yml new file mode 100644 index 0000000..02ef397 --- /dev/null +++ b/roles/general/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- name: Improve bash setup + include_tasks: improved-bash.yml \ No newline at end of file