学习是一个逐步发现自己无知的过程!

ansible 对文件的操作 ansible 操作文件

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>'
赞(0)
未经允许不得转载:劉大帥 » ansible 对文件的操作

你的评论可能会一针见血! 抢沙发

登录

找回密码

注册