Windows剧本汇总.note

noteId: WEBbba5ec1d1730cac998ed0acf6dc67016 · 原始路径:/ALL/Ansible 自动化管理/Ansible 配置合集/A、B、C 剧本汇总/Windows剧本汇总.note · 图片:21 · 附件待处理:6

 
 
一、IIS:
# 可以使用的模块:
win_iis_website    //只能创建http站点
microsoft.iis.website    //可以同时创建80和443站点
win_file    //state: directory 幂等创建目录;state: touch 幂等创建文件
win_lineinfile    //幂等将内容写入文件
 
1、同时创建80 和443站点:
 
这里写入 index.html,可以用模块:win_copy: content
这里的 certificate_hash 就是证书指纹
能同时配置http和https是因为这里bindings定义了两个端口(ansible-doc 中有模板)
 
 
2、创建Web(复杂需求):
# 还没全部完成,大体的框架是做出来了
add.yml:
 
3、状态页面:
status.html.j2:
 
剧本:
 
 
 
4、如果只需要创建 80站点:
使用 win_iis_website会简单一点
 
 
 
 
二、创建用户、OU、组:
# 可以使用的模块:
microsoft.ad.user    //幂等创建 AD域用户
microsoft.ad.group    //幂等创建 AD域组
win_user    //幂等创建 本地用户
win_group    //幂等创建 本地组
 
1、创建 OU、组、用户:
# 这里脚本有一些比较复杂的点:
1、因为这里要用两个 loop,每个loop的变量都是item,因此会冲突覆盖,因此要用 loop_control,将外层的loop的变量设置为 u
2、因为要用两个loop,但是一个 tasks中不能用两个loop,因此要用 include_tasks调用另一个yml剧本
3、因为json文件中给定的是一个范围,因此要用range 读取json中的变量
4、range 输出的范围,例如 1 ~ 25,只会给出 1 ~ 24,因此末尾需要 + 1
5、因为变量是字符串,不能直接加减运算,因此要 | int 转为 数字格式
6、因为要求用户是 sales01 - 25,因此要配置 '%02d' | format(数字) 进行补0
7、这里要定义 homedirectory和homedrive,要使用 attributes 来定义。
user.yml:
 
 
2、创建域用户:
必须要加 update_password:on_create 才是幂等创建,否则每次都会更新密码
 
3、2024 题目:
 
 
或:
 
·优化剧本:
 
题目要求要同时对子域和当前域创建,并且这里有的OU路径还是 dc=lyon
 
---
- name: paris site share folder
  hosts: DMZ-1
  gather_facts: false
  tasks:
    - name: Create a group in a custom path
      microsoft.ad.ou:
        name: "{{ item.ou.split(',')[0].split('=')[1] }}"
        path: DC=paris,DC=local
        domain_server: SH-INTERNAL-1.paris.local
        domain_username: administrator@paris
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
 
    - name: Create a read group in a custom path
      microsoft.ad.group:
        name: "{{ item.read }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: SH-INTERNAL-1.paris.local
        domain_username: administrator@paris
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
 
    - name: Create a write group in a custom path
      microsoft.ad.group:
        name: "{{ item.write }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: SH-INTERNAL-1.paris.local
        domain_username: administrator@paris
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
 
    - name: Create Directory
      win_file:
        path: "c:\\project_share\\{{ item.name }}"
        state: directory
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
 
    - name: disable other user
      ansible.windows.win_acl_inheritance:
        path: "c:\\project_share\\{{ item.name }}"
        state: absent
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
 
 
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.write }}"
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t1
 
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: SYSTEM
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t2
 
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: administrators
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t3
 
    - name: read
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.read }}"
        rights: read
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
 
    - name: Add secret share
      ansible.windows.win_share:
        name: "{{ item.name }}"
        path: "c:\\project_share\\{{ item.name }}"
        full: "{{ item.write }}"
        read: "{{ item.read }}"
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t4
 
 
- name: lyon site share folder
  hosts: BJ-INTERNAL-1
  gather_facts: false
  tasks:
    - name: Create a group in a custom path
      microsoft.ad.ou:
        name: "{{ item.ou.split(',')[0].split('=')[1] }}"
        path: DC=lyon,DC=paris,DC=local
        domain_server: BJ-INTERNAL-1.lyon.paris.local
        domain_username: administrator@lyon
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
 
    - name: Create a read group in a custom path
      microsoft.ad.group:
        name: "{{ item.read }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: BJ-INTERNAL-1.lyon.paris.local
        domain_username: administrator@lyon
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
 
    - name: Create a write group in a custom path
      microsoft.ad.group:
        name: "{{ item.write }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: BJ-INTERNAL-1.lyon.paris.local
        domain_username: administrator@lyon
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
 
    - name: Create Directory
      win_file:
        path: "c:\\project_share\\{{ item.name }}"
        state: directory
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
 
    - name: disable other user
      ansible.windows.win_acl_inheritance:
        path: "c:\\project_share\\{{ item.name }}"
        state: absent
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
 
 
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.write }}"
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t1
 
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: SYSTEM
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t2
 
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: administrators
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t3
 
    - name: read
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.read }}"
        rights: read
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
 
    - name: Add secret share
      ansible.windows.win_share:
        name: "{{ item.name }}"
        path: "c:\\project_share\\{{ item.name }}"
        full: "{{ item.write }}"
        read: "{{ item.read }}"
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t4
 
 
三、备份文件:
# 可用的模块:
win_copy    //将 Ansible 本机的文件文件夹 拷给 Windows
win_robocopy    //在 Windows 和 Windows 之间复制文件、文件夹
# 示例:
community.windows.win_robocopy:
  src: C:\Data
  dest: \\server2\backup    //需要能够访问到
  recurse: true
delegate_to:Server1   //最好指定在哪台机器执行,指定server1就是将server1的文件夹复制过去
 
1、备份 web 根目录、DFS 目录:
 
# 这里脚本有一些比较复杂的点:
1、因为要调用两个when,并且要同时匹配两个条件,因此要在 when中用 and 来定义两个条件(如果同时写两个when条件,就是 or ,无论匹配上哪个条件都可)(或者用列表来写when的多个条件,这样用列表就等于用 when ... and ...)
2、并且还要5分钟内多次执行剧本将会退出并返回一段消息,所以这里剧本结尾创建一个文件,剧本开头去查看这个文件是否是5分钟内修改的,如果是,就debug一个信息,并且用 meta: end_play 终止剧本
3、在两台windows间复制文件、文件夹,用 win_robocopy 模块最好