配置Ansible环境
note:在这之后博主的实验环境都是使用源码包安装的Ansible环境。
1.配置文件优先级
在运行ansible命令时,命令将会按照预先设定的顺序查找配置文件。
(1)ANSIBLE_CONFIG:首先,ansible命令会检查环境变量,及这个环境变量将指向的配置文件。可以通过导入环境变量的方式来做修改,例如:export ANSIBLE_CONFIG=/directory_path
(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目录下。
2.使用环境变量方式来配置
大多数的ansible参数可以通过设置带有ANSIBLE_开头的环境变量进行配置,参数名称必须都是大写字母,如下配置项:
export ANSIBLE_SUDO_USER=root
设置环境变量之后playbook可以直接引用。
3.设置ansible.cfg配置参数
常见配置参数:
ansible_ssh_host 定义host ssh地址 ansible_ssh_host=192.168.1.117
ansible_ssh_port 定义hosts ssh端口 ansible_ssh_port=5000
ansible_ssh_user 定义hosts ssh认证用户 ansible_ssh_user=yadmin
ansible_ssh_pass 定义hosts ssh认证密码 ansible_ssh_pass='123456'
ansible_sudo 定义hosts sudo用 户 ansible_sudo=yadmin
ansible_sudo_pass 定义hosts sudo密码 ansible_sudo_pass='123456'
ansible_sudo_exe 定义hosts sudo路径 ansible_sudo_exe=/usr/bin/sudo
ansible_connection 定义hosts连接方式 ansible_connection=local
ansible_ssh_private_key_file 定义hosts私钥 ansible_ssh_private_key_file=/root/key
ansible_shell_type 定义hosts shell类型 ansible_shell_type=zsh
ansible_python_interpreter 定义hosts任务执行python路径 ansible_python_interpreter=/usr/bin/pyhon2.6
ansible_*_interpreter 定义hosts其他语言解析器路径 ansible_ruby_interpreter=/usr/bin/ruby
配置Linux主机SSH无密码访问
如果ansible服务端与其下的主机没有配置互信,那么在做ansible的执行访问的时候那就需要你在hosts文件或者inventory文件或者在指令中添加需要访问主机的密码了。这里为了之后的实验我们还是先做SSH互信访问。
4.1生成秘钥
#ssh-keygen -t rsa
4.2将秘钥拷贝到预管理的节点上
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.116.130
尝试ssh root@192.168.116.130发现还是不行。查看被管理节点上的日志。
错误的属组关系,因为这台机器上部署了devstack,root目录有附加权限:
属组有额外的写权限,去掉就好:
#chmod g-w /root
附注:以root用户为例,在配置root用户互信的时候/root/.ssh/目录除了目录属主(root)可以具有write权限以外,属组和其他用户都不能对root目录和.ssh目录具有write权限。authorized_keys文件的权限应该为600。
5.ansible的简单实例
博主的整个实验环境都是在github上下载的源码部署的ansible环境,所以有些操作是pip或者Mac上不一样的,请酌情根据自己机器环境实验。
启用ansible,如果使用github安装的源码包则需要使用env-setup启动
source ./hacking/env-setup -q #这里目录是以ansible源码包为相对目录下
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操作:
#ansible 192.168.116.130 -m ping
对组器进行ping操作:
-m是加载模块参数。这里我们加载的是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