Anisble中的任务执行控制_ansible在debug的时候怎么控制changed为 false

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

#1.简单循环#
loop:		##赋值列表
  - value1
  - value2
  - ...

{{item}}	##迭代变量名称

#实例#
---
- name: create file
  hosts: 172.25.0.254
  tasks:
    - name: file module
      file:
        name: /mnt/{{item}}
        state: present

      loop:
        - westos_file1
        - westos_file2

#2.循环散列或字典列表#
---
- name: create file
  hosts: 172.25.0.254
  tasks:
    - name: file module
      service:
        name: "{{ item.name}}"
        state: "{{ item.state }}"
      loop:
        - name: httpd
          state: started
        - name: vsftpd
          state: stopped

脚本练习:

在系统中完成以下用户操作

1.建立用户组shengchan,caiwu,jishu并满足以下要
* shengchan组id为8000
* caiwu组id为8001
* jishu组id为8002

2.建立westosuser,linux,lee,westosadmin等用户完成以下要求
* westosuser用户的附加组为shengchan和jishu
* lee的主组为caiwu附加组为技术,lee的uid和gid必须一致
* linux为系统账号不能直接被操作者使用
* westosamdin用户不属于以上三个部门,但是可以在系统中自由的管理用户

* 以上用户密码均为westos,并要求用户首次登陆时强制修改密码
* 设定以上用户密码必须在30天内进行休改,并在过期前2天发出警告求

---
- name: create file
  hosts: list1
  tasks:
    - name: create group
      group:
        name: "{{item.name}}"
        gid: "{{item.gid}}"
        state: present
      loop:
        - name: shengchan
          gid: 8000
        - name: caiwu
          gid: 8001
        - name: jishu
          gid: 8002
        - name: westosuser
          gid: 8003
        - name: linux
          gid: 8004
        - name: westosadmin
          gid: 8005
    - name: create user
      user:
        name: "{{item.name}}"
        groups: "{{item.groups}}"
        group: "{{item.group}}"
        shell: "{{item.shell}}"
        uid: "{{item.uid}}"
        password: '$6$4RBSjfuYIt694mEi$KetzruRtGRzZIPA4B/hDCimIWCalsOkzCH2GEoHvRTZpDXWL1xf.0.SYDg.SQ6KwtMUDKsNIcH0MAd3AHBRET0'
      loop:
        - name: westosuser
          groups: shengchan, jishu
          group: 8003
          shell: /bin/bash
          uid: 8003
        - name: lee
          groups: jishu
          group: caiwu
                    shell: /bin/bash
          uid: 8001
        - name: linux
          groups: linux
          group: linux
          shell: /sbin/nologin
          uid: 8004
        - name: westosadmin
          groups: westosadmin
          group: westosadmin
          shell: /bin/bash
          uid: 8005
    - name: westosadmin
      lineinfile:
        path: /etc/sudoers
        regexp: "^root"
        insertafter: "^root"
        line: "westosadmin {{ansible_facts['fqdn']}}=(root) NOPASSWD: /sbin/useradd, /sbin/userdel, /sbin/usermod"
    - name: configure password messages
      shell: chage -d 0 -M 30 -W 2 "{{item}}"
      loop:
        - westosuser
        - lee
        - westosadmin
...


二、条件
when:
  - 条件1
  - 条件2

#条件判断#
=			value == "字符串",value == 数字
<			value <  数字
>			value >  数字
<=			value <= 数字
>=			value >= 数字 
!=			value != 数字
is defined value	value is defined	变量存在
is not defined		value is not defined	变量不存在
bool变量 为true		value			value的值为true
bool变量 false		not value		value的值为false
			value in value2		value的值在value2列表中
#多条条件组合#
when:
  条件1 and 条件2
  - 条件1
  - 条件2

when:
  条件1 or 条件2

when: >
  条件1
  or
  条件2

测试题:

*建立大小为1500M名为exam_lvm的 lvm在westos组中

*如果westos不存在请输入:

vg westos is not exist

*如果westos大小不足1500M清输出:

vg westos is less then 1500M

并建立800M大小的lvm

三、触发器

notify:		触发器当遇到更改是触发handlers

handlers:	触发器触发后执行的动作

#实例#
---
- name: create virtualhost for web server
  hosts: 172.25.0.254
  vars_files:
    ./vhost_list.yml
  tasks:
    - name: create document
      file:
        path: "{{web2.document}}"
        state: directory
    - name: create vhost.conf
      copy:
        dest: /etc/httpd/conf.d/vhost.conf
        content:
          "<VirtualHost *:{{web1.port}}>\n\tServerName {{web1.name}}\n\tDocumentRoot {{web1.document}}\n\tCustomLog logs/{{web1.name}}.log combined\n</VirtualHost>\n\n<VirtualHost *:{{web2.port}}>\n\tServerName {{web2.name}}\n\tDocumentRoot {{web2.document}}\n\tCustomLog logs/{{web2.name}}.log combined\n</VirtualHost>"
      notify:
        restart apache

  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

脚本练习:

搭建一个vsftpd服务

---
- name: creat vsftpd
  hosts: all
  tasks:
    - name: install vsftpd
      dnf:
        name: vsftpd
        state: present
    - name: config vsftpd.conf
      template:
        src: ~/ansible/vsftpd.conf.j2
        dest: /etc/vsftpd/vsftpd.conf
      notify: restart vsftpd

    - name: config ftpdir
      file:
        path: /var/ftp/pub
        group: ftp
        mode: '0775'
        setype: "public_content_rw_t"
    - name: set sebool
      seboolean:
        name: ftpd_anon_write
        state: yes
        persistent: yes
    - firewalld:
        zone: public
        service: ftp
        permanent: yes
        state: enabled
        immediate: yes

  handlers:
    - name: restart vsftpd
      service:
        name: vsftpd
        state: restarted
...

四、处理失败任务

1.ignore_errors#
#作用:
当play遇到任务失败是会终止
ignore_errors: yes    将会忽略任务失败使下面的任务继续运行

#实例#

---
- name: test
  hosts: all
  tasks:
    - name: test
      dnf:
        name: sun
        state: present
      ignore_errors: yes
    - name: create file
      file:
        path: /mnt/sun
        state: touch

...

测试效果:

2.force_handlers#
#作用:
#当任务失败后play被终止也会调用触发器进程

#示例#

---
- name: apache change port
  hosts: all
  force_handlers: yes
  vars:
    http_port: 8080
  tasks:
    - name: configure apache conf file
      lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: "^Listen"
        line: "Listen {{ http_port }}"
      notify: restart apache

    - name: install error
      dnf:
        name: westos
        state: latest

  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted
        enabled: yes
...

验证:

3.changed_when#
#作用:
#控制任务在何时报告它已进行更改

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

6a92edea27b825e59aa1f2c54.png)

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值