ansible的配置文件和模块使用

Posted 向阳-Y.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible的配置文件和模块使用相关的知识,希望对你有一定的参考价值。

上一篇文章:ansible的简述和安装

ansible

在inventory文件中指定受管主机ip或主机名:写法格式如图

主机名可以写成例如node[1:30]这种格式,用来批量定义主机名

可以定义成两个不同的组别如图

当使用ansible web -m ping 时 中web属性可以指定只ping web组下的主机

组也可以进行嵌套,例如dbserver是一个嵌套组,嵌套了web组合mysql组:
嵌套组的写法就是在组后面加:children

组中[web:vars]表示下面的内容为web组中的变量

ansible ungrouped - m ping  #这条命令表示ping没有任何组的主机
ansible web --list-hosts  #表示查看web组里的主机

ansible的命令运行方式

ansible有两种命令运行方式,一是ad-hoc,另一种是playbooks

ad-hoc

ad-hoc表示即时的意思
如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 ad­hoc 命令。
ansible-doc -l可以查看所有文档

ansible-doc ping #可以用来查看ansible关于ping命令的帮助文档

语法格式:ansible 受管主机 -m 模块名称 -a “模块参数”

ansible 命令其他选项
­u 指定remote_user
­b 提权
­­become­user=USER 提权的用户
­­become­method=sudo 提权的方法(可以是su,sudo)

常用模块:
1.command 模块
command 模块是ansible 的默认模块,command 模块可以在受管主机上执行Linux命令,但是command模块不能使用重定向、管道和变量(“”里)
例如:

ansible all -m command -a "cat /etc/os-release"

2.shell 模块
shell模块作用就是在受管主机上执行shell命令,其用法和command模块一样,但是shell模块支持管道符、重定向等操作。(不支持受管主机上的别名命令, 别名命令在文章底部补充)
3.file 模块
file模块是一个常用的模块,用于管理目录或文件的属性,也可以创建文件和目录,file模块支持很多的参数,主要有:

path: 执行需要操作的文件或目录,也可以使用dest来代替path
group: 设置文件或目录的属组
owner: 设置文件或目录的属主
mode: 设置文件或目录的权限,可以使用0644这种格式,也可以使用’u=rwx,g=r,o=r’
或’u+wx,g+x’
recurse: 是否递归修改文件的属性,默认为"no"
src: 创建链接文件时,指明源文件的路径
setype: 设置selinux的类型
state: 设定文件回目录的状态,其值有:
directory: 如果path中的目录不存在则递归创建
touch: 创建文件
link: 设置软连接
absent: 将目录或文件递归删除

举例:

ansible all -m file -a "path=/home/test/111 group=test owner=test mode=7777 state=directory" #创建一个目录111,属于test组,所有者为test,权限为7777,directory表示创的为目录

4.user 模块

user模块可以用来添加、删除、修改用户,设置用户密码
user模块的主要参数:
name: 要操作的用户名
state: 设置用户的状态,删除或创建用户,其值有"present" 和"absent",present表
示创建,默认值,absent表示删除
group: 设置用户的基本组
groups: 设置用户的附加组
uid: 设置用户的uid
home: 设置用户的家目录
shell: 设置用户的默认shell
password: 设置用户的密码,此处的密码必须是一个密文。在playbook中可以使用
password: "{{ your_passwd | password_hash(‘sha512’) }}"这种方式设置密
码,设置用户的密码,这里接受的是一个加密的值,因为会直接存到 shadow, 默认不设
置密码。

ansible student -m user -a "name=school state=present" group=test groups=root uid=2020 shell=/sbin/nologin"

5.group 模块

group模块用来创建或删除组
group模块常用的参数:
name: 组的名称
gid: 设置组的GID
state: 设置组的状态,默认是present, absent表示删除

ansible redhat -m group -a "name=anhdifu gid=6666 state=present"

6.script模块

  • List item

script模块用于在受管主机上执行脚本。 ansible 会将本地脚本传到受管主机上,然后在受
管主机上执行脚本,在执行脚本时,使用的是受管主机的shell环境。
script模块主要参数:
chdir: 在受管主机上先切换到此目录下,再执行脚本
creates: 当这个文件存在时,不执行脚本
removes: 当这个文件存在时,执行脚本

以下命令为,如果1.txt存在则执行脚本password.ssh

ansible mysql -m script -a "removes=/home/test/1.txt password.ssh "

7.yum_repository模块

yum_repository模块可以实现为远程主机配置一个完整的YUM源
主要参数:
file: 配置文件的名字。不需要".repo"
name: 仓库id
description: 仓库描述
baseurl: 仓库地址
gpgcheck: 是否校验密钥
enabled: 是否激活仓库,默认是yes
state: repo文件的状态,默认是present

ansible all -m yum_repository -a "file=ahdifu name=rhel8 description=RHEL8 baseurl=file:///mnt/BaseOS gpgcheck=no enabled=yes"
  1. yum模块

yum模块用于安装、删除、更新软件包
主要的参数有:
name: 软件包的名字,可以使用"*"进行通配
list: 列出软件包
state: 状态 ,可以写的值有:
present和installed 都表示安装包,present是默认值
latest 表示安装最新版本的包
absent/removed 表示删除包

ansible all -m yum -a "name=tree state=installed"  #表示安装tree

9.service 模块
service模块用于服务管理和控制
主要参数:
name: 服务名称
enabled: 设置服务是否开机自启,默认是no
state: 设置服务的状态。状态有:
started(启动)
stopped(停止)
restarted(重启)
reloaded(重新加载配置)
重启sshd服务

ansible all -m service -a "name=firewalld state=started"
  1. copy模块
    copy模块用于将文件拷贝到远程主机上
    copy模块的主要参数:
    src: 指定拷贝的源文件的路径,如果拷贝的目录后面有"/",则只把目录中的内容 拷贝至
    远端,目录后面没有"/",则把目录自身拷贝至远端。
    dest: 指定拷贝的目标路径
    content: 将给定的字符串内容保存至远程主机上,content会替代src参数
    backup: 是否对目标文件进行备份,默认是no
    owner: 设置目标文件的属主
    group: 设置目标文件的属组
    mode: 设置目标文件的权限

以下命令没有复制,只生成文件:

ansible all -m copy -a "dest=/home/test/222 owner=root group=root mode=777 content='developent'"

复制本地index.html到all用户,/home/test/222.html文件中

ansible all -m copy -a "src=/home/student/index.html dest=/home/test/222.html owner=root group=root mode=777"

补充,vim .bashrc中可以配置别名命令,配置完成后使用source .bashrc刷新

Playbook

set nu可以显示航标数
set cc=NUMBER可以打开辅助线

可以通过ansible-doc file进行查找file模块

多看多练,不懂的查ansible-doc,注意图中格式

–syntax-check可以检查语法中的错误

ansible-playbook --syntax-check 111.yml

-C可以模拟执行(并不会真正的改变)

ansible-playbook -C 111.myl

下面写一个比较全的实例,不懂的格式可使用ansible-doc 模块名进行查阅

---
- name: create file
  host: all
  tasks:
  			- name: create file
  			  file: 
  			  		path: /home/test/555
  			  		state: absent
- name: install http
  hosts: all
  tasks:
  			- name: install http
  			  yum:
  			  		name: httpd
  			  		state: present
  			- service:                           #name作为标注,可写可不写
  					name: httpd
  					state: started
  			- file:
  			   		path: /var/www/html/index.html
  			   		state: touch
  			   		setype: httpd_sys_content_t  #这里为设置selinux安全标签
  			- name: copy
  			  copy:
  			  		dest: /var/www/html/index.html
  			  		content:"hello,this is a web site!"
  			- name: start firwalld
  			  service:
  			  		name: firewalld
  			  		state: started
  			  		enabled: yes
  			- name: firewalld
  			  firewalld:
  			  		service: http
  			  		permanent: yes
  			  		state: enabled
  			  		immediate:yes  			   		
  					

以上是关于ansible的配置文件和模块使用的主要内容,如果未能解决你的问题,请参考以下文章

Ansible配置文件命令及模块

Ansible相关文件和常用模块

ansible plugins简介

Ansible 学习 && 使用笔记

Ansible之模块参数

Ansible配置