Ansible 入门笔记

Ansible 学习笔记
Ansible 基于Python开发的自动化运维工具,SSH远程通讯,No Agent,简单强大。

Ansible 入门笔记

实验环境配置(必做)

  1. Windows系统 FinalShell.
  2. Linux服务器 master
  3. Linux服务器 node01,node02,node03
  4. python3版本,CentOS系统默认使用python2

Ansible安装和部署

①PIP方式

1、安装python-pip及python-devel程序包。

yum install python-pip python-devel -y

2、安装gcc、glibc开发环境

yum install gcc glibc-devel zlib-devel  rpm-build openssl-devel  -y

3、升级本地pip至最新版本

python -m pip install --upgrade pip

4、安装Ansible服务

pip install ansible -upgrade

5、查看Ansible版本

ansible --version

②YUM方式

1、yum源安装

yum install ansible

2、查看ansible版本

ansible --version

3、查看ansible命令

ansible --help

③Apt-get方式

1、添加Ansible源

apt-add-repository -y ppa:ansible/ansible

2、升级库文件

apt-get update

3、安装Ansible服务

apt-get install -y ansible

④源码安装方式

1、安装git客户端

yum install git -y

2、使用git将拉取指定的Ansible版本至本地当前目录

git clone git://github.com/ansible/ansible.git -recursive

3、切换至程序包目录

cd ./ansible

4、执行env-setup脚本,安装Ansible软件包

source ./hacking/env-setup

Ansible配置文件

/etc/ansible/ansible.cfg			# 主配置文件,配置ansible工作特性
/etc/ansible/hosts					# 主机清单(inventory)
/etc/ansible/roles					# 存放角色目录

①添加主机到主机清单

1、进入hosts主机清单文件

vi  /etc/ansible/hosts

2、添加主机node01


# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10

# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110

# If you have multiple hosts following a pattern you can specify
# them like this:

## www[001:006].example.com

# Ex 3: A collection of database servers in the 'dbservers' group

## [dbservers]
##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57

# Here's another example of host ranges, this time there are no
# leading 0s:

## db-[99:101]-node.example.com

[webservers] 
192.14.69.50

3、使用ping命令测试主机node01

ansible 192.14.69.50 -m ping -k 
password: 123456(node01主机root用户的密码)

# 运行结果
[root@master ~]# ansible 192.14.69.50 -m ping -k
SSH password: 
192.14.69.50 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

②配置免密登录

第一种方法:配置密码

1、进入ansible.cfg配置文件

vi /etc/ansible/ansible.cfg

2、取消服务器的host_key检查

# config file for ansible -- https://ansible.com/
# ===============================================

# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first

[defaults]

# some basic default values...

#inventory      = /etc/ansible/hosts						# 主机清单
#library        = /usr/share/my_modules/					# 库文件存放目录
#module_utils   = /usr/share/my_module_utils/				# 
#remote_tmp     = ~/.ansible/tmp							# 临时py命令文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp							# 本地的临时命令执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml		# 
#forks          = 5											# 默认的并发数
#poll_interval  = 15										#
#sudo_user      = root										# 默认sudo用户
#ask_sudo_pass = True										# 每次执行ansible命令是否询问ssh密码
#ask_pass      = True										# 
#transport      = smart										# 
#remote_port    = 22										# 
#module_lang    = C											# 
#module_set_locale = False									# 

# plays will gather facts by default, which contain information about
# the remote system
.
host_key_checking = False									# 检查对应服务器的host_key,建议取消注释
# log_path=/var/log/ansible.log								# 日志文件

3、进入hosts主机清单文件

vi /etc/ansible/hosts

4、为主机添加用户和密码

[webservers] 
192.14.69.50 ansible_ssh_user=root ansible_ssh_pass=123456

5、Ping命令测试

ansible webservers -m ping

第二种方法:配置密钥

1、生成随机密钥

ssh-keygen

2、为主机添加密钥

ssh-copy-id 192.168.30.101

3、Ping命令测试

ansible webservers -m ping

Ansible模块

/usr/bin/ansible					# 主程序,临时命令执行工具
/usr/bin/ansible-doc				# 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy				# 下载/上传优秀代码块或Roles模块的官网平台
/usr/bin/ansible-playbook			# 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull				# 远程执行命令工具
/usr/bin/ansible-vault				# 文件加密工具
/usr/bin/ansible-console			# 基于Console界面与用户交互的执行工具

①Ansible命令模块

1、Command:在远程主机执行命令,默认模块。可忽略-m选项

ansible all -m command -a 'ls /root'
或者
ansible all -a 'ls /root'

ps:此命令不支持 $VARNAME < > | ; & 等符号,含有这些符号的命令可以用shell模块实现

2、Shell:和Command相似,用Shell执行命令

ansible all -m shell -a 'ps -aux | grep nginx'

ps:用bash执行很复杂的命令,即使使用shell也可能会失败。

解决办法:写到脚本中,copy到远程,再执行,再把需要的结果拉回执行命令的机器

3、Script:运行脚本

vi f1.sh
# !/bin/bash
# name: f1.sh

ls /root
ps -aux | grep nginx
ansible all -m script -a f1.sh

②Ansible常用模块

逻辑

1、与

ansible "webservers:&dbservers" -m ping

2、或

ansible "webservers:dbservers" -m ping

3、非

ansible "webservers:!dbservers" -m ping

未完…
待续…


上一篇:Ansible实战系列三 _ task常用命令


下一篇:ansible 安装配置使用(一)