ansible playbooks示例与应用

取变量应用

[devops@server1 ansible]$ ls
ansible.cfg  files  hostinfo.yml  httpd.yml  inventory  templates
[devops@server1 ansible]$ vim templates/info 
主机名:{{ ansible_facts['hostname'] }}
主机ip:{{ ansible_facts['eth0']['ipv4']['address'] }}
根分区大小:{{ ansible_facts['devices']['dm-0']['size'] }}
系统内核:{{ ansible_facts['kernel'] }}

在这个文件内写需要取的变量。

[devops@server1 ansible]$ vim hostinfo.yml
---
- hosts: all
  tasks:
    - name: create infofile
      template:
        src: templates/info			##上面编写的info文件地址
        dest: /mnt/hostinfo			##存放地址
[devops@server1 ansible]$ ansible-playbook hostinfo.yml

在这里插入图片描述
推送
在这里插入图片描述
测试变量的显示。

yml文件编写应用

软件安装
下面我们在来写一个yml文件。

[devops@server1 ansible]$ vim install.yml
---
- hosts: all
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
      when: ansible_facts['hostname'] == 'server2'

这个文件的作用就是安装httpd服务,只不过这里加了一个条件,就是当主机名为server2时安装

在这里插入图片描述
推送时发现跳过了server3。只对server2进行操作,这样就可以灵活定义需要操作的主机。
如:

[devops@server1 ansible]$ vim install.yml 
---
- hosts: all
  tasks:
    - name: install httpd				##设置只在server2安装httpd等多个软件	
      yum:
        name: "{{ item }}"				##固定变量
        state: present
      when: ansible_facts['hostname'] == 'server2'
      loop:
        - httpd
        - mariadb
        - php

    - name: install vim			##设置在只server3安装vim
      yum:
        name: vim
        state: present
      when: ansible_facts['hostname'] == 'server3'		

在这里插入图片描述
在server2安装多个软件,在server3只安装vim。
制作相互解析

[devops@server1 ansible]$ vim templates/hosts.j2
{% for host in groups ['webservers'] %}
{{ hostvars[host]['ansible_facts']['eth0']['ipv4']['address'] }} {{ hostvars[host]['ansible_facts']['hostname'] }}
{% endfor %}

制作解析文件。

[devops@server1 ansible]$ vim hosts.yml
---
- hosts: all
  tasks:
    - name: create hosts
      template:
        src: templates/hosts.j2
        dest: /etc/hosts
        owner: root
        group: root
        mode: 644

编写yml文件。
在这里插入图片描述
推送。
在这里插入图片描述
在这里插入图片描述
server2和server3的相互解析做好了。
批量创建用户

[devops@server1 ansible]$ vim adduser.yml
---
- hosts: all
  tasks:
    - name: create users
      user:
        name: "{{ item }}"
        state: present
        password: redhat		##密码
      loop:
        - user1
        - user2
        - user3

在这里插入图片描述
在两台主机都新建了用户,不过这样创建的用户密码都是一样的,我们可以创建一个列表,指定用户的密码和名称。

[devops@server1 ansible]$  cd vars/
[devops@server1 vars]$ ls
userlist.yml
[devops@server1 vars]$ vim userlist.yml 
---
userlist:
  - user: user1
    pass: redhat
  - user: user2
    pass: yangmi
  - user: user3
    pass: hang

用户密码列表。

[devops@server1 ansible]$ pwd
/home/devops/ansible
[devops@server1 ansible]$ vim adduser.yml
---
- hosts: all
  vars_files:
    - vars/userlist.yml
  tasks:
    - name: create users
      user:
        name: "{{ item.user }}"		##用户名
        state: present
        password: "{{ item.pass }}"	 ##密码
      loop: "{{ userlist }}"

在这里插入图片描述
可以直接查看到用户列表,这样是不安全的,我们可以对这个文件进行加密。

[devops@server1 ansible]$ ansible-vault --help
Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]

encryption/decryption utility for Ansible data files

Options:
  --ask-vault-pass      ask for vault password
  -h, --help            show this help message and exit
  --new-vault-id=NEW_VAULT_ID
                        the new vault identity to use for rekey
  --new-vault-password-file=NEW_VAULT_PASSWORD_FILE
                        new vault password file for rekey
  --vault-id=VAULT_IDS  the vault identity to use
  --vault-password-file=VAULT_PASSWORD_FILES
                        vault password file
  -v, --verbose         verbose mode (-vvv for more, -vvvv to enable
                        connection debugging)
  --version             show program's version number and exit

 See 'ansible-vault <command> --help' for more information on a specific
command.

查看帮助

[devops@server1 ansible]$ ansible-vault encrypt vars/userlist.yml 

在这里插入图片描述
输入密码后就可以进行加密了。

[devops@server1 ansible]$ ansible-playbook adduser.yml --ask-vault-pass

在这里插入图片描述
推送时要加入密码。

[root@server2 ~]# cat /etc/shadow

在这里插入图片描述
在server2中查看/etc/shadow,可以发现密码是明文的,为了安全性考虑,我们需要给它加密。

[devops@server1 ansible]$ vim adduser.yml 
---
- hosts: all
  vars_files:
    - vars/userlist.yml
  tasks:
    - name: create users
      user:
        name: "{{ item.user }}"
        state: present
        password: "{{ item.pass | password_hash('sha512','mysecretsalt') }}"		##加密方式
      loop: "{{ userlist }}"
[devops@server1 ansible]$ ansible-playbook adduser.yml --ask-vault-pass

在这里插入图片描述
推送。

[root@server2 ~]# cat /etc/shadow

在这里插入图片描述

再次在server2查看,加密成功了。
对多个yml文件进行加密时要注意,加密时要使用一个密码,因为在验证时只能输入一个密码。

猜你喜欢

转载自blog.csdn.net/qq_41961805/article/details/91444591