ansible 对文件的操作
ansible lineinfile
简介
lineinfile
该模块是操作文件中的每一行内容,它是按照行为单位的,和下面的replace
模块并不冲突。
修改匹配行,如果不存在则添加
以nginx配置文件为例修改端口号
tasks:
- name: Modify the configuration
lineinfile:
path: /usr/local/nginx/conf/conf.d/test.conf
regexp: '^(.*)listen ' # 匹配listen的行
line: "\tlisten 88;" # 修改内容
- name: restart nginx
service:
name: nginx.service
state: restarted
把listen
这个海投的行直接替换成listen 80;
不管后面是什么直接替换整行内容。
删除文件中%wheel
开头的行
tasks:
- name: 删除文件中wheel开头的行
lineinfile:
path: /opt/sudoers
state: absent # 删除指令
regexp: '^%wheel' # 删除匹配的行
在匹配行#listen 888;
前添加一行内容\tlisten 8888;
tasks:
- name: Modify the configuration
lineinfile:
path: /usr/local/nginx/conf/conf.d/test.conf
insertbefore: '^(.*)#listen 888;' # 要在哪一行前面添加内容
line: "\tlisten 8888;" # 添加的内容
在匹配行server_name
后添加一行内容server_name blog.sirliu.com;
tasks:
- name: Modify the configuration
lineinfile:
path: /usr/local/nginx/conf/conf.d/test.conf
insertafter: '^(.*)server_name'
line: "\tserver_name blog.sirliu.com;"
修改文件内容及权限
tasks:
- name: Modify the configuration
lineinfile:
#path: /usr/local/nginx/conf/conf.d/test.conf
path: /sitecode/web_test/index.html
regex: 'update 2021-11-2' # 要修改的内容
line: 'update 2022-01-20' # 修改后的内容
owner: root # 文件所属用户
group: root # 文件所属用户组
mode: 0755 # 文件权限
文件存在则添加一行内容
tasks:
- name: Edit config
lineinfile:
path: /opt/hosts.conf # 文件不存在是不会自动创建的
line: '10.211.55.100 blog.sirliu.com'
ansible replace
简介
replace
模块可以根据我们指定的正则表达式替换匹配到的字符串,文件中所有被匹配到的字符串都会被替换,和lineinfile
不同的地方是replace会替换掉所有匹配的实例,是全局的,而
lineinfile`只会替换最后或最开始一个匹配到的实例,是局部的。
常用参数
- path:文件的绝对路径
- regexp:正则表达式,必要的参数
- replace:替换后的内容
替换文件内容
tasks:
- name: Edit config
replace:
path: /opt/hello.txt
regexp: 'www'
replace: 'blog'
--------------------------示例二
tasks:
- name: Modify the configuration
replace:
path: /usr/local/nginx/conf/conf.d/test.conf
regexp: '(^.*server_name\s)(.*)$'
replace: '\1blog.sirliu.com'
backup: yes
validate
修改文件之前进行校验
如果验证的文件内容有错误,比如 把playbook中的replace:'\1blog.sirliu.com'
改为replace: 'blog.sirliu.com'
,在经过replace后,test.conf配置文件中的servername字符串会被删掉,此时validate
命令会返回结果为0,playbook执行失并抛出错误。
---
- hosts: nginx
remote_user: root
tasks:
- name: Modify the configuration
replace:
path: /usr/local/nginx/conf/conf.d/test.conf
regexp: '(^.*server_name\s)(.*)$'
replace: '\1blog.sirliu.com'
backup: yes
validate: nginx %s -t
修改配置文件并重启服务
---
- hosts: nginx
remote_user: root
handlers:
- name: restart nginx
become: yes
become_user: root
service: name=nginx state=restarted
tasks:
- name: Modify the configuration
replace:
path: /usr/local/nginx/conf/conf.d/test.conf
regexp: '(^.*server_name\s)(.*)$'
replace: '\1_'
backup: yes
validate: nginx %s -t # 检查文件是否正确修改
notify: restart nginx
如上playbook中使用了Handlers,当
replace
任务完成时,会重启nginx
。可以把Handlers理解为一个函数,然后notify是一个函数次调用(但实际上notify
是通知,当任务正确结束时会通知到handlers
执行指令)
修改文件index.html
将文件中所有www
改为blog
tasks:
- name: Modify the configuration
replace:
path: /sitecode/web_test/index.html
after: 'update' # 替换update后面的所有内容
regexp: '^www(.*)'
replace: 'blog\1'
注释配置文件
tasks:
- name: Modify the configuration
replace:
path: /sitecode/web_test/index.html
before: '\n'
regexp: '^(.+)$'
replace: '#\1'
在文件内容的两端加上内容
---
- hosts: nginx
remote_user: root
tasks:
- name: Modify the configuration
replace:
path: /sitecode/web_test/index.html
after: 'update ' # 以update开头
before: 'hello' # hello结尾中所有匹配到的行
regexp: '^blog(.*)'
replace: '<h1>\1<\h1>'
最新评论
# 这只是一个创建远程登录并授权的语句、仅作为记录 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Fit2cloud!' WITH GRANT OPTION;
当MGR集群初始化结束后,需要开启MGR集群自启动(需要有一台节点是自动开启引导) loose-group_replication_start_on_boot = ON #设置节点是否在启动时自动启动 MGR 集群 loose-group_replication_bootstrap_group = ON #设置节点是否作为初始引导节点启动集群
密码:blog.sirliu.com
本内容密码:blog.sirliu.com 最新整理的文章在这里喔:https://blog.sirliu.com/2018/11/shell_lian_xi_ti.html