Merge pull request #301 from bosr/ansible
ansible, ansible-playbook, ansible-galaxy completions
This commit is contained in:
commit
687d0aed3c
|
@ -0,0 +1,439 @@
|
|||
#compdef ansible
|
||||
# ------------------------------------------------------------------------------
|
||||
# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the zsh-users nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
|
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ------------------------------------------------------------------------------
|
||||
# Description
|
||||
# -----------
|
||||
#
|
||||
# Completion script for ansible v1.8.4 (http://ansible.org)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
# Authors
|
||||
# -------
|
||||
#
|
||||
# * Romain Bossart (https://github.com/bosr)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
#
|
||||
# Needs either ANSIBLE_HOSTS or /etc/ansible/hosts on linux
|
||||
# (or /usr/local/etc/ansible/hosts on OSX)
|
||||
#
|
||||
# Note 1: the following gist (https://gist.github.com/15ed54a438a36d67fd99.git)
|
||||
# has some files to help improve the hostfile shell parsing
|
||||
#
|
||||
# Note 2: I tried to use `_arguments --`, but the output of `ansible --help`
|
||||
# is not parsed entirely correctly, and anyway no modules or host would available.
|
||||
#
|
||||
|
||||
|
||||
# ansible zsh completion
|
||||
#
|
||||
|
||||
__host_file_location () {
|
||||
# find the location of the host file:
|
||||
# 1. check $ANSIBLE_HOSTS
|
||||
# 2. else check /etc/ansible/hosts or /usr/local/etc/...
|
||||
# (depending on platform)
|
||||
#
|
||||
[[ "$OSTYPE" == darwin* ]] && FALLBACK="/usr/local/etc/ansible/hosts"
|
||||
[[ "$OSTYPE" == linux* ]] && FALLBACK="/etc/ansible/hosts"
|
||||
HOST_FILE=${ANSIBLE_HOSTS:=${FALLBACK}}
|
||||
[[ -f ${HOST_FILE} ]] || HOST_FILE=/dev/null
|
||||
|
||||
echo ${HOST_FILE}
|
||||
}
|
||||
|
||||
__ll_group_list () {
|
||||
# parses the ini hostfile for groups only: [...]
|
||||
HOST_FILE=$(__host_file_location)
|
||||
|
||||
local -a group_list
|
||||
group_list=$(command \
|
||||
cat ${HOST_FILE} \
|
||||
| awk '$1 ~ /^\[.*\]$/ && !/=/ && !/:vars/ \
|
||||
{ gsub(/[\[\]]/, "", $1); gsub(/:children/, "", $1) ; print $1 }' \
|
||||
| uniq )
|
||||
|
||||
echo ${group_list}
|
||||
}
|
||||
|
||||
|
||||
__host_list ()
|
||||
{
|
||||
# parses the ini hostfile for hosts only
|
||||
# but then has to remove all group occurrences
|
||||
HOST_FILE=$(__host_file_location)
|
||||
|
||||
# this will also contain groups if they are referenced in other groups
|
||||
local -a mixed_host_list
|
||||
mixed_host_list=$(command \
|
||||
cat ${HOST_FILE} \
|
||||
| awk 'NF && $1 !~ /[\[:=]/ { print $1 }' \
|
||||
| sort | uniq)
|
||||
|
||||
# compute set difference h1 - h2
|
||||
local -a h1 h2 host_list
|
||||
h1=${mixed_host_list}
|
||||
h2=$(__ll_group_list)
|
||||
host_list=($(command \
|
||||
sort <(echo $h1) <(echo $h2) <(echo $h2) \
|
||||
| uniq -u \
|
||||
| paste -s -d ' ' - )
|
||||
)
|
||||
|
||||
_wanted application expl 'hosts' compadd ${host_list}
|
||||
|
||||
# method that delegates to ansible (slow)
|
||||
# _wanted application expl 'hosts' compadd $(command ansible \
|
||||
# all --list-hosts\
|
||||
# 2>/dev/null)
|
||||
}
|
||||
|
||||
__group_list ()
|
||||
{
|
||||
gl=($(command echo $(__ll_group_list) | paste -s -d ' ' - )) # 'a\nb\nc' -> (a b c)
|
||||
_wanted application2 expl 'groups' compadd $gl
|
||||
}
|
||||
|
||||
|
||||
_modules=(
|
||||
'a10_server:(E) Manage A10 Networks AX/SoftAX/Thunder/vThunder devices'
|
||||
'a10_service_group:(E) Manage A10 Networks AX/SoftAX/Thunder/vThunder devices'
|
||||
'a10_virtual_server:(E) Manage A10 Networks AX/SoftAX/Thunder/vThunder devices'
|
||||
'accelerate:Enable accelerated mode on remote node'
|
||||
'acl:Sets and retrieves file ACL information.'
|
||||
'add_host:add a host (and alternatively a group) to the ansible-playbook in-memory inventory'
|
||||
'airbrake_deployment:(E) Notify airbrake about app deployments'
|
||||
'alternatives:(E) Manages alternative programs for common commands'
|
||||
'apache2_module:enables/disables a module of the Apache2 webserver'
|
||||
'apt:Manages apt-packages'
|
||||
'apt_key:Add or remove an apt key'
|
||||
'apt_repository:Add and remove APT repositories'
|
||||
'apt_rpm:apt_rpm package manager'
|
||||
'assemble:Assembles a configuration file from fragments'
|
||||
'assert:Fail with custom message'
|
||||
'async_status:Obtain status of asynchronous task'
|
||||
'at:(E) Schedule the execution of a command or script file via the at command.'
|
||||
'authorized_key:Adds or removes an SSH authorized key'
|
||||
'azure:create or terminate a virtual machine in azure'
|
||||
'bigip_facts:(E) Collect facts from F5 BIG-IP devices'
|
||||
'bigip_monitor_http:(E) Manages F5 BIG-IP LTM http monitors'
|
||||
'bigip_monitor_tcp:(E) Manages F5 BIG-IP LTM tcp monitors'
|
||||
'bigip_node:(E) Manages F5 BIG-IP LTM nodes'
|
||||
'bigip_pool:(E) Manages F5 BIG-IP LTM pools'
|
||||
'bigip_pool_member:(E) Manages F5 BIG-IP LTM pool members'
|
||||
'bigpanda:(E) Notify BigPanda about deployments'
|
||||
'boundary_meter:(E) Manage boundary meters'
|
||||
'bower:(E) Manage bower packages with bower'
|
||||
'bzr:(E) Deploy software (or files) from bzr branches'
|
||||
'campfire:(E) Send a message to Campfire'
|
||||
'capabilities:(E) Manage Linux capabilities'
|
||||
'cloudformation:create a AWS CloudFormation stack'
|
||||
'command:Executes a command on a remote node'
|
||||
'composer:(E) Dependency Manager for PHP'
|
||||
'copy:Copies files to remote locations.'
|
||||
'cpanm:(E) Manages Perl library dependencies.'
|
||||
'cron:Manage cron.d and crontab entries.'
|
||||
'crypttab:(E) Encrypted Linux block devices'
|
||||
'datadog_event:(E) Posts events to DataDog service'
|
||||
'debconf:(E) Configure a .deb package'
|
||||
'debug:Print statements during execution'
|
||||
'digital_ocean:Create/delete a droplet/SSH_key in DigitalOcean'
|
||||
'digital_ocean_domain:Create/delete a DNS record in DigitalOcean'
|
||||
'digital_ocean_sshkey:Create/delete an SSH key in DigitalOcean'
|
||||
'django_manage:Manages a Django application.'
|
||||
'dnf:(E) Manages packages with the I(dnf) package manager'
|
||||
'dnsimple:(E) Interface with dnsimple.com (a DNS hosting service).'
|
||||
'dnsmadeeasy:(E) Interface with dnsmadeeasy.com (a DNS hosting service).'
|
||||
'docker:manage docker containers'
|
||||
'docker_image (D):manage docker images'
|
||||
'easy_install:Installs Python libraries'
|
||||
'ec2:create, terminate, start or stop an instance in ec2'
|
||||
'ec2_ami:create or destroy an image in ec2'
|
||||
'ec2_ami_search:Retrieve AWS AMI information for a given operating system.'
|
||||
'ec2_asg:Create or delete AWS Autoscaling Groups'
|
||||
'ec2_eip:associate an EC2 elastic IP with an instance.'
|
||||
'ec2_elb:De-registers or registers instances from EC2 ELBs'
|
||||
'ec2_elb_lb:Creates or destroys Amazon ELB.'
|
||||
'ec2_facts:Gathers facts about remote hosts within ec2 (aws)'
|
||||
'ec2_group:maintain an ec2 VPC security group.'
|
||||
'ec2_key:maintain an ec2 key pair.'
|
||||
'ec2_lc:Create or delete AWS Autoscaling Launch Configurations'
|
||||
'ec2_metric_alarm:Create/update or delete AWS Cloudwatch ‘metric alarms’'
|
||||
'ec2_scaling_policy:Create or delete AWS scaling policies for Autoscaling groups'
|
||||
'ec2_snapshot:creates a snapshot from an existing volume'
|
||||
'ec2_tag:create and remove tag(s) to ec2 resources.'
|
||||
'ec2_vol:create and attach a volume, return volume id and device map'
|
||||
'ec2_vpc:configure AWS virtual private clouds'
|
||||
'ejabberd_user:(E) Manages users for ejabberd servers'
|
||||
'elasticache:Manage cache clusters in Amazon Elasticache.'
|
||||
'facter:(E) Runs the discovery program I(facter) on the remote system'
|
||||
'fail:Fail with custom message'
|
||||
'fetch:Fetches a file from remote nodes'
|
||||
'file:Sets attributes of files'
|
||||
'filesystem:(E) Makes file system on block device'
|
||||
'fireball:Enable fireball mode on remote node'
|
||||
'firewalld:(E) Manage arbitrary ports/services with firewalld'
|
||||
'flowdock:(E) Send a message to a flowdock'
|
||||
'gc_storage:This module manages objects/buckets in Google Cloud Storage.'
|
||||
'gce:create or terminate GCE instances'
|
||||
'gce_img:(E) utilize GCE image resources'
|
||||
'gce_lb:create/destroy GCE load-balancer resources'
|
||||
'gce_net:create/destroy GCE networks and firewall rules'
|
||||
'gce_pd:utilize GCE persistent disk resources'
|
||||
'gem:Manage Ruby gems'
|
||||
'get_url:Downloads files from HTTP, HTTPS, or FTP to node'
|
||||
'getent:(E) a wrapper to the unix getent utility'
|
||||
'git:Deploy software (or files) from git checkouts'
|
||||
'github_hooks:(E) Manages github service hooks.'
|
||||
'glance_image:Add/Delete images from glance'
|
||||
'gluster_volume:(E) Manage GlusterFS volumes'
|
||||
'group:Add or remove groups'
|
||||
'group_by:Create Ansible groups based on facts'
|
||||
'grove:(E) Sends a notification to a grove.io channel'
|
||||
'haproxy:(E) An Ansible module to handle states enable/disable server and set weight to backend host in haproxy using socket commands.'
|
||||
'hg:Manages Mercurial (hg) repositories.'
|
||||
'hipchat:(E) Send a message to hipchat'
|
||||
'homebrew:(E) Package manager for Homebrew'
|
||||
'homebrew_cask:(E) Install/uninstall homebrew casks.'
|
||||
'homebrew_tap:(E) Tap a Homebrew repository.'
|
||||
'hostname:Manage hostname'
|
||||
'htpasswd:manage user files for basic authentication'
|
||||
'include_vars:Load variables from files, dynamically within a task.'
|
||||
'ini_file:Tweak settings in INI files'
|
||||
'irc:(E) Send a message to an IRC channel'
|
||||
'jabber:(E) Send a message to jabber user or chat room'
|
||||
'jboss:(E) deploy applications to JBoss'
|
||||
'jira:(E) create and modify issues in a JIRA instance'
|
||||
'kernel_blacklist:(E) Blacklist kernel modules'
|
||||
'keystone_user:Manage OpenStack Identity (keystone) users, tenants and roles'
|
||||
'layman:(E) Manage Gentoo overlays'
|
||||
'librato_annotation:(E) create an annotation in librato'
|
||||
'lineinfile:Ensure a particular line is in a file, or replace an existing line using a back-referenced regular expression.'
|
||||
'linode:create / delete / stop / restart an instance in Linode Public Cloud'
|
||||
'lldp:(E) get details reported by lldp'
|
||||
'locale_gen:(E) Creates or removes locales.'
|
||||
'logentries:(E) Module for tracking logs via logentries.com'
|
||||
'lvg:(E) Configure LVM volume groups'
|
||||
'lvol:(E) Configure LVM logical volumes'
|
||||
'macports:(E) Package manager for MacPorts'
|
||||
'mail:(E) Send an email'
|
||||
'modprobe:(E) Add or remove kernel modules'
|
||||
'mongodb_user:(E) Adds or removes a user from a MongoDB database.'
|
||||
'monit:(E) Manage the state of a program monitored via Monit'
|
||||
'mount:Control active and configured mount points'
|
||||
'mqtt:(E) Publish a message on an MQTT topic for the IoT'
|
||||
'mysql_db:Add or remove MySQL databases from a remote host.'
|
||||
'mysql_replication:(E) Manage MySQL replication'
|
||||
'mysql_user:Adds or removes a user from a MySQL database.'
|
||||
'mysql_variables:Manage MySQL global variables'
|
||||
'nagios:(E) Perform common tasks in Nagios related to downtime and notifications.'
|
||||
'netscaler:(E) Manages Citrix NetScaler entities'
|
||||
'newrelic_deployment:(E) Notify newrelic about app deployments'
|
||||
'nexmo:(E) Send a SMS via nexmo'
|
||||
'nova_compute:Create/Delete VMs from OpenStack'
|
||||
'nova_keypair:Add/Delete key pair from nova'
|
||||
'npm:(E) Manage node.js packages with npm'
|
||||
'ohai:(E) Returns inventory data from I(Ohai)'
|
||||
'open_iscsi:(E) Manage iscsi targets with open-iscsi'
|
||||
'openbsd_pkg:(E) Manage packages on OpenBSD.'
|
||||
'openvswitch_bridge:(E) Manage Open vSwitch bridges'
|
||||
'openvswitch_port:(E) Manage Open vSwitch ports'
|
||||
'opkg:(E) Package manager for OpenWrt'
|
||||
'osx_say:(E) Makes an OSX computer to speak.'
|
||||
'ovirt:(E) oVirt/RHEV platform management'
|
||||
'pacman:(E) Manage packages with I(pacman)'
|
||||
'pagerduty:(E) Create PagerDuty maintenance windows'
|
||||
'patch:(E) Apply patch files using the GNU patch tool.'
|
||||
'pause:Pause playbook execution'
|
||||
'ping:Try to connect to host and return C(pong) on success.'
|
||||
'pingdom:(E) Pause/unpause Pingdom alerts'
|
||||
'pip:Manages Python library dependencies.'
|
||||
'pkg5:(E) Manages packages with the Solaris 11 Image Packaging System'
|
||||
'pkg5_publisher:(E) Manages Solaris 11 Image Packaging System publishers'
|
||||
'pkgin:(E) Package manager for SmartOS'
|
||||
'pkgng:(E) Package manager for FreeBSD >= 9.0'
|
||||
'pkgutil:(E) Manage CSW-Packages on Solaris'
|
||||
'portage:(E) Package manager for Gentoo'
|
||||
'portinstall:(E) Installing packages from FreeBSD’s ports system'
|
||||
'postgresql_db:Add or remove PostgreSQL databases from a remote host.'
|
||||
'postgresql_lang:(E) Adds, removes or changes procedural languages with a PostgreSQL database.'
|
||||
'postgresql_privs:Grant or revoke privileges on PostgreSQL database objects.'
|
||||
'postgresql_user:Adds or removes a users (roles) from a PostgreSQL database.'
|
||||
'quantum_floating_ip:Add/Remove floating IP from an instance'
|
||||
'quantum_floating_ip_associate:Associate or disassociate a particular floating IP with an instance'
|
||||
'quantum_network:Creates/Removes networks from OpenStack'
|
||||
'quantum_router:Create or Remove router from openstack'
|
||||
'quantum_router_gateway:set/unset a gateway interface for the router with the specified external network'
|
||||
'quantum_router_interface:Attach/Dettach a subnet’s interface to a router'
|
||||
'quantum_subnet:Add/remove subnet from a network'
|
||||
'rabbitmq_parameter:(E) Adds or removes parameters to RabbitMQ'
|
||||
'rabbitmq_plugin:(E) Adds or removes plugins to RabbitMQ'
|
||||
'rabbitmq_policy:(E) Manage the state of policies in RabbitMQ.'
|
||||
'rabbitmq_user:(E) Adds or removes users to RabbitMQ'
|
||||
'rabbitmq_vhost:(E) Manage the state of a virtual host in RabbitMQ'
|
||||
'raw:Executes a low-down and dirty SSH command'
|
||||
'rax:create / delete an instance in Rackspace Public Cloud'
|
||||
'rax_cbs:Manipulate Rackspace Cloud Block Storage Volumes'
|
||||
'rax_cbs_attachments:Manipulate Rackspace Cloud Block Storage Volume Attachments'
|
||||
'rax_cdb:create/delete or resize a Rackspace Cloud Databases instance'
|
||||
'rax_cdb_database:create / delete a database in the Cloud Databases'
|
||||
'rax_cdb_user:create / delete a Rackspace Cloud Database'
|
||||
'rax_clb:create / delete a load balancer in Rackspace Public Cloud'
|
||||
'rax_clb_nodes:add, modify and remove nodes from a Rackspace Cloud Load Balancer'
|
||||
'rax_dns:Manage domains on Rackspace Cloud DNS'
|
||||
'rax_dns_record:Manage DNS records on Rackspace Cloud DNS'
|
||||
'rax_facts:Gather facts for Rackspace Cloud Servers'
|
||||
'rax_files:Manipulate Rackspace Cloud Files Containers'
|
||||
'rax_files_objects:Upload, download, and delete objects in Rackspace Cloud Files'
|
||||
'rax_identity:Load Rackspace Cloud Identity'
|
||||
'rax_keypair:Create a keypair for use with Rackspace Cloud Servers'
|
||||
'rax_meta:Manipulate metadata for Rackspace Cloud Servers'
|
||||
'rax_network:create / delete an isolated network in Rackspace Public Cloud'
|
||||
'rax_queue:create / delete a queue in Rackspace Public Cloud'
|
||||
'rax_scaling_group:Manipulate Rackspace Cloud Autoscale Groups'
|
||||
'rax_scaling_policy:Manipulate Rackspace Cloud Autoscale Scaling Policy'
|
||||
'rds:create, delete, or modify an Amazon rds instance'
|
||||
'rds_param_group:manage RDS parameter groups'
|
||||
'rds_subnet_group:manage RDS database subnet groups'
|
||||
'redhat_subscription:Manage Red Hat Network registration and subscriptions using the C(subscription-manager) command'
|
||||
'redis:(E) Various redis commands, slave and flush'
|
||||
'replace:Replace all instances of a particular string in a file using a back-referenced regular expression.'
|
||||
'rhn_channel:Adds or removes Red Hat software channels'
|
||||
'rhn_register:Manage Red Hat Network registration using the C(rhnreg_ks) command'
|
||||
'riak:(E) This module handles some common Riak operations'
|
||||
'rollbar_deployment:(E) Notify Rollbar about app deployments'
|
||||
'route53:add or delete entries in Amazons Route53 DNS service'
|
||||
'rpm_key:Adds or removes a gpg key from the rpm db'
|
||||
's3:S3 module putting a file into S3.'
|
||||
'script:Runs a local script on a remote node after transferring it'
|
||||
'seboolean:Toggles SELinux booleans.'
|
||||
'selinux:Change policy and state of SELinux'
|
||||
'service:Manage services.'
|
||||
'set_fact:Set host facts from a task'
|
||||
'setup:Gathers facts about remote hosts'
|
||||
'shell:Execute commands in nodes.'
|
||||
'slack:(E) Send Slack notifications'
|
||||
'slurp:Slurps a file from remote nodes'
|
||||
'snmp_facts:(E) Retrive facts for a device using SNMP.'
|
||||
'sns:(E) Send Amazon Simple Notification Service (SNS) messages'
|
||||
'stackdriver:(E) Send code deploy and annotation events to stackdriver'
|
||||
'stat:retrieve file or file system status'
|
||||
'subversion:Deploys a subversion repository.'
|
||||
'supervisorctl:Manage the state of a program or group of programs running via supervisord'
|
||||
'svc:(E) Manage daemontools services.'
|
||||
'svr4pkg:(E) Manage Solaris SVR4 packages'
|
||||
'swdepot:(E) Manage packages with swdepot package manager (HP-UX)'
|
||||
'synchronize:Uses rsync to make synchronizing file paths in your playbooks quick and easy.'
|
||||
'sysctl:Manage entries in sysctl.conf.'
|
||||
'template:Templates a file out to a remote server.'
|
||||
'twilio:(E) Sends a text message to a mobile phone through Twilio.'
|
||||
'typetalk:(E) Send a message to typetalk'
|
||||
'ufw:(E) Manage firewall with UFW'
|
||||
'unarchive:Copies an archive to a remote location and unpack it'
|
||||
'uptimerobot:(E) Pause and start Uptime Robot monitoring'
|
||||
'uri:Interacts with webservices'
|
||||
'urpmi:(E) Urpmi manager'
|
||||
'user:Manage user accounts'
|
||||
'virt:(E) Manages virtual machines supported by libvirt'
|
||||
'vsphere_guest:Create/delete/manage a guest VM through VMware vSphere.'
|
||||
'wait_for:Waits for a condition before continuing.'
|
||||
'win_chocolatey:(E) Installs packages using chocolatey'
|
||||
'win_feature:Installs and uninstalls Windows Features'
|
||||
'win_get_url:Fetches a file from a given URL'
|
||||
'win_group:Add and remove local groups'
|
||||
'win_msi:Installs and uninstalls Windows MSI files'
|
||||
'win_ping:A windows version of the classic ping module.'
|
||||
'win_service:Manages Windows services'
|
||||
'win_stat:returns information about a Windows file'
|
||||
'win_updates:(E) Lists / Installs windows updates'
|
||||
'win_user:Manages local Windows user accounts'
|
||||
'xattr:set/retrieve extended attributes'
|
||||
'yum:Manages packages with the I(yum) package manager'
|
||||
'zabbix_group:(E) Add or remove a host group to Zabbix.'
|
||||
'zabbix_maintenance:(E) Create Zabbix maintenance windows'
|
||||
'zfs:(E) Manage zfs'
|
||||
'zypper:(E) Manage packages on SUSE and openSUSE'
|
||||
'zypper_repository:(E) Add and remove Zypper repositories'
|
||||
)
|
||||
|
||||
|
||||
_ansible ()
|
||||
{
|
||||
local curcontext="$curcontext" state line
|
||||
typeset -A opt_args
|
||||
|
||||
_arguments -C -W \
|
||||
'1:pattern:->pattern'\
|
||||
"(-a --args)"{-a,--args}"[ARGS module arguments]:arguments:(ARG)"\
|
||||
"(-k --ask-pass)"{-k,--ask-pass}"[ask for SSH password]"\
|
||||
'--ask-su-pass[ask for su password]'\
|
||||
"(-K --ask-sudo-pass)"{-K,--ask-sudo-pass}"[ask for sudo password]"\
|
||||
'--ask-vault-pass[ask for vault password]'\
|
||||
"(-B --background)"{-B,--background}"[DURATION run asynchronously for DURATION (s)]:duration:(DURATION)"\
|
||||
"(-C --check)"{-C,--check}"[don't make any changes]"\
|
||||
"(-c --connection)"{-c,--connection}"[CONNECTION connection type to use (default=smart)]:connection type:(smart ssh local chroot)"\
|
||||
"(-f --forks)"{-f,--forks}"[FORKS number of parallel processes to use (default=5)]:forks:(5)"\
|
||||
"(-h --help)"{-h,--help}"[help message]"\
|
||||
"(-i --inventory-file)"{-i,--inventory-file}"[INVENTORY specify inventory host file]:inventory file:_files"\
|
||||
"(-l --limit)"{-l,--limit}"[SUBSET further limit selected hosts to an additional pattern]:subset pattern:->pattern"\
|
||||
'--list-hosts[outputs a list of matching hosts. Does not execute anything else]'\
|
||||
"(-m --module-name)"{-m,--module-name}"[MODULE_NAME module name (default=command)]:module name:->module"\
|
||||
"(-M --module-path)"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\
|
||||
"(-o --one-line)"{-o,--one-line}"[condense output]"\
|
||||
"(-P --poll)"{-P,--poll}"[POLL_INTERVAL set the poll interval (s) if using -B (default=15)]:poll interval:(15)"\
|
||||
"--private-key[PRIVATE_KEY_FILE use this file to authenticate the connection]:private key file:_files"\
|
||||
"(-S --su)"{-S,--su}"[run operations with su]"\
|
||||
"(-R --su-user)"{-R,--su-user}"[SU_USER run operations with su as this user (default=root)]:su user:(root)"\
|
||||
"(-s --sudo)"{-s,--sudo}"[run operations with sudo (nopasswd)]"\
|
||||
"(-U --sudo-user)"{-U,--sudo-user}"[SUDO_USER desired sudo user (default=root)]:su user:(root)"\
|
||||
"(-T --timeout)"{-T,--timeout}"[TIMEOUT override the SSH timeout (s) (default=10)]:ssh timeout:(10)"\
|
||||
"(-t --tree)"{-t,--tree}"[OUTPUT_DIRECTORY log output to this directory]:output directory:_files -/"\
|
||||
"(-u --user)"{-u,--user}"[REMOTE_USER connect as this user (default=${USER})]:connect as user:(${USER})"\
|
||||
"--vault-password-file[VAULT_PASSWORD_FILE vault password file]:vault password file:_files"\
|
||||
"(-v --verbose)"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]"\
|
||||
"--version[show program's version number and exit]"\
|
||||
|
||||
case $state in
|
||||
pattern)
|
||||
_arguments '*:feature:__host_list'
|
||||
_arguments '*:feature:__group_list'
|
||||
;;
|
||||
module)
|
||||
_describe -t commands "modules" _modules
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_ansible "$@"
|
||||
|
||||
# Local Variables:
|
||||
# mode: Shell-Script
|
||||
# sh-indentation: 2
|
||||
# indent-tabs-mode: nil
|
||||
# sh-basic-offset: 2
|
||||
# End:
|
||||
# vim: ft=zsh sw=2 ts=2 et
|
|
@ -0,0 +1,111 @@
|
|||
#compdef ansible-galaxy
|
||||
# ------------------------------------------------------------------------------
|
||||
# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the zsh-users nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
|
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ------------------------------------------------------------------------------
|
||||
# Description
|
||||
# -----------
|
||||
#
|
||||
# Completion script for ansible-galaxy v1.8.4 (http://ansible.org)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
# Authors
|
||||
# -------
|
||||
#
|
||||
# * Romain Bossart (https://github.com/bosr)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
#
|
||||
# Note: I tried to use `_arguments --`, but the output of `ansible --help`
|
||||
# is not parsed entirely correctly, and anyway no modules or host would available.
|
||||
#
|
||||
|
||||
# ansible-galaxy zsh completion
|
||||
#
|
||||
_ansible-galaxy ()
|
||||
{
|
||||
local context curcontext="$curcontext" state line
|
||||
typeset -A opt_args
|
||||
|
||||
_arguments -C \
|
||||
"1:command:(init info install list remove)" \
|
||||
"*::option:->option"
|
||||
|
||||
case $state in
|
||||
option)
|
||||
case $line[1] in
|
||||
init)
|
||||
_arguments \
|
||||
"(-h --help)"{-h,--help}"[help message]" \
|
||||
"(-p --init-path)"{-p,--init-path}"[INIT_PATH path in which the skeleton role will be created (default=./)]:init path:(./)" \
|
||||
"(--offline)--offline[Don't query the galaxy API when creating roles]" \
|
||||
"(-s --server)"{-s,--server}"[API_SERVER The API server destination]:api server:(http://apiserver)" \
|
||||
"(-f --force)"{-f,--force}"[Force overwriting an existing role]" \
|
||||
":role name:(ROLE)"
|
||||
;;
|
||||
info)
|
||||
_arguments \
|
||||
"(-h --help)"{-h,--help}"[help message]" \
|
||||
"(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \
|
||||
"(-s --server)"{-s,--server}"[API_SERVER The API server destination]:api server:(http://apiserver)" \
|
||||
":role name:(ROLE,version)"
|
||||
;;
|
||||
install)
|
||||
_arguments \
|
||||
"(-h --help)"{-h,--help}"[help message]" \
|
||||
"(-i --ignore-errors)"{-i,--ignore-errors}"[Ignore errors and continue with the next specified role]" \
|
||||
"(-n --no-deps)"{-n,--no-deps}"[Don't download roles listed as dependencies]" \
|
||||
"(-r --role-file)"{-r,--role-file}"[ROLE_FILE A file containing a list of roles to be imported]:role file:_files" \
|
||||
"(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \
|
||||
"(-s --server)"{-s,--server}"[API_SERVER The API server destination]:api server:(http://apiserver)" \
|
||||
"(-f --force)"{-f,--force}"[Force overwriting an existing role]" \
|
||||
":role name:(ROLE)"
|
||||
;;
|
||||
list)
|
||||
_arguments \
|
||||
"(-h --help)"{-h,--help}"[help message]" \
|
||||
"(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \
|
||||
":role name:(ROLE)"
|
||||
;;
|
||||
remove)
|
||||
_arguments \
|
||||
"(-h --help)"{-h,--help}"[help message]" \
|
||||
"(-p --roles-path)"{-p,--roles-path}"[ROLES_PATH The path to the directory containing your roles (default: from ansible.cfg)]:roles path:_files -/" \
|
||||
"*:role name:(ROLE)"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_ansible-galaxy "$@"
|
||||
|
||||
# Local Variables:
|
||||
# mode: Shell-Script
|
||||
# sh-indentation: 2
|
||||
# indent-tabs-mode: nil
|
||||
# sh-basic-offset: 2
|
||||
# End:
|
||||
# vim: ft=zsh sw=2 ts=2 et
|
|
@ -0,0 +1,177 @@
|
|||
#compdef ansible-playbook
|
||||
# ------------------------------------------------------------------------------
|
||||
# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the zsh-users nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
|
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ------------------------------------------------------------------------------
|
||||
# Description
|
||||
# -----------
|
||||
#
|
||||
# Completion script for ansible-playbook v1.8.4 (http://ansible.org)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
# Authors
|
||||
# -------
|
||||
#
|
||||
# * Romain Bossart (https://github.com/bosr)
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
#
|
||||
# Needs either ANSIBLE_HOSTS or /etc/ansible/hosts on linux
|
||||
# (or /usr/local/etc/ansible/hosts on OSX)
|
||||
#
|
||||
# Note 1: the following gist (https://gist.github.com/15ed54a438a36d67fd99.git)
|
||||
# has some files to help improve the hostfile shell parsing
|
||||
#
|
||||
# Note 2: I tried to use `_arguments --`, but the output of `ansible --help`
|
||||
# is not parsed entirely correctly, and anyway no modules or host would available.
|
||||
#
|
||||
|
||||
# ansible-playbook zsh completion
|
||||
#
|
||||
__host_file_location () {
|
||||
# find the location of the host file:
|
||||
# 1. check $ANSIBLE_HOSTS
|
||||
# 2. else check /etc/ansible/hosts or /usr/local/etc/...
|
||||
# (depending on platform)
|
||||
#
|
||||
|
||||
[[ "$OSTYPE" == darwin* ]] && FALLBACK="/usr/local/etc/ansible/hosts"
|
||||
[[ "$OSTYPE" == linux* ]] && FALLBACK="/etc/ansible/hosts"
|
||||
HOST_FILE=${ANSIBLE_HOSTS:=${FALLBACK}}
|
||||
[[ -f ${HOST_FILE} ]] || HOST_FILE=/dev/null
|
||||
|
||||
echo ${HOST_FILE}
|
||||
}
|
||||
|
||||
__ll_group_list () {
|
||||
# parses the ini hostfile for groups only: [...]
|
||||
HOST_FILE=$(__host_file_location)
|
||||
|
||||
local -a group_list
|
||||
group_list=$(command \
|
||||
cat ${HOST_FILE} \
|
||||
| awk '$1 ~ /^\[.*\]$/ && !/=/ && !/:vars/ \
|
||||
{ gsub(/[\[\]]/, "", $1); gsub(/:children/, "", $1) ; print $1 }' \
|
||||
| uniq )
|
||||
|
||||
echo ${group_list}
|
||||
}
|
||||
|
||||
|
||||
__host_list ()
|
||||
{
|
||||
# parses the ini hostfile for hosts only
|
||||
# but then has to remove all group occurrences
|
||||
HOST_FILE=$(__host_file_location)
|
||||
|
||||
# this will also contain groups if they are referenced in other groups
|
||||
local -a mixed_host_list
|
||||
mixed_host_list=$(command \
|
||||
cat ${HOST_FILE} \
|
||||
| awk 'NF && $1 !~ /[\[:=]/ { print $1 }' \
|
||||
| sort | uniq)
|
||||
|
||||
# compute set difference h1 - h2
|
||||
local -a h1 h2 host_list
|
||||
h1=${mixed_host_list}
|
||||
h2=$(__ll_group_list)
|
||||
host_list=($(command \
|
||||
sort <(echo $h1) <(echo $h2) <(echo $h2) \
|
||||
| uniq -u \
|
||||
| paste -s -d ' ' - )
|
||||
)
|
||||
|
||||
_wanted application expl 'hosts' compadd ${host_list}
|
||||
|
||||
# method that delegates to ansible (slow)
|
||||
# _wanted application expl 'hosts' compadd $(command ansible \
|
||||
# all --list-hosts\
|
||||
# 2>/dev/null)
|
||||
}
|
||||
|
||||
__group_list ()
|
||||
{
|
||||
gl=($(command echo $(__ll_group_list) | paste -s -d ' ' - )) # 'a\nb\nc' -> (a b c)
|
||||
_wanted application2 expl 'groups' compadd $gl
|
||||
}
|
||||
|
||||
|
||||
|
||||
_ansible-playbook ()
|
||||
{
|
||||
local curcontext="$curcontext" state line
|
||||
typeset -A opt_args
|
||||
|
||||
_arguments -C -W \
|
||||
"1:playbook yml file:_files -g '*.yml'"\
|
||||
"(-k --ask-pass)"{-k,--ask-pass}"[ask for SSH password]"\
|
||||
'--ask-su-pass[ask for su password]'\
|
||||
"(-K --ask-sudo-pass)"{-K,--ask-sudo-pass}"[ask for sudo password]"\
|
||||
'--ask-vault-pass[ask for vault password]'\
|
||||
"(-C --check)"{-C,--check}"[don't make any changes]"\
|
||||
"(-c --connection)"{-c,--connection}"[CONNECTION connection type to use (default=smart)]:connection type:(smart ssh local chroot)"\
|
||||
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, thow the diff in those. Works great with --check)]"\
|
||||
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:(EXTRA_VARS)"\
|
||||
'--flush-cache[clear the fact cache]'\
|
||||
'--force-handlers[run handlers even if a task fails]'\
|
||||
"(-f --forks)"{-f,--forks}"[FORKS number of parallel processes to use (default=5)]:forks:(5)"\
|
||||
"(-h --help)"{-h,--help}"[help message]"\
|
||||
"(-i --inventory-file)"{-i,--inventory-file}"[INVENTORY specify inventory host file]:inventory file:_files"\
|
||||
"(-l --limit)"{-l,--limit}"[SUBSET further limit selected hosts to an additional pattern]:subset pattern:->pattern"\
|
||||
'--list-hosts[outputs a list of matching hosts. Does not execute anything else]'\
|
||||
"(-M --module-path)"{-M,--module-path}"[MODULE_PATH specify path to module library (default=None)]:module path:_files -/"\
|
||||
"--private-key[PRIVATE_KEY_FILE use this file to authenticate the connection]:private key file:_files"\
|
||||
"--skip-tags[SKIP_TAGS only run plays and tasks whose tags do not match these values]:skip tags:(SKIP_TAGS)"\
|
||||
"--start-at-task[START_AT start the playbook at the task matching this name]:name:(TASK_NAME)"\
|
||||
'--step[one-step-at-a-time: confirm each task before running]'\
|
||||
"(-S --su)"{-S,--su}"[run operations with su]"\
|
||||
"(-R --su-user)"{-R,--su-user}"[SU_USER run operations with su as this user (default=root)]:su user:(root)"\
|
||||
"(-s --sudo)"{-s,--sudo}"[run operations with sudo (nopasswd)]"\
|
||||
"(-U --sudo-user)"{-U,--sudo-user}"[SUDO_USER desired sudo user (default=root)]:su user:(root)"\
|
||||
'--syntax-check[perform a syntax check on the playbook, but do not execute it]'\
|
||||
"(-t --tags)"{-t,--tags}"[TAGS only run plays and tasks gagged with these values]:task tags:(TAGS)"\
|
||||
"(-T --timeout)"{-T,--timeout}"[TIMEOUT override the SSH timeout (s) (default=10)]:ssh timeout:(10)"\
|
||||
"(-u --user)"{-u,--user}"[REMOTE_USER connect as this user (default=${USER})]:connect as user:(${USER})"\
|
||||
"--vault-password-file[VAULT_PASSWORD_FILE vault password file]:vault password file:_files"\
|
||||
"(-v --verbose)"{-v,--verbose}"[verbose mode (-vvv for more, -vvvv to enable connection debugging)]"\
|
||||
"--version[show program's version number and exit]"\
|
||||
|
||||
case $state in
|
||||
pattern)
|
||||
_arguments '*:feature:__host_list'
|
||||
_arguments '*:feature:__group_list'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_ansible-playbook "$@"
|
||||
|
||||
# Local Variables:
|
||||
# mode: Shell-Script
|
||||
# sh-indentation: 2
|
||||
# indent-tabs-mode: nil
|
||||
# sh-basic-offset: 2
|
||||
# End:
|
||||
# vim: ft=zsh sw=2 ts=2 et
|
Loading…
Reference in New Issue