初识ansible
1、Ansible的简介
Ansible是一种市面上主流的自动化运维工具,它基于python开发,基于模块化工作。Ansible集成了IT系统配置管理、应用部署、执行特定任务的开源平台,它由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身并没有批量部署的能力。真正具有批量部署能力的是Ansible所运行的模块,Ansible只是提供一种框架,由于它是基于ssh来和远程主机通讯的,故它不需要在远程主机上安装client/agents。
2、Ansible的架构
说明:ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

playbook----电影
play----电影中的一个场景
playbook中有许多play
play中具体执行tasks
tasks有很多任务,每一个任务由一个模块来实现,例如copy
inventory主机列表
plugins 插件,对ansible功能补充,例如jinja2插件
3、Ansible 思想
简单的,就是更好的。ansible设计:简单使用和自动化部署。
ansible自动化语言是围绕简单的、声明性的、基于文本的文件构建的,这些文件对于人类来说是很容易阅读的,可操作的剧本可以清楚地记录工作流程。
ansible是一种预期状态的引擎。他按照您期望系统所处的状态来描述IT部署,从而解决如何自动化IT部署的问题。ansible的目标是把你的系统放在预期状态,只做必要的改变。试图想脚本语言一样对待ansible是不正确的。
4、Ansible工作流程

5、Ansible的安装
redhat系列:
在线安装:yum install -y ansible
离线安装:yum install -y ansible --downloaddir=/root/ansible --downloadonly
cd /root/ansible
rpm -ivh *
ubuntu系列:
在线安装:sudo apt-get install -y ansible
6、Ansible的配置文件
ansible --version
ansible 2.4.2.0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
egrep -v "^#|^$" /etc/ansible/ansible.cfg
[defaults] roles_path = /etc/ansible/roles:/usr/share/ansible/roles [inventory] [privilege_escalation] [paramiko_connection] [ssh_connection] [persistent_connection] [accelerate] [selinux] [colors] [diff]
列出ansible.cfg中常用的选项
[defaults] inventory = /etc/ansible/hosts #指定主机列表位置 remote_tmp = ~/.ansible/tmp #远程主机的临时目录 local_tmp = ~/.ansible/tmp #管理主机的临时目录 forks = 5 #并发数为5 sudo_user = root #sudo提权为root ask_sudo_pass = True #执行sudo过程中要求密码 remote_port = 22 #远程主机端口为22 host_key_checking = False #ssh连接时,不询问yes/no [privilege_escalation] become=True #允许提权 become_method=sudo #提权方式为sudo become_user=root #提权为用户root become_ask_pass=False #提权时,不输入密码
7、Inventory定义主机清单,也可以是主机组
inventory分为静态inventory和动态inventory
egrep -v "^$|^#" /etc/ansible/hosts
定义静态inventory:(使用ini格式的文件)
清单:
node1
node2
node3
192.168.101.11
192.168.101.12
192.168.101.13
分组:
[groupname]
grouplist
[web]
web1.example.com
web2.example.com
[db]
db1.example.com
db2.example.com
默认存在的组:
all 代表所有主机
ungroup 代表未分组的主机
同一个主机可以同时在多个组
定义嵌套组:
[groupname:children]
groupname1
groupname2
简化的表达方式:
格式:[start:end]
192.168.101.[11..20] #表示11到20十个主机
8、建立主机通讯
[node]
192.168.108.9
[node:vars]
ansible_ssh_user=root
ansible_ssh_pass=redhat
9、测试
ansible -i hosts all -m ping
192.168.108.21 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10、ansible的返回结果有三种颜色
红:执行失败
绿:当前状态就是预期状态
黄:成功更改当前状态为预期状态
11、剧本playbook
playbook实现秘钥认证
connection:local 表示在ansible服务端本地执行任务
--- - name: configure ssh connection hosts: all gather_facts: false connection: local tasks: - name: configure ssh connection shell: > ssh-keyscan {{ inventory_hostname }} >>~/.ssh/known_hosts sshpass -p'redhat' ssh-copy-id root@{{ inventory_hostname }}
playbook实现修改主机名
cat hosts [oss-1] 135.175.17.11 hostname=NXYC-2F-0704-SEV-SGI620-02U08 135.175.17.12 hostname=NXYC-2F-0704-SEV-SGI620-02U11 135.175.17.13 hostname=NXYC-2F-0704-SEV-SGI620-02U14 135.175.17.14 hostname=NXYC-2F-0704-SEV-SGI620-02U17 135.175.17.15 hostname=NXYC-2F-0704-SEV-SGI620-02U20 135.175.17.16 hostname=NXYC-2F-0704-SEV-SGI620-02U23 [all:vars] ansible_ssh_user=root ansible_ssh_pass=ctyun@123 cat set_hostname.yml --- - hosts: oss-1 tasks: - name: change name raw: "echo {{ hostname | quote }} > /etc/hostname" - name: shell: hostname {{ hostname | quote }}
几个常见的模块
------------恢复内容结束------------

浙公网安备 33010602011771号