近期使用了ansible,在这简单记录一下ansible的使用
使用ansible-playbook的方式执行,首先编写剧本,定义好剧本中需要的变量
ansible-playbook -i vars test.yml
test.yml剧本中编写详细的操作,例如
- name:first ansible
hosts: all
gather_facts: no
tasks:
- name: mkdir
# become: yes
# become_user: "test"
file:
path: /tmp/test/
state: directory
mode: '755'
- name: download package
get_url:
url: "{{pac_url}}"
dest: /tmp/test/test.tar.gz
- name: bak ozone
command: bash -lc 'mv /tmp/test/ /tmp/test.bak.{{timestamp}}'
- name: unarchive package
unarchive:
src: /tmp/test/test.tar.gz
dest: /tmp/test/
copy: no
mode: 0755
vars中设置需要的变量信息如host,username,timestamp等
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
timestamp="{{lookup('pipe', 'date +%Y%m%d%H%M%SZ')}}"
[all]
11.11.11.11
22.22.22.22
33.33.33.33
对使用到的ansible的模块信息作一下总结:
ansible的file模块
file:
path: /tmp
group: 定义文件的组信息
owner: 定义文件的用户信息
recurse: 是否递归执行
src: 被链接的原文件路径,只适用于state类型是link
dest: 被链接的目的文件路径,只适用于state类型是link
state: directory
mode: 755
state的状态可以表示对该文件的操作:
directory: 如果目录不存在,创建目录
file: 如果文件不存在,不创建
link: 创建软连接
hard: 创建硬连接
touch: 如果文件不存在则创建文件,如果文件存在则修改文件的创建时间
absent: 删除目录、文件或者取消链接文件
ansible的unarchive和archive模块
本模块主要是用来解压和压缩相关的文件
1.本模块能将本地主机的压缩包上传到远程主机上
2.能将远程主机上某个目录的压缩包解压到指定的目录
unarchive:
copy: no|yes no代表从远程解压到指定的目录,yes代表从本地复制到远程主机上
src: 源路径 一般是写到具体的压缩包名
dest: 主机上的解压的路径名
mode:解压后的目录权限
archive:
path: /path/test/111. 要压缩的文件和目录
dest: /path/test/111.tar.gz 压缩后的文件
format: bz2, gz, tar, xz, zip 指定的打包类型
ansible的get_url模块
本模块主要是通过url下载东西,类似于wget
get_url:
dest: 文件的下载到的目的路径
owner: 指定文件的用户
group: 指定文件的组
mode: 指定文件的权限
force: yes | no yes表示下载文件后,如果文件改变则覆盖这个文件,no表示只要该文件存在则不下载
url: 下载的文件的url信息
url_password: 如果下载文件时需要密码
url_username: 下载文件时的用户名信息
user_proxy: no | yes 如果是no则不使用代理,yes表示使用代理
validate_certs: no | yes , no ssl证书不会被验证
ansible的copy模块
本模块主要是将ansible的管理主机上的文件copy到远程主机上
copy:
src: 管理主机上的文件路径
dest: 拷贝到远程主机上的文件路径
force: yes | no, yes表示如果目标路径存在同名文件,并且和本地主机上的内容不同则覆盖,no表示不会覆盖,远程主机的文件保持不变
backup: yes | no ,yes表示如果远程主机上存在该文件,并且内容和要拷贝的内容不同,则将远程主机上的文件备份,no表示不备份
owner: 指定拷贝文件后的用户信息
group:指定拷贝文件后的组信息
mode: 指定拷贝后的文件的权限信息
ansible获取时间戳
定义变量:
timestamp="{{lookup('pipe', 'date +%Y%m%d%H%M%SZ')}}”
使用变量:
"{{timestamp}}"
持续更新中。。。