管理变量和事实:
练习:使用基本身份认证的 httpd
ple.com
#写 playbook
--
- name: Webserver vars
hosts: web
vars:
firewall_pkg: firewalld
firewall_ser: firewalld
web_pkg: httpd
web_ser: httpd
ssl_pkg: mod_ssl
httpdconf_src: files/httpd.conf
httpdconf_dest: /etc/httpd/conf/httpd.conf
secrets_dir: /etc/httpd/secrets
secrets_dest: "{{ secrets_dir }}/htpasswd"
secrets_src: files/htpasswd
web_root: /var/www/html
tasks:
- name: Install packages
yum:
name:
- "{{ firewall_pkg }}"
- "{{ web_pkg }}"
- "{{ ssl_pkg }}"
- name: config service
copy:
src: "{{ httpdconf_src }}"
dest: "{{ httpdconf_dest }}"
owner: root
group: root
mode: 0644
- name: Create secrets directory
file:
path: "{{ secrets_dir }}"
state: directory
owner: apache
group: apache
mode: 0500
- name: Create htpasswd
copy:
src: "{{ secrets_src }}"
dest: "{{ secrets_dest }}"
owner: apache
group: apache
mode: 0400
- name: Create index.html
copy:
content: "{{ ansible_facts['fqdn'] }} ({{ ansible_facts['all_ipv4_addresses'] }})\n"
- name: Config firewall.service
service:
name: "{{ firewall_ser }}"
state: started
enabled: true
- name: Firewall permits https
firewall:
service: https
state: enabled
immediate: true
parmanent: true
- name: config apache.service
service:
name: "{{ web_ser }}"
state: started
enabled: true
- name: test apache
hosts: localhost
become: no
vars:
- web_user: admin
vars_files:
- vars/secret.yml
tasks:
- name: Connect Apache with Auth
uri:
url: https://rhel71.com
validate_certs: no
force_basic_auth: yes
user: "{{ web_user }}"
password: "{{ web_pass }}"
return_content: yes
register: auth_test
- debug:
var: auth_test.content
#创建加密文件
mkdir vars
ansible-vault create vars/secret.yml
New Vault password: 'caoaoyuan'
Confirm New Vault password: 'caoaoyuan'
在文件中写入:
web_pass: redhat
#创建 files 目录
mkdir files
生成一下两个文件。
htpasswd -cm htpasswd admin 生成htpasswd文件
更改配置文件允许基于身份认证的访问。
vim httpd.conf
#交互式输入密码,进行语法检测
#执行
ansible-playbook --vault-id @prompt playbook.yml
可以看出返回了dubug值。
#总结
1.变量能够让 playbook 复用
2.可以给清单中的主机和主机组定义变量
3.可以使用事实和外部文件定义变量,也可以在命令行中
4.register 关键字何以用于捕获命令输出
5.ansible vault
6.ansible 事实是从受管主机自动检测到的变量