摘要:本节主要总结ansible roles中常用的语法以及高级特性、例如变量、下载、解压、修改文件内容等,便于使用ansible协同开发,做更加庞大的任务。
常用
远程执行脚本
- 脚本放到template里
- name: init rbac rights
template:
src: 'init_rbac_privilege.sh'
dest: '/tmp/init_rbac_privilege.sh'
mode: 0755
- name: init rbac rights
shell: "bash /tmp/init_rbac_privilege.sh"
run_once: true
ignore_errors: yes
- 脚本放files文件里
- name: copy script file to remote server
copy:
src: "generate_uuid.py"
dest: "{{ dest_script_file }}"
mode: 0755
- name: set to execute script file and args
shell: "python {{ dest_script_file }}"
设置某个参数供下文使用
- name: set to execute script file path
set_fact:
dest_script_file: '/tmp/generate_uuid.py'
- name: copy script file to remote server
copy:
src: "generate_uuid.py"
dest: "{{ dest_script_file }}"
mode: 0755
文件是否存在和变量是否声明
- stat:
path: "{{ dest_script_file }}"
register: file_result
- name: set to execute script file and args
shell: "python {{ dest_script_file }} {{ inventory_hostname }}"
register: p_new_host_uuid
when: host_uuid is not defined and file_result.stat.exists
解压
解压tar.gz,desc所指定的目录需要提前创建
- name: Unarchive ceph_report program package
unarchive:
remote_src: yes
src: "/tmp/ceph_report/ceph_report.tar.gz"
dest: "/data/monitorcloud/script/"
下载
- name: download ceph_report package
get_url:
url: "http://{{ tstack_repo_address }}:{{ tstack_repo_port }}/tstack/tstack-tars/ceph_report.tar.gz"
dest: "/tmp/ceph_report/ceph_report.tar.gz"
mode: 0644
修改文件内容,直接替换方式
- name: insert mons connect message
lineinfile:
path: "/data/monitorcloud/script/ceph_report/host_dic"
state: present
insertafter: EOF
backrefs: no
line: "{{item[0]}} {{item[1]}}"
with_nested:
- "{{ groups['mons'] | union( groups['osds'] )}}"
- ["{{ansible_ssh_pass}}"]
ignore_errors: true
配置文件
ansible中指定配置文件,.j2中可映射ansible变量
- name: Prepare ceph_report_http program configuration file
template:
src: "opts.py.j2"
dest: "/data/monitorcloud/script/ceph_report/opts.py"
mode: 0644
执行命令时指定脚本执行目录
- name: execute ceph_report_http install script
shell: "/usr/bin/python ceph_report_http.py install"
args:
chdir: '/data/monitorcloud/script/ceph_report/'
ignore_errors: yes
高级
委托
在当前运行ansible的机器上,委托其他机器运行
- name: add host record to center server
shell: 'echo "192.168.1.100 test.xyz.com " >> /etc/hosts'
delegate_to: 192.168.1.1
也可以委托ansible服务端运行
- name: add host record to center server
shell: 'echo hello'
delegate_to: localhost
统一目录结构
project/
├── filter_plugins # 自定义 filter 插件存放目录
├── fooapp # Fooapp 片色目录 ( 与 common 角色目录平级)
├── group_vars
│ ├── group1 # group1 自定义变量文件
│ └── group2 # group2 自定义变量文件
├── host_vars
│ ├── hostname1 # hostname1 自定义变量文件
│ └── hostname2 # hostname1 自定义变量文件
├── library # 自定义模块存放目录
├── monitoring # Monitoring 角色目录 ( 与 common 角色目录平级)
├── roles # Role 存放目录
│ └── common # common 角色目录
│ ├── defaults
│ │ └── main.yml # common 角色自定义文件 (优先级低)
│ ├── files
│ │ ├── bar.txt # common 角色 files 资源文件
│ │ └── foo.sh # common 角色 files 资源文件
│ ├── handlers
│ │ └── main.yml # common 角色 handlers 入口文件
│ ├── meta
│ │ └── main.yml # common 角色 依赖文件
│ ├── tasks
│ │ └── main.yml # common 角色 task 入口文件
│ ├── template
│ │ └── ntp.conf.j2 # common 角色 template 文件
│ └── vars
│ └── main.yml # common 角色 变量定义文件
├── site.yaml # Playbook 统一入口文件
├── stage # stage 环境的 inventory 文件
├── webservers.yml # 特殊 Playbook 文件
└── webtier # webtier 角色目录 ( 与 common 角色目录平级)
引用
ansible进阶技巧 https://www.ibm.com/developerworks/cn/linux/1608_lih_ansible/index.html
shilei ansible 文档 https://wiki.shileizcc.com/confluence/display/AN/Ansible
骏马金龙 ansible系列文章 http://www.cnblogs.com/f-ck-need-u/p/7576137.html#ansible
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论