简单几句话了解Ansible-playbook 基础 (一)

简单几句话了解Ansible-playbook 基础 (一)

简单几句话了解Ansible-playbook

一、了解Ansible配置文件及优先级问题

  1. Ansible配置文件
]$ /etc/ansible/ansible.cfg 
#inventory      = /etc/ansible/hosts      #主机列表配置文件
#library        = /usr/share/my_modules/  #库文件存放目录
#remote_tmp     = ~/.ansible/tmp          #临时py文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp          #本机的临时执行目录
#forks          = 5                       #默认并发数
#sudo_user      = root                    #默认sudo用户
#ask_sudo_pass = True                     #每次执行是否询问sudo的ssh密码
#ask_pass      = True                     #每次执行是否询问ssh密码
#remote_port    = 22                      #远程主机端口
host_key_checking = False                 #跳过检查主机指纹
log_path = /var/log/ansible.log           #ansible日志

[privilege_escalation]   #如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
  1. Ansible配置文件优先级
项目目录{ansible.cfg} > 当前用户家目录{.ansible.cfg} > /etc/ansible/ansible.cfg
  1. Ansible 各模块使用——查帮助
ansible-doc module  # ansible-doc shell
ansible $group -m $module -a '$CMD' (-i $hosts)
# ansible lingchen -m yum -a "name=nginx state=latest enablerepo=epel exclude=kernel*,foo*" -i hosts
# ansible lingchen -m copy -a "src=./nginx.conf dest=/etc/nginx/conf/nginx.conf owner=lingchen group=lingchen mode=644 backup=yes" -i hosts
  1. 各模块简单说明
command  shell  本质上执行都是基础命令  (command不支持管道技术)
yum模块  安装present 卸载absent 升级latest 排除exclude 指定仓库enablerepo
get_url 下载互联网软件至本地
service 启动服务
…………

二、了解playbook 格式

Playbook 由yaml语法格式文件进行编排,具有结构清晰、可读性强

注意事项:

  1. 缩进:使用固定的缩进风格表示层级关系,每层层级关系间缩进需相同,默认推荐使用2空格,不能使用Tab.
  2. 冒号:除去以冒号结尾的,其他所有情况冒号后面必须要有空格隔开.
  3. 短横线:代表列表项,使用一个短横线加一个空格,上下多个相同缩进级别的短横线为同一列表.
  1. 简单的playbook ——[Install NFS NGINX]
]$ cat simple.yaml
---
- hosts: 10.8.3.23
  tasks:
    - name: Install NFS Server
      yum:
        name: nfs-utils
        state: present
    - name: Configure NFS server
      copy:
        src: ./exports.j2
        dest: /etc/exports
        owner: root
        group: root
        mode: '0644'
        backup: yes
    - name: Create NFS Group
      group:
        name: www
        gid: 666
    - name: Create NFS User
      user: 
        name: www
        uid: 666
        group: 666
        shell: /sbin/nologin
        create_home: no
    - name: Create NFS Data
      file:
        path: /data 
        state: directory 
        owner: www 
        group: www 
        recurse: yes
    - name: Service NFS Server
      service:
        name: nfs 
        state: started 
        enabled: yes
      
     
---
- hosts: 10.8.3.24
  tasks:
    - name: Client Create NFS Data
      file:
        path: /data/lingchen
        state: directory
    - name: Client Mount NFS Server
      mount:
        src: 10.8.3.23:/data
        path: /data/lingchen
        fstype: nfs
        opts: defaults
        state: mounted
      
      
      
----
- hosts: lingchen
  tasks:
    - name: Install Nginx Server
      yum: 
        name: nginx
        state: present
    - name: Configure Nginx Server
      copy: 
        src: ./nginx.conf.j2 
        dest: /etc/nginx/conf/nginx.conf 
        backup: yes

    - name: Configure Httpd WebSite
      copy: 
        src: ./lingchen.j2 
        dest: /var/www/html/lingchen.html 
        owner: http 
        group: http 
        mode: 644

    - name: Service Httpd Server
      service: 
        name: httpd 
        state: started 
        enabled: yes

    - name: Service Firewalld Server
      service: 
        name: firewalld 
        state: started

    - name: Configure Firewalld Server
      firewalld: 
        zone: public 
        port: 8010/tcp 
        permanent: yes 
        immediate: yes 
        state: enabled

三、Playbook引用变量

引用变量:顾名思义就是简化精简一个playbook项目,从未维护起来更加方便。

比如:需要一个playbook编写完后,在多处使用同一个值,若需要修改时候,则需要从头到尾修改替换,而使用变量相当于高中数学中的X,X可以为任何值,则只需要替换变量值即可。

定义变量及使用:

定义变量有三种方式

  1. 通过playbook文件中play的定义,通过vars来进行变量定义,或者通过vars_files进行定义
  2. 通过inventory主机清单进行变量定义,可通过host_vars对主机进行定义,通过group_vars对主机组进行定义
  3. 通过执行playbook时使用-e参数指定变量

使用变量:

格式:{{ key }} 固定写法

  1. 在playboo中play定义变量
- hosts: lingchen
  vars:
    - web_packages: nginx
    - mysql_packages: mariadb
  tasks:
    - name: Installed {{ web_packages }} {{ ftp_packages }}
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present    
  1. 通过vars_files 变量文件定义,并在playbook中引用
]$ cat vars_lingchen.yml 
web_packages: nginx
mysql_packages: mariadb

]$ cat lingchen.yml
- hosts: lingchen
  vars_files: ./vars_lingchen.yml

  tasks:
    - name: Installed {{ web_packages }} {{ ftp_packages }}
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present
  1. 通过inventory主机清单进行变量定义,在项目目录下创建两个变量的目录==host_vars、 group_vars==
1. 创建目录
]$ mkdir host_vars
]$ mkdir group_vars

2. 在group_vars目录中创建一个文件,文件名与inventory清单中的组名称要保持完全一致
]$ cat group_vars/lingchen
web_packages: nginx
mysql_packages: mariadb

3. playbook中引用变量
]$ cat lingchen2.yml 
- hosts: lingchen
  tasks:
    - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum: 
        name: 
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present
     
 *******************************************************************************************
 默认情况下,group_vars目录中文件名与hosts清单中的组名保持一致.                             
 比如在group_vars目录中创建了lingchen组的变量,其他组是无法使用lingchen组的变量
 系统提供了一个特殊组,all,只需要在group_vars目录下建立一个all文件,编写好变量,所有组都可使用
 *******************************************************************************************
  1. 通过hosts_vars 定义主机变量,文件名与inventory清单中的主机名称要保持完全一致,用法与组变量同理,用all都能解决
  1. 通过执行playbook时使用-e参数指定变量
]$ cat lingchen5.yml 
- hosts: "{{ hosts }}"    #注意:这是一个变量名称
  tasks:
    - name: Install Rpm Packages "{{ web_packages }}" "{{ mysql_packages }}"
      yum: 
        name: 
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present
[root@m01 project1]# #ansible-playbook -i hosts  lingchen5.yml -e "hosts=lingchen"

Ansible-playbook 变量优先级

命令行传参 >> playbook中定义的vars_files>vars >> inventory中定义的host_vars > group_vars/group_name > group_vars-all


标签:暂无标签
版权属于:lingchen 所有,采用《知识署名-非商业性使用许可协议》进行许可,转载请注明文章来源。

本文链接: https://www.yfzblog.cn/devops/ansible.html

赞 (0)

评论区

评论一下~


2+25=?

暂无评论,要不来一发?

回到顶部