ansible概述

默认使用ssh协议管理机器,用中心站点管理整个远程机器群;
术语:控制节点,受控节点

ansible安装先决条件:

要求控制节点能使用ssh和托管节点继续通信,不支持win。
note:macos。默认配置少量句柄,openfile少。如果超过15或多fork。
sudo launchctl limit maxfiles unlimited
通信方式,ssh。默认sttp。如果不用sftp可以使用scp。可以在ansible.cfg配置中变更切换到 SCP;
默认情况下,Ansible 使用位于 的 Python 解释器/usr/bin/python来运行其模块
您可以设置ansible_python_interpreter清单变量,可以使用目的主机变量设置python执行版本:ansible_python_interpreter
Examples from an Ansible-INI host file:

配置ansible

配置文件:

/etc/ansible/ansible.cfg
如果是从pip安装ansible。需要创建此文件来覆盖ansible中的默认配置
示例文件:ansible/examples/ansible.cfg
https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg 命令行选项:
可用选项的完整列表在ansible-playbook和ansible中。
ansible指南
基本清单:/etc/ansible/hosts
group配置:

yaml配置:

inventory
托管节点。默认配置文件/etc/ansible/hosts,也可以从命令行中指定不同的hosts文件,也可以使用多个hosts文件;
hosts中有2个默认组。all。ungrouped。
all包含所有主机,ungrouped包含处理group之外没有其他组的所有主机;
每个主机至少属于2个组。all。和ungrouped或者all以及其他一些组;
可以在配置中添加不同的配置:

ini:
[databases] //组名
db-[a:f].example.com //匹配到的hostname
yaml:
  webservers:    //组名 
hosts:       
www[01:50].example.com://匹配到的hostname
将变量分配给一台机器:主机变量
变量分配给单个主机,然后稍后在剧本中使用它。
ini:
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
yaml:
atlanta:
  host1:
    http_port: 80
    maxRequestsPerChild: 808
  host2:
    http_port: 303
    maxRequestsPerChild: 909

非标准ssh端口

badwolf.example.com:5309

连接变量也可以作为宿主变量使用:

[targets]

localhost              ansible_connection=local
other1.example.com     ansible_connection=ssh        ansible_user=myuser
other2.example.com     ansible_connection=ssh        ansible_user=myotheruser

使用多个库存来源

ansible-playbook get_logs.yml -i staging -i production

如果清单中存在变量冲突,他们将会合并变量,合并顺序由库存源参数的顺序控制
如果all:vars没有定义myvar = 1,生产定义了myvar = 2。playbook讲运行myvar = 2;

定义hosts目录:
ansible-playbook example.yml -i inventory
如果目录中存在冲突的的组依赖,其他hosts源,可以使用控制合并顺序很有用,清单根据文件名按照字母顺序来控制结果,可以添加文件名前缀

inventory/
01-openstack.yml # configure inventory plugin to get hosts from Openstack cloud
02-dynamic-inventory.py # add a dditional hosts with dynamic inventory script
03-static-inventory # add static hosts
group_vars/
all.yml # assign variables to all hosts

先执行01—02—03
If 01-openstack.yml defines myvar = 1 for the group all, 02-dynamic-inventory.py defines myvar = 2, and 03-static-inventory defines myvar = 3, the playbook will be run with myvar = 3.

hosts配置清单:
ansible_connection
ansible链接插件的名称,ssh协议类型是smart,ssh,paramike 默认是smart

ansible_host
ansible_port//ssh连接时候使用的ssh port—默认22for ssh
ansible_user //连接时候使用的用户名
ansible_password //连接时候使用的用户密码,比如说 groupname_password
密码最好的方式是创建一个子目录,group_vars/,named 在子目录中创建2个files,vars 和vault。
vars中 定义所有的需要的变量,包含任何敏感信息,然后cp 所有的敏感的var写到vault文件,vault文件中,使用变量前缀 vault_groupname_password。你可以使用这些变量在这个vars file中指向这个matching groupname_password 变量。

特定对于Specific to the SSH connection:
ansible_ssh_private_key_file
ansible_ssh_common_args
ansible_sftp_extra_args
ansible_scp_extra_args
ansible_ssh_extra_args
ansible_ssh_pipelining
这个配置决定是否采用ssh pipelining,这个配置可以覆盖掉在ansiblecfg中pipeling的的配置
ansible_ssh_executable (added in version 2.2)
ssh执行工具。默认是ssh

权限升级问题:
ansible_become
ansible_sudo
ansible_su
允许用户force执行权限升级;
sudo方式
ansible_become_method
sudo用户
ansible_become_user
ansible_sudo_user
ansible_su_user

ansible_become_password
ansible_sudo_password
ansible_su_password

ansible_become_exe
ansible_sudo_exe
ansible_su_exe

ansible_become_flags
ansible_sudo_flags
ansible_su_flags
此项也可以使用配置文件定义:
ansible.cfg in the sudo_flags option

ansible_shell_executable默认:/bin/sh.
ansible_shell_type //The shell type of the target system.
ansible_shell_executable 和此项一起用;

The target host python path.//目标主机python
ansible_python_interpreter

ansible_*_interpreter
匹配类型与python的二级制命令
Works for anything such as ruby or perl and works just like ansible_python_interpreter.

Examples from an Ansible-INI host file:
some_host ansible_port=2222 ansible_user=manager
 aws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
 freebsd_host ansible_python_interpreter=/usr/local/bin/python
 ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3Ansible执行playbook使用ssh。但是不限于使用ssh。连接方式。可以with host 特定的连接方式
 Non-SSH connection typesansible_connection=
This connector can be used to deploy the playbook to the control machine itself.
 ansible_connection=local

此项可以部署这个playbook,直接使用local本地的docker client来连接docker container。
ansible_connection=docker

下面的参数可以被使用在这个connector中:
 ansible_host //The name of the Docker container to connect to.
 ansible_user //The user name to operate within the container. The user must exist inside the container.ansible_become
ansible_docker_extra_args
an example of how to instantly deploy to created containers:
• name: create jenkins container
 docker_container:
 docker_host: myserver.net:4243
 name: my_jenkins
 image: jenkins• name: add container to inventory
 add_host:
 name: my_jenkins
 ansible_connection: docker
 ansible_docker_extra_args: "