上一篇文章: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
表示即时的意思
如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 adhoc 命令。
ansible-doc -l可以查看所有文档
ansible-doc ping #可以用来查看ansible关于ping命令的帮助文档
语法格式:ansible 受管主机 -m 模块名称 -a “模块参数”
ansible 命令其他选项
u 指定remote_user
b 提权
becomeuser=USER 提权的用户
becomemethod=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"
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"
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