+ All Categories
Home > Technology > Best practices for ansible roles development

Best practices for ansible roles development

Date post: 22-Jan-2018
Category:
Upload: jtyr
View: 190 times
Download: 0 times
Share this document with a friend
40
Transcript

●●

○○○○

●○○

- file: path=/etc/foo.conf mode=0644

- file: path=/etc/foo.conf mode=0644

- file: "path=/etc/foo.conf mode=0644"

- file: path: /etc/foo.conf mode: 0644

- file: path: "{{ my_path }}" owner: "foo" group: "bar" mode: "0644"

- copy:dest: "{{ my_path }}"

content: " Some very long line which needs to be wrapped"

- copy: dest: "{{ my_path }}" content: "First\nSecond\n"

- file: path: "{{ my_path }}" owner: foo group: bar mode: 0644

- copy:dest: "{{ my_path }}"

content: >2- Some very long line which needs to be wrapped

- copy:dest: "{{ my_path }}"

content: | First Second

● - { } [ ] * & ? | > ! % ` # @ :

- file: path: "{{ my_path }}" mode: 0644

●- debug: msg: "Path: {{ my_path }}"

● yes false

- copy: dest: "{{ my_path }}" content: "yes"

● yamllint

ansible all -i localhost, --connection local -m debug -a 'msg={{xxx}}' -e '{xxx: @asd}'

- file: path: "{{ my_path }}" owner: foo group: bar mode: 0644

- hosts: all vars: data: aaa: bbb ccc: - ddd: - eee

# Half tabs (4 spaces)- file: path: "{{ my_path }}" owner: foo group: bar mode: 0644

# Inconsistent indentation- hosts: all vars: data: aaa: bbb ccc: - ddd: - eee

● .yml .yaml .jon .json● .yaml meta

●●

●○○

# roles/role1/defaults/main.yamlvar1: aaa

# roles/role2/defaults/main.yamlvar1: bbb

# group_vars/allvar1: ccc

# role1/defaults/main.yamlrole1_var1: aaa

# role2/defaults/main.yamlrole2_var1: bbb

# group_vars/allrole2_var1: ccc

# roles/role1/defaults/main.yamlrole1_var1: aaa

# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}

# group_vars/allrole1_var2: bbb

# roles/role1/defaults/main.yamlrole1_var1: aaa# Must be defined by the userrole1_var2: null

# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}

# group_vars/allrole1_var2: bbb

# roles/role1/defaults/main.yamlrole1_var1: aaa

# roles/role1/vars/main.yamlrole1_var2: bbb

# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}

# roles/role1/defaults/main.yamlrole1_var1: aaarole1_var2: bbb

# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}

● vars defaults

# roles/role1/meta/main.yamldependencies: - role2

# roles/role1/vars/main.yamlrole1_var1: bbb

# roles/role2/defaults/main.yamlrole1_var1: aaa

●○○

- file: path: /etc/foo.conf mode: 0644

- name: Set foo.conf mode file: path: /etc/foo.conf mode: 0644

- cron: name: Run my command job: /usr/bin/my_prog minute: "*" hour: "*" state: present

- cron: name: Run my command job: /usr/bin/my_prog

- cron: name: Run my command minute: "{{ minute }}" hour: "{{ hour }}" job: /usr/bin/my_prog

- package: name: mysql-server

- template: src: my.cnf.j2 dest: /etc/my.cnf

- service: name: mysql enabled: yes state: started

- package: name: mysql-server tags: - mysql_pkg

- template: src: my.cnf.j2 dest: /etc/my.cnf tags: - mysql_config

- service: name: mysql enabled: yes state: started tags: - mysql_service

# roles/mysql/tasks/main.yaml- package: name: "{{ mysql_pkg }}" notify: Restart MySQL service tags: mysql_pkg

- template: src: my.cnf.j2 dest: "{{ mysql_config_path }}" notify: Restart MySQL service tags: mysql_config

- service: name: "{{ mysql_service }}" enabled: yes tags: mysql_service

- service: name: "{{ mysql_service }}" state: started register: mysql_service_started tags: mysql_service

# roles/mysql/handlers/main.yaml- name: Restart MySQL service service: name: "{{ mysql_service }}" state: restarted when: > mysql_service_started is not defined or not mysql_service_started.changed

# roles/mysql/defaults/main.yamlmysql_pkg: mysql-servermysql_config_path: /etc/my.cnfmysql_service: mysql

- lineinfile: path: /etc/selinux/config regexp: ^SELINUX= line: SELINUX=enforcing

- template: src: selinux_config.j2 dest: /etc/selinux/config

# Desired config file (myapp.cfg):[section1]option11=value11option12=value12

# myapp_role/templates/myapp.cfg.j2:{{ myapp_config | encode_ini }}

# myapp_role/defaults/main.yaml:myapp_config: section1: option11: value11 option12: value12

# myapp_role/tasks/main.yaml:- name: Create config file template: dest: /etc/myapp/ myapp.cfg src: myapp.cfg.j2

# myapp_role/defaults/main.yaml:

myapp_section1_option11: value1myapp_section1_option12: value2

myapp_section1__default: option11: "{{ myapp_section1_option11 }}" option12: "{{ myapp_section1_option12 }}"

myapp_section1__custom: []

myapp_section1: "{{ myapp_section1__default.update(myapp_section1__custom)}}{{ myapp_section1__default}}"

myapp_config__default: section1: "{{ myapp_section1 }}"

myapp_config__custom: {}

myapp_config: "{{ myapp_config__default.update(myapp_config__custom) }}{{ myapp_config__default }}"

# Desired config file (/etc/selinux/config):SELINUX=enforcingSELINUXTYPE=targeted

# roles/sudo/templates/selinux_config.j2:{{ ansible_managed | comment }}{{ selinux_config | encode_ini(ucase_prop=true) }}

# roles/selinux/defaults/main.yaml:selinux_config: selinux: enforcing selinuxtype: targeted

# roles/selinux/tasks/main.yaml:- name: Create config file template: dest: /etc/selinux/config src: selinux_config.j2

● README.md●

○○○○○

■○○

●●●●●●●

●●

git clone https://github.com/jtyr/vagrantfile_config.git /tmp/vagrantfile_configmkdir -p /tmp/test/roles && cd /tmp/testgit clone https://github.com/jtyr/ansible-nginx.git roles/nginxgit clone https://github.com/jtyr/ansible-config_encoder_filters.git roles/config_encoder_filtersln -s /tmp/vagrantfile_config/Vagrantfile ./cat > vagrant.yaml <<END---defaults: provision_individual: yesvms: testvm1: ports: HTTP: host: 8080 guest: 80ENDcat > site.yaml <<END---- hosts: all become: yes roles: - nginxENDvagrant upvagrant provisionansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory site.yamlvagrant sshssh -p 10000 -i .vagrant/machines/test/virtualbox/private_key -l vagrant localhostvagrant destroy -f


Recommended