从0到1的学习Ansible(2)—-Ansible 必备知识+模块介绍

说在前面

在本文中会讲一些注意事项,以及一些常用模块!学会了本节的知识,相信能让你对ansibel有更加深刻的了解,以及为后面ansible实战案例打下坚实的基础~

环境介绍

本例会使用三台机器

主机名			IP			角色
node1		172.25.1.1		控制节点
node2		172.25.1.2		被控节点
node5		172.25.1.5      被控节点

不知道读者是否还记得,我之前说过,Ansible 比较便捷,只需在控制节点安装ansible即可,无需在被控节点安装任何软件。

我已经安装在node1节点安装好ansible了,不会安装的话请点击我查看安装ansible教程

先来讲讲Ansible的一些注意事项

可以这样说吧,在生产环境中,我们一般不会使用root用户去完成日常工作吧,一般来说管理员会给你一个普通用户,你通过这个普通用户去完成你的日常任务,所以我们也会使用一个普通用户去完成ansible相关操作!

管理员会给普通用户一些权限,让其有资格去访问相应的文件目录,去执行某些命令,由于是自己玩,实验演示,为了方便,我就给这个普通用户授予root权限

我先创建root用户的ansible管理目录,用于方便我批量创建用户,设置密码~

[root@node1 ~]# mkdir /root/ansible
[root@node1 ~]# cd /root/ansible/
[root@node1 ansible]# vim ansible.cfg
[root@node1 ansible]# cat ansible.cfg 
[defaults]

inventory      = ./hosts
[root@node1 ansible]# vim hosts
[root@node1 ansible]# cat hosts 
[node2]
172.25.1.2

[node5]
172.25.1.5

[localhost]
172.25.1.1

测试一下连通性,all代表所有主机, -k 代表着输入密码,由于ansible只能输入一次密码,所以要求各节点root用户密码一致, -m 是指定模块,其实使用 ping 模块根本不需要加 -k ,在此处加上 -k 参数只是为了多讲解一个参数而已~
在这里插入图片描述
批量建立ansible用户,一般来说为了不引起不必要的权限麻烦,全平台同一用户 id 一致

[root@node1 ansible]# ansible all -a 'useradd ansible -u 1002' -k
  • -a 可执行shell命令,实话实说,好用得一批

在这里插入图片描述建立用户了再给一个密码,当然密码也是同一的~

  • 我试图用ansible来执行shell命令修改ansible用户的密码,ansible反馈是成功了的,但事实上却失败了~
[root@node1 ansible]# ansible all -a 'echo "ansible123" | passwd --stdin ansible' -k

所以我打算用shell命令去修改普通用户的密码~
在后面的ansible使用案例中我会使用playbook的方式教大家如何使用ansible去批量修改用户密码,在这不做重点讲解

[root@node1 ansible]# echo ansible123 | passwd --stdin ansible
[root@node2 ~]# echo ansible123 | passwd --stdin ansible
[root@node5 ~]# echo ansible123 | passwd --stdin ansible

给普通用户授权

[root@node1 ansible]# ansible all -a "sed '/^root/a ansible ALL=(ALL)       NOPASSWD: ALL' /etc/sudoers -i" -k

由于 ansible 是基于 ssh 通信的,所以最好在各个节点上都加上解析,否则 ssh 会很慢~

[root@node1 ansible]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.1.1	node1
172.25.1.2  node2
172.25.1.5	node5
[root@node1 ansible]# ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts' -k

配置好了普通用户,接下来就可以使用普通用户来进行ansible的相关操作了

# su - ansible
$ mkdir ansible
$ cd ansible/

使用ansible这个目录作为ansible的操作

为了方便后面的操作,在ansible目录下配置ansible工作环境

ansible.cfg 文件是ansible配置文件

$ vim ansible.cfg
[defaults]

inventory      = ./hosts           #定义hosts文件路径
roles_path    = ./roles            #定义roles目录路径

[privilege_escalation]          #授权普通用户使用sudo成为root用户
become=True
become_method=sudo
become_user=root
become_ask_pass=False
  • 说到ansible.cfg配置文件,有几点肯定是得交代清楚的,ansible对配置文件ansible.cfg有一个检测顺序
  • 1.首先检测 ANSIBLE_CONFIG 变量定义的配置文件(默认无)
  • 2 其次检查当前目彔下的 ./ansible.cfg 文件
  • 3.再次检查当前用户家目彔下 ~/ansible.cfg 文件
  • 4.最后检查 /etc/ansible/ansible.cfg 文件(ansible默认配置文件,不建议修改,对所有用户都生效,最好每个用户都有自己的ansible操作环境)

hosts文件用于存放ansible执行对象主机

$ vim hosts
[node2]					#node2组
172.25.1.2

[node5]]					#node5组
172.25.1.5

[localhost]
172.25.1.1

[client:children]      #定义子组,client组包含node2,node5组
node2
node5

roles 目录用于存放角色

$ mkdir roles

我刚才也说了,ansible是基于ssh来通信的,我想你也是不希望每次都要加-k输入密码操作吧,所以我也顺便给各个节点做一个免密

$ ssh-keygen                    #一直回车即可
$ for i in 1 2 5 ;do ssh-copy-id 172.25.1.$i ;done

测试:
在这里插入图片描述
可以看到执行完ansible命令后,会有好多种颜色:
比如讨厌的红色,这是报错~
优雅的黄色,这是执行成功并作出了改变~
平淡无奇的绿色,这是执行成功但没做出任何改变~

这几句话可能有点抽象,你在后面的ansible案例学习中,会深深的体会到~

到此 ansible 要注意的点已经稀稀疏疏的讲完了,接下来就是ansible的模块讲解啦~

ansible常用模块讲解

在这只能讲一些最常用的ansible模块,这一部分我会持续更新的~我在使用ansible的过程中遇到的比较不错的模块会陆续写进来~

在这个模块,我觉得掌握方法才是最重要的,一个一个去死记硬背,还真不行~

在这里插入图片描述

有3387个模块呢~所以请放弃背模块,记住常用的即可,这样你就能提高编写playbook速度~

现在来教如何通过查阅文档的方式,方便使用ansible~

$ ansible-doc 模块名

# 示例:
$ ansible-doc yum

我通过文档来讲解一下 yum 模块的使用,我相信,学会了查阅文档,这些模块对于你们是完全没问题的,甚至不需要看我写的~

yum 模块
- name: install the latest version of Apache
  yum:
    name: httpd		# 要安装的软件
    state: latest    # 从 yum 源中安装最新的 httpd 软件

安装多个软件

- name: install more software
  yum:
    name: "{{ item }}"		# 使用 item 可以安装多个软件
    state: present          # 安装
  with_items:          		
    - httpd					#软件1
    - net-tools				#软件2

从网络安装

- name: install the nginx rpm 
  yum:
    name: http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-
    state: present

删除软件

- name: remove the Apache package
  yum:
    name: httpd
    state: absent			# absent 删除

更新所有软件

- name: upgrade all packages
  yum:
    name: '*'
    state: latest			
repolist 模块

添加 yum 源

  • 如果不加 file 键,则自动设定yum源的文件名为yum仓库的名字
- name: Add multiple repositories
  yum_repository:
    name: rhel7.3     				    # yum仓库名字
    description: rhel7.3 YUM repo       # 仓库描述
    baseurl: http://172.25.1.1/rhel7.3      # yum 源地址
    gpgcheck: no    					# 是否采用gpgcheck
    file: rhel7							# yum源文件名,自带后缀repo
copy模块

copy 模块使用的 src (源文件)的 basedir 是 yml 文件的同级目录的 files 目录(使用相对路径时)

- name: Copy file 
  copy:
    src: /srv/myfiles/foo.conf	# 从哪来? 绝对路径不受影响,相对路径看我上面说的
    dest: /etc/foo.conf			# 要放在哪?

当然还可以给文件权限,设定拥有者、所属组

- name: Copy file with owner and permissions
  copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: '0644'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值