takelage 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2df3a519d6d5690b6dd1c9758d720bfff1ebd6afc8a3c116db5651bb223b0266
4
- data.tar.gz: d924838d82f60a4d1bab01e151896f0875552726b8a9d8bdb0a6a672f12def91
3
+ metadata.gz: 6da2e24ce8c09334e2d3bc396e5ee529eab1564216719fc2f362edcb78b6a480
4
+ data.tar.gz: 5b1ca2322fa5277110e7ed54f9f9e2c2dc8618c1cdcefaadeabbbe744398f2e7
5
5
  SHA512:
6
- metadata.gz: 8cceb1a7e8200a7217b4bb5b068d8c51b40e7c425921c7150c346964a1d31fbe103dcc1b2f9b90870f3388f5fbe1bb62e3a54f664d564f33b083916288920784
7
- data.tar.gz: 40fd4ac0c4782ae56a26a76c3fbe3503252147b78e1ca66cd8ccde97f3e909acd6f084ba177ac31de6d61dc01632f828a448c91d8abb56e59b0cfc31bc3b8863
6
+ metadata.gz: 986fc63051162a239d4e4ef310f1c0113fe48858d7dfda51b37fcdbb8bfadf7c43f80aa7a4c6804a1ced4cd689422a973b11636a2c676d35639eba13da74d511
7
+ data.tar.gz: 191305505829cd4da5ee1f8d2bc7e06cb54461a6970ec5af86910d2d0c05f6d66d56b11e107bad12fbfa95a50cc9a1049caf4fb6200b763c19e19be8d3bc7a61
data/README.md CHANGED
@@ -101,6 +101,7 @@ tau [info status gopass](features/cucumber/features/info/info.status.gopass.feat
101
101
  tau [info status gpg](features/cucumber/features/info/info.status.gpg.feature) | Check gpg status
102
102
  tau [info status mutagen](features/cucumber/features/info/info.status.mutagen.feature) | Check mutagen status
103
103
  tau [info status ssh](features/cucumber/features/info/info.status.ssh.feature) | Check ssh status
104
+ tau [init packer docker](features/cucumber/features/info/init.packer.docker.feature) | Initialize packer project for docker images
104
105
  tau [mutagen check daemon](features/cucumber/features/mutagen/mutagen.check.daemon.feature)) | Check if mutagen host conenction is available
105
106
  tau [mutagen socket check](features/cucumber/features/mutagen/mutagen.socket.check.feature) [SOCKET] | Check if mutagen [SOCKET] exists
106
107
  tau [mutagen socket create](features/cucumber/features/mutagen/mutagen.socket.create.feature) [NAME] [IN] [OUT] | Create a mutagen socket [NAME] from [IN] to [OUT] of the container
data/lib/takelage.rb CHANGED
@@ -44,6 +44,10 @@ require_relative 'takelage/bit/require/import'
44
44
  require_relative 'takelage/bit/require/cli'
45
45
  require_relative 'takelage/bit/cli'
46
46
  require_relative 'takelage/completion/cli'
47
+ require_relative 'takelage/init/packer/lib'
48
+ require_relative 'takelage/init/packer/docker'
49
+ require_relative 'takelage/init/packer/cli'
50
+ require_relative 'takelage/init/cli'
47
51
  require_relative 'takelage/mutagen/check/daemon'
48
52
  require_relative 'takelage/mutagen/socket/check'
49
53
  require_relative 'takelage/mutagen/socket/create'
@@ -147,6 +151,9 @@ module Takelage
147
151
  desc 'info [COMMAND] ', 'Get information'
148
152
  subcommand 'info', Info
149
153
 
154
+ desc 'init [COMMAND] ', 'Init projects'
155
+ subcommand 'init', Init
156
+
150
157
  desc 'mutagen [COMMAND] ', 'Manage mutagen'
151
158
  subcommand 'mutagen', Mutagen
152
159
 
@@ -4,7 +4,8 @@ bit_remote: ''
4
4
  bit_require_file: 'bitrequire.yml'
5
5
  bit_root: '/bit'
6
6
  bit_ssh: ''
7
- cmd_bit_check_workspace_bit_list: 'bit list'
7
+ cmd_bit: 'bit'
8
+ cmd_bit_check_workspace_bit_list: 'bit status'
8
9
  cmd_bit_check_workspace_pwd: 'pwd'
9
10
  cmd_bit_clipboard_lib_bit_status: 'bit status'
10
11
  cmd_bit_clipboard_copy_bit_list_scope: 'bit list --skip-update --json %{scope}'
@@ -29,6 +30,7 @@ cmd_bit_scope_add_scope: 'bit remote add %{remote}/%{scope}'
29
30
  cmd_bit_scope_list_find_scopes: 'find -L %{root} -name scope.json'
30
31
  cmd_bit_scope_new_bit_init: 'mkdir -p %{root}/%{scope} && cd %{root}/%{scope} && bit init --bare'
31
32
  cmd_bit_scope_remove_scope: 'rm --force --recursive %{root}/%{scope}'
33
+ cmd_docker: 'docker'
32
34
  cmd_docker_check_daemon_docker_info: 'docker info'
33
35
  cmd_docker_container_check_existing_docker_ps: 'docker ps --filter name=^%{container}$ --quiet'
34
36
  cmd_docker_container_check_network_docker_network: 'docker network ls --quiet --filter name=^%{network}$'
@@ -45,6 +47,7 @@ cmd_docker_image_tag_check_docker_images: 'docker images --quiet %{image}'
45
47
  cmd_docker_image_tag_list_docker_images: 'docker images %{docker_user}\/%{docker_repo} --format "{{.Tag}}"'
46
48
  cmd_docker_image_update_docker_pull_latest: 'docker pull %{docker_user}/%{docker_repo}:latest'
47
49
  cmd_docker_image_update_docker_remove_dangling: 'docker image prune --force'
50
+ cmd_git: 'git'
48
51
  cmd_git_check_clean_git_unstaged: 'git diff --exit-code'
49
52
  cmd_git_check_clean_git_uncommitted: 'git diff --cached --exit-code'
50
53
  cmd_git_check_clean_git_status: 'git status --porcelain'
@@ -60,6 +63,11 @@ cmd_info_status_gpg_agent: 'gpg-connect-agent /bye'
60
63
  cmd_info_status_gpg_keys: 'gpg --list-keys'
61
64
  cmd_info_status_ssh_keys: 'ssh-add -l'
62
65
  cmd_info_status_ssh_socket: 'gpgconf --list-dirs agent-ssh-socket'
66
+ cmd_init_packer_lib_bit_init: 'bit init'
67
+ cmd_init_packer_lib_git_init: 'git init && git checkout -b main'
68
+ cmd_init_packer_lib_git_add_all: 'git add --all'
69
+ cmd_init_packer_lib_git_commit_initial: 'git commit -m "Initial commit"'
70
+ cmd_mutagen: 'mutagen'
63
71
  cmd_mutagen_check_daemon_host_connection: 'mutagen forward list --label-selector="%{hostlabel}"'
64
72
  cmd_mutagen_check_daemon_version: 'mutagen version'
65
73
  cmd_mutagen_forward_socket_create: 'mutagen forward create --name=%{socketname} --label=%{hostlabel} --label=%{takellabel} docker://%{username}@%{container}:unix:%{containersock} unix:%{hostsock}'
@@ -79,6 +87,7 @@ docker_user: 'takelage'
79
87
  git_bit_branch: 'main'
80
88
  info_project_main: 'project.yml'
81
89
  info_project_private: 'private/project.yml'
90
+ init_packer_docker_bit_require_import: 'true'
82
91
  login_wait_for_sockets: '0'
83
92
  mutagen_socket_path_mutagen: '~/.mutagen/daemon/daemon.sock'
84
93
  mutagen_socket_path_gpg: '~/.gnupg/S.gpg-agent'
@@ -8,7 +8,7 @@ module DockerCheckDaemon
8
8
  def docker_check_daemon
9
9
  return true if @docker_daemon_running
10
10
 
11
- return false unless command_available? 'docker'
11
+ return false unless command_available_else_error? config.active['cmd_docker']
12
12
 
13
13
  log.debug 'Check if the docker daemon is running'
14
14
 
@@ -32,7 +32,7 @@ module InfoStatusBar
32
32
  return unless _file_exists? takelage_version_file
33
33
 
34
34
  _file_read takelage_version_file
35
- @bar_list << "takelage: #{@content_file.chomp.green}"
35
+ @bar_list << "#{config.active['docker_repo']}: #{@content_file.chomp.green}"
36
36
  end
37
37
 
38
38
  # Add tau version info to bar
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage init
5
+ class Init < SubCommandBase
6
+ desc 'packer [COMMAND]', 'Init packer project'
7
+ subcommand 'packer', InitPacker
8
+ end
9
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage info project
5
+ class InitPacker < SubCommandBase
6
+ include Thor::Actions
7
+ include LoggingModule
8
+ include SystemModule
9
+ include ConfigModule
10
+ include ProjectModule
11
+ include GitCheckClean
12
+ include GitCheckBit
13
+ include GitCheckWorkspace
14
+ include BitCheckWorkspace
15
+ include BitClipboardLib
16
+ include BitClipboardCopy
17
+ include BitClipboardPaste
18
+ include BitRequireLib
19
+ include BitRequireImport
20
+ include InitPackerLib
21
+ include InitPackerDocker
22
+
23
+ argument :name
24
+
25
+ # Initialize bit require
26
+ # rubocop:disable Metrics/MethodLength
27
+ def initialize(args = [], local_options = {}, configuration = {})
28
+ # initialize thor parent class
29
+ super args, local_options, configuration
30
+
31
+ @bit_require_file = config.active['bit_require_file']
32
+
33
+ @ansiblelint = {
34
+ name: 'ansible/.ansible-lint',
35
+ template: 'templates/ansiblelint.tt'
36
+ }
37
+ @bitrequireyml = {
38
+ name: 'bitrequire.yml',
39
+ template: 'templates/bitrequireyml.tt'
40
+ }
41
+ @gitignore = {
42
+ name: '.gitignore',
43
+ template: 'templates/gitignore.tt'
44
+ }
45
+ @groupvarsprojectyml = {
46
+ name: 'ansible/group_vars/project.yml',
47
+ template: 'templates/groupvarsprojectyml.tt'
48
+ }
49
+ @playbooksiteyml = {
50
+ name: 'ansible/playbook-site.yml',
51
+ template: 'templates/playbooksiteyml.tt'
52
+ }
53
+ @projectyml = {
54
+ name: 'project.yml',
55
+ template: 'templates/projectyml.tt'
56
+ }
57
+ @rakefile = {
58
+ name: 'Rakefile',
59
+ template: 'templates/Rakefile.tt'
60
+ }
61
+ end
62
+ # rubocop:enable Metrics/MethodLength
63
+
64
+ # Provide template path for Thor:Actions
65
+ def self.source_root
66
+ File.dirname(__FILE__)
67
+ end
68
+
69
+ #
70
+ # init packer docker
71
+ #
72
+ desc 'docker [NAME]', 'Initialize packer project [NAME] for docker images'
73
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
74
+ Initialize packer project [NAME] for docker images
75
+ LONGDESC
76
+ # Initialize packer project [NAME] for docker images.
77
+ def docker
78
+ exit init_packer_docker
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage init packer docker
4
+ module InitPackerDocker
5
+ def init_packer_docker
6
+ log.debug 'Initialize packer project for docker images'
7
+
8
+ files = _init_packer_docker_files_get
9
+
10
+ return false unless _init_packer_docker_lib_check_prerequisites files
11
+
12
+ exit_code = _init_packer_docker_lib_create_project files
13
+
14
+ # reinitialize config with newly created files
15
+ initialize_config
16
+
17
+ return false unless _init_packer_docker_bit_require_import
18
+
19
+ return false unless exit_code
20
+
21
+ true
22
+ end
23
+
24
+ private
25
+
26
+ def _init_packer_docker_files_get
27
+ [
28
+ @ansiblelint,
29
+ @bitrequireyml,
30
+ @gitignore,
31
+ @groupvarsprojectyml,
32
+ @playbooksiteyml,
33
+ @projectyml,
34
+ @rakefile
35
+ ]
36
+ end
37
+
38
+ def _init_packer_docker_bit_require_import
39
+ if config.active['init_packer_docker_bit_require_import'] == 'true'
40
+ log.info 'Importing bit components'
41
+ return false unless bit_require_import
42
+ end
43
+
44
+ true
45
+ end
46
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage info status lib
4
+ module InitPackerLib
5
+ private
6
+
7
+ def _init_packer_docker_lib_check_prerequisites(files)
8
+ return false unless _init_packer_lib_git_check
9
+
10
+ return false unless _init_packer_lib_bit_check
11
+
12
+ return false unless _init_packer_lib_files_check files
13
+
14
+ true
15
+ end
16
+
17
+ def _init_packer_docker_lib_create_project(files)
18
+ exit_code = true
19
+
20
+ exit_code &&= _init_packer_lib_git_init
21
+ exit_code &&= _init_packer_lib_bit_init
22
+ exit_code &&= _init_packer_lib_files_create files
23
+ exit_code &&= _init_packer_lib_git_add_all
24
+ exit_code &&= _init_packer_lib_git_commit_initial
25
+
26
+ exit_code
27
+ end
28
+
29
+ def _init_packer_lib_bit_check
30
+ return false unless command_available_else_error? config.active['cmd_bit']
31
+ return true unless bit_check_workspace
32
+
33
+ log.error 'bit is already initialized!'
34
+ false
35
+ end
36
+
37
+ def _init_packer_lib_bit_init
38
+ log.info 'Initializing bit workspace'
39
+ return false unless try config.active['cmd_init_packer_lib_bit_init']
40
+
41
+ true
42
+ end
43
+
44
+ def _init_packer_lib_git_check
45
+ return false unless command_available_else_error? config.active['cmd_git']
46
+ return true unless git_check_workspace
47
+
48
+ log.error 'git is already initialized!'
49
+ false
50
+ end
51
+
52
+ def _init_packer_lib_git_init
53
+ log.info 'Initializing git workspace'
54
+ return false unless try config.active['cmd_init_packer_lib_git_init']
55
+
56
+ true
57
+ end
58
+
59
+ def _init_packer_lib_files_check(files)
60
+ exit_status = true
61
+ files.each do |file|
62
+ if _file_exists? file[:name]
63
+ log.error "File exists: #{file[:name]}"
64
+ exit_status = false
65
+ end
66
+ end
67
+ exit_status
68
+ end
69
+
70
+ def _init_packer_lib_files_create(files)
71
+ files.each do |file|
72
+ template file[:template], file[:name]
73
+ end
74
+ true
75
+ end
76
+
77
+ # git add --all.
78
+ def _init_packer_lib_git_add_all
79
+ log.info 'Preparing initial git commit'
80
+ return false unless try config.active['cmd_init_packer_lib_git_add_all']
81
+
82
+ true
83
+ end
84
+
85
+ # git commit -m "Initial commit".
86
+ def _init_packer_lib_git_commit_initial
87
+ log.info 'Saving initial git commit'
88
+ return false unless try config.active['cmd_init_packer_lib_git_commit_initial']
89
+
90
+ true
91
+ end
92
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ load 'rake/meta/Rakefile'
@@ -0,0 +1,3 @@
1
+ ---
2
+ skip_list:
3
+ - role-name
@@ -0,0 +1,13 @@
1
+ ---
2
+ scopes:
3
+ takelage.ansible:
4
+ - name: ansible/molecule/default
5
+ - name: ansible/molecule/image
6
+ - name: ansible/roles/takel-cleanup
7
+ takelage.packer:
8
+ - name: packer/templates/takelage/docker
9
+ takelage.rake:
10
+ - name: rake/ansible
11
+ - name: rake/images
12
+ - name: rake/meta
13
+ - name: rake/rubylint
@@ -0,0 +1,16 @@
1
+ .DS_Store
2
+ .idea
3
+ *.iml
4
+ *.iso
5
+ packer/images
6
+ packer/packer_cache
7
+ __pycache__/
8
+ *.pyc
9
+ .pytest_cache
10
+ pytestdebug.log
11
+ *.retry
12
+ takelage.log
13
+ takelage.yml
14
+ .vagrant
15
+ vault-password-file
16
+ *.vdi
@@ -0,0 +1,2 @@
1
+ ---
2
+ project: "{{ lookup('pipe', 'tau project') | from_yaml }}"
@@ -0,0 +1,6 @@
1
+ ---
2
+ - name: (playbook-site) create project
3
+ hosts: all
4
+ gather_facts: false
5
+ roles:
6
+ - takel-cleanup
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: <%= name %>
3
+ version: 0.1.0
4
+
5
+ pipelines:
6
+ - prod
7
+
8
+ images:
9
+ project:
10
+ base_user: takelage
11
+ base_repo: takelslim
12
+ base_tag: latest
13
+ layers:
14
+ - site
15
+ omit_pipeline_name: prod
16
+ target_user: takelage
17
+ target_repo: init
18
+
19
+ local_user: packer_local
@@ -68,7 +68,7 @@ module ConfigModule
68
68
  if config_key == 'project_root_dir'
69
69
  log.error 'Please create a "Rakefile" in the project root directory'
70
70
  else
71
- log.error "Unset config key. Please configure \"#{config_key}\""
71
+ log.error "Missing config key. Please configure \"#{config_key}\""
72
72
  end
73
73
  @configured = false
74
74
  false
@@ -7,22 +7,26 @@ require 'yaml'
7
7
  # Interaction with the operating system
8
8
  # rubocop:disable Metrics/ModuleLength
9
9
  module SystemModule
10
- # Check if a command is available
10
+ # Check if a command is available else log error message
11
11
  # @return [Boolean] is the command available?
12
- def command_available?(command)
13
- return true if instance_variable_get("@command_available_#{command}")
14
-
15
- log.debug "Check if the command \"#{command}\" is available"
12
+ def command_available_else_error?(command)
13
+ unless _command_available? command
14
+ log.error "The command \"#{command}\" is not available"
15
+ return false
16
+ end
16
17
 
17
- status = try "which #{command}"
18
+ command_available command
19
+ end
18
20
 
19
- unless status.exitstatus.zero?
20
- log.debug "The command \"#{command}\" is not available"
21
+ # Check if a command is available else log warning message
22
+ # @return [Boolean] is the command available?
23
+ def command_available_else_warn?(command)
24
+ unless _command_available? command
25
+ log.warn "The command \"#{command}\" is not available"
21
26
  return false
22
27
  end
23
28
 
24
- log.debug "The command \"#{command}\" is available"
25
- instance_variable_set("@command_available_#{command}", true)
29
+ command_available command
26
30
  end
27
31
 
28
32
  # Convert hash to yaml.
@@ -118,6 +122,23 @@ module SystemModule
118
122
 
119
123
  private
120
124
 
125
+ # Check if command is available
126
+ def _command_available?(command)
127
+ return true if instance_variable_get("@command_available_#{command}")
128
+
129
+ log.debug "Check if the command \"#{command}\" is available"
130
+ status = try "which #{command}"
131
+ return false unless status.exitstatus.zero?
132
+
133
+ true
134
+ end
135
+
136
+ # Command is available
137
+ def command_available(command)
138
+ log.debug "The command \"#{command}\" is available"
139
+ instance_variable_set("@command_available_#{command}", true)
140
+ end
141
+
121
142
  # Check if file exists.
122
143
  def _file_exists?(file)
123
144
  unless File.exist? File.expand_path(file)
@@ -9,7 +9,7 @@ module MutagenCheckDaemon
9
9
  def mutagen_check_daemon
10
10
  return true if @mutagen_daemon_available
11
11
 
12
- return false unless command_available? 'mutagen'
12
+ return false unless command_available_else_warn? config.active['cmd_mutagen']
13
13
 
14
14
  log.debug 'Check mutagen status'
15
15
 
data/lib/takelage/version CHANGED
@@ -1 +1 @@
1
- 0.30.0
1
+ 0.32.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: takelage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.32.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geospin
@@ -126,16 +126,16 @@ dependencies:
126
126
  name: bundler
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '1.17'
131
+ version: 2.2.10
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '1.17'
138
+ version: 2.2.10
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: cucumber
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -259,6 +259,17 @@ files:
259
259
  - lib/takelage/info/status/gpg.rb
260
260
  - lib/takelage/info/status/lib.rb
261
261
  - lib/takelage/info/status/ssh.rb
262
+ - lib/takelage/init/cli.rb
263
+ - lib/takelage/init/packer/cli.rb
264
+ - lib/takelage/init/packer/docker.rb
265
+ - lib/takelage/init/packer/lib.rb
266
+ - lib/takelage/init/packer/templates/Rakefile.tt
267
+ - lib/takelage/init/packer/templates/ansiblelint.tt
268
+ - lib/takelage/init/packer/templates/bitrequireyml.tt
269
+ - lib/takelage/init/packer/templates/gitignore.tt
270
+ - lib/takelage/init/packer/templates/groupvarsprojectyml.tt
271
+ - lib/takelage/init/packer/templates/playbooksiteyml.tt
272
+ - lib/takelage/init/packer/templates/projectyml.tt
262
273
  - lib/takelage/lib/config.rb
263
274
  - lib/takelage/lib/logging.rb
264
275
  - lib/takelage/lib/project.rb
@@ -290,7 +301,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
290
301
  requirements:
291
302
  - - ">="
292
303
  - !ruby/object:Gem::Version
293
- version: '2.4'
304
+ version: '2.5'
294
305
  required_rubygems_version: !ruby/object:Gem::Requirement
295
306
  requirements:
296
307
  - - ">="