note:在这之后博主的实验环境都是使用源码包安装的Ansible环境。
(1)ANSIBLE_CONFIG:首先,ansible命令会检查环境变量,及这个环境变量将指向的配置文件。
(2)./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件。
(3)~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件。
(4)/etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装ansible时自动产生的配置文件。
如果是通过操作系统软件包管理工具或pip安装,那么你在/etc/ansible目录下应该已经有了ansible.cfg配置文件;如果你是通过GitHub仓库安装的,在你赋值的仓库中examples目录下可以找到ansible.cfg,可以把它拷贝到/etc/ansible目录下。
大多数的ansible参数可以通过设置带有ANSIBLE_开头的环境变量进行配置,参数名称必须都是大写字母,如下配置项:
export ANSIBLE_SUDO_USER=root
设置环境变量之后playbook可以直接引用。
常见配置参数:
inventory–这个参数表示资源清单inventory文件配置,资源清单就是一些ansible需要链接管理的主机列表。安装完ansible之后默认所在的inventory列表配置如下:
inventory = /etc/ansible/hosts
library–Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行。这小段代码成为模块,这个library参数就是只想存放在Ansible模块的目录。Ansible支持多个目录方式,只要用冒号(:)隔开就可以,同时也会检查当前执行playbook位置下的./library位置。默认的配置如下:
library = /usr/share/ansible
forks–设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。默认参数配置如下:
forks = 5
sudo_user–这个设置默认执行命令的用户,在playbook中重新设置这个参数。默认参数配置如下:
sudo_user = root
remote_port–这个是指定链接被管节点的管理端口,默认22。除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的。默认配置如下:
remote_port = 22
host_key_checking–这个设置是否检查SSH主机的秘钥。可以设置为True或者False。默认配置如下:
host_key_checking = false
timeout–这是设置SSH链接的超时间隔,单位是秒。默认配置实例如下:
timeout = 60
log_path–Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path来指定一个存储Ansible日志的文件。配置实例如下:
log_path = /var/log/ansible.log
#ssh-keygen -t rsa
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.116.130
尝试ssh [email protected]发现还是不行。查看被管理节点上的日志。
错误的属组关系,因为这台机器上部署了devstack,root目录有附加权限:
属组有额外写权限,去掉就好:
#chmod g-w /root
同时在被控制节点上保证 /root/.ssh有700权限。
/root/.ssh/authorized_key有600权限。
启用ansible,如果使用github安装的源码包则需要使用env-setup启动
source ./hacking/env-setup -q
export ANSIBLE_SUDO_USER=root
echo "127.0.0.1" > ~/ansible_hosts
export ANSIBLE_HOSTS=~/ansible_hosts
修改主机与组配置
#vim /etc/ansible/hosts
#web1
#devstack
192.168.116.129
192.168.116.130
[webservers]
#web1
#devsack
192.168.116.129
192.168.116.130
对单台机器ping操作:
对组器进行ping操作:
在这里测试时在控制主机与被管理节点之间配置了SSH证书信任。如果没有用证书认证,则需要执行ansible命令时添加-k参数,在提示“SSH password:”时输入root(默认)账号密码。实际生产环境中,大多数更倾向于使用Linux普通用户账户进行连接并通过sudo命令实现root权限,格式为:
ansible webservers -m ping -u ansible -sudo
在用户home目录下创建一个资源清单文件inventory.cfg内容如下:
# cat inventory.cfg
[webservers]
192.168.116.129
192.168.116.130
用ansible的shell模块在webservers组的个服务器上显示“hello ansible!”命令如下:
# ansible webservers -m shell -a '/bin/echo hello ansible!' -i inventory.cfg
用ansible的command模块实现同样的结果
#ansible webservers -m command -a '/bin/echo hello ansible!' -i inventory.cfg